6
6
"encoding/json"
7
7
"errors"
8
8
"fmt"
9
+ "github.com/bots-go-framework/bots-go-core/botkb"
9
10
"net/http"
10
11
"strconv"
11
12
"time"
@@ -215,20 +216,25 @@ func (r tgWebhookResponder) SendMessage(ctx context.Context, m botsfw.MessageFro
215
216
return
216
217
}
217
218
if m .Text == "" && m .Keyboard != nil {
218
- sendable = tgbotapi .NewEditMessageReplyMarkup (chatID , messageID , inlineMessageID , m .Keyboard .(* tgbotapi.InlineKeyboardMarkup ))
219
+ switch keyboard := m .Keyboard .(type ) {
220
+ case * tgbotapi.InlineKeyboardMarkup :
221
+ sendable = tgbotapi .NewEditMessageReplyMarkup (chatID , messageID , inlineMessageID , keyboard )
222
+ case * botkb.MessageKeyboard :
223
+ switch keyboard .KeyboardType () {
224
+ case botkb .KeyboardTypeInline :
225
+ kb := getTelegramInlineKeyboard (m .Keyboard )
226
+ sendable = tgbotapi .NewEditMessageReplyMarkup (chatID , messageID , inlineMessageID , tgbotapi .NewInlineKeyboardMarkup (kb .InlineKeyboard ... ))
227
+ default :
228
+ err = fmt .Errorf ("unknown keyboard type %T(%v)" , keyboard .KeyboardType (), keyboard )
229
+ return
230
+ }
231
+ }
219
232
} else if m .Text != "" {
220
233
editMessageTextConfig := tgbotapi .NewEditMessageText (chatID , messageID , inlineMessageID , m .Text )
221
234
editMessageTextConfig .ParseMode = parseMode ()
222
235
editMessageTextConfig .DisableWebPagePreview = m .DisableWebPagePreview
223
236
if m .Keyboard != nil {
224
- switch keyboard := m .Keyboard .(type ) {
225
- case * tgbotapi.InlineKeyboardMarkup :
226
- editMessageTextConfig .ReplyMarkup = keyboard
227
- //case tgbotapi.ForceReply:
228
- // editMessageTextConfig.ReplyMarkup = keyboard
229
- default :
230
- panic (fmt .Sprintf ("m.Keyboard has unsupported type %T" , m .Keyboard ))
231
- }
237
+ editMessageTextConfig .ReplyMarkup = getTelegramInlineKeyboard (m .Keyboard )
232
238
}
233
239
sendable = editMessageTextConfig
234
240
} else {
@@ -244,7 +250,7 @@ func (r tgWebhookResponder) SendMessage(ctx context.Context, m botsfw.MessageFro
244
250
messageConfig .DisableWebPagePreview = m .DisableWebPagePreview
245
251
messageConfig .DisableNotification = m .DisableNotification
246
252
if m .Keyboard != nil {
247
- messageConfig .ReplyMarkup = m .Keyboard
253
+ messageConfig .ReplyMarkup = getTelegramInlineKeyboard ( m .Keyboard )
248
254
}
249
255
250
256
messageConfig .ParseMode = parseMode ()
@@ -327,6 +333,31 @@ func (r tgWebhookResponder) sendOverHttps(ctx context.Context, chattable tgbotap
327
333
return
328
334
}
329
335
336
+ func getTelegramInlineKeyboard (keyboard botkb.Keyboard ) * tgbotapi.InlineKeyboardMarkup {
337
+ switch kb := keyboard .(type ) {
338
+ case * tgbotapi.InlineKeyboardMarkup :
339
+ return kb
340
+ case * botkb.MessageKeyboard :
341
+ tgButtons := make ([][]tgbotapi.InlineKeyboardButton , len (kb .Buttons ))
342
+ for i , buttons := range kb .Buttons {
343
+ tgButtons [i ] = make ([]tgbotapi.InlineKeyboardButton , len (buttons ))
344
+ for j , button := range buttons {
345
+ switch btn := button .(type ) {
346
+ case botkb.DataButton :
347
+ tgButtons [i ][j ] = tgbotapi .NewInlineKeyboardButtonData (btn .Text , btn .Data )
348
+ case botkb.UrlButton :
349
+ tgButtons [i ][j ] = tgbotapi .NewInlineKeyboardButtonURL (btn .Text , btn .URL )
350
+ default :
351
+ panic (fmt .Sprintf ("Unknown button type at [%d][%d]: %T" , i , j , btn ))
352
+ }
353
+ }
354
+ }
355
+ return tgbotapi .NewInlineKeyboardMarkup (tgButtons ... )
356
+ default :
357
+ panic (fmt .Sprintf ("m.Keyboard has unsupported type %v" , kb .KeyboardType ()))
358
+ }
359
+ }
360
+
330
361
func GetTelegramBotAPIClient (ctx context.Context , botContext botsfw.BotContext ) * tgbotapi.BotAPI {
331
362
return tgbotapi .NewBotAPIWithClient (
332
363
botContext .BotSettings .Token ,
0 commit comments