Skip to content

Commit 29a2d32

Browse files
committed
feat: 增强消息发送功能,支持发送照片和编辑消息的标题及媒体
1 parent 42efe7c commit 29a2d32

File tree

2 files changed

+77
-8
lines changed

2 files changed

+77
-8
lines changed

telegram/bot.go

+26-7
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,32 @@ func SendMessage(ctx context.Context, b *bot.Bot, update *Update, m *Message) er
125125
}
126126
if update.CallbackQuery != nil {
127127
origin := update.CallbackQuery.Message.Message
128-
param := m.toEditMessageTextParams(origin.Chat.ID, origin.ID)
129-
_, err := b.EditMessageText(ctx, param)
130-
return err
131-
} else if update.Message != nil {
132-
param := m.toSendMessageParams(update.Message.Chat.ID)
133-
_, err := b.SendMessage(ctx, param)
134-
return err
128+
if len(origin.Photo) == 0 {
129+
param := m.toEditMessageTextParams(origin.Chat.ID, origin.ID)
130+
_, err := b.EditMessageText(ctx, param)
131+
return err
132+
} else {
133+
if m.Media == nil {
134+
param := m.toEditMessageCaptionParams(origin.Chat.ID, origin.ID)
135+
_, err := b.EditMessageCaption(ctx, param)
136+
return err
137+
} else {
138+
param := m.toEditMessageMediaParams(origin.Chat.ID, origin.ID)
139+
_, err := b.EditMessageMedia(ctx, param)
140+
return err
141+
}
142+
}
143+
}
144+
if update.Message != nil {
145+
if m.Media == nil {
146+
param := m.toSendMessageParams(update.Message.Chat.ID)
147+
_, err := b.SendMessage(ctx, param)
148+
return err
149+
} else {
150+
param := m.toSendPhotoParams(update.Message.Chat.ID)
151+
_, err := b.SendPhoto(ctx, param)
152+
return err
153+
}
135154
}
136155
return nil
137156
}

telegram/message.go

+51-1
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ func NewButton[T any](text, dType string, data T) Button {
2121

2222
type Message struct {
2323
Text string
24-
Button [][]Button
24+
Media models.InputFile
2525
ParseMode models.ParseMode
26+
Button [][]Button
2627
}
2728

2829
func (m *Message) toInlineKeyboardMarkup() *models.InlineKeyboardMarkup {
@@ -54,6 +55,19 @@ func (m *Message) toSendMessageParams(chatID int64) *bot.SendMessageParams {
5455
return params
5556
}
5657

58+
func (m *Message) toSendPhotoParams(chatID int64) *bot.SendPhotoParams {
59+
params := &bot.SendPhotoParams{
60+
ChatID: chatID,
61+
Caption: m.Text,
62+
ParseMode: m.ParseMode,
63+
Photo: m.Media,
64+
}
65+
if len(m.Button) > 0 {
66+
params.ReplyMarkup = m.toInlineKeyboardMarkup()
67+
}
68+
return params
69+
}
70+
5771
func (m *Message) toEditMessageTextParams(chatID int64, messageID int) *bot.EditMessageTextParams {
5872
params := &bot.EditMessageTextParams{
5973
ChatID: chatID,
@@ -66,3 +80,39 @@ func (m *Message) toEditMessageTextParams(chatID int64, messageID int) *bot.Edit
6680
}
6781
return params
6882
}
83+
84+
func (m *Message) toEditMessageCaptionParams(chatID int64, messageID int) *bot.EditMessageCaptionParams {
85+
params := &bot.EditMessageCaptionParams{
86+
ChatID: chatID,
87+
MessageID: messageID,
88+
Caption: m.Text,
89+
}
90+
if len(m.Button) > 0 {
91+
params.ReplyMarkup = m.toInlineKeyboardMarkup()
92+
}
93+
return params
94+
}
95+
96+
func (m *Message) toEditMessageMediaParams(chatID int64, messageID int) *bot.EditMessageMediaParams {
97+
params := &bot.EditMessageMediaParams{
98+
ChatID: chatID,
99+
MessageID: messageID,
100+
Media: &models.InputMediaPhoto{
101+
Caption: m.Text,
102+
ParseMode: m.ParseMode,
103+
},
104+
}
105+
photo := &models.InputMediaPhoto{}
106+
if upload, ok := m.Media.(*models.InputFileUpload); ok {
107+
photo.Media = "attach://" + upload.Filename
108+
photo.MediaAttachment = upload.Data
109+
}
110+
if url, ok := m.Media.(*models.InputFileString); ok {
111+
photo.Media = url.Data
112+
}
113+
params.Media = photo
114+
if len(m.Button) > 0 {
115+
params.ReplyMarkup = m.toInlineKeyboardMarkup()
116+
}
117+
return params
118+
}

0 commit comments

Comments
 (0)