Skip to content

Commit c54fe23

Browse files
committed
feat: support for Location message and some refactoring
1 parent d05ba26 commit c54fe23

29 files changed

+232
-185
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ go 1.24.3
1010

1111
require (
1212
github.com/bots-go-framework/bots-api-telegram v0.14.0
13-
github.com/bots-go-framework/bots-fw v0.70.0
13+
github.com/bots-go-framework/bots-fw v0.70.2
1414
github.com/bots-go-framework/bots-fw-store v0.10.0
1515
github.com/bots-go-framework/bots-fw-telegram-models v0.3.26
1616
github.com/bots-go-framework/bots-go-core v0.2.1

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ github.com/bots-go-framework/bots-api-telegram v0.14.0 h1:t4/Jvf+N+nU/LqG3GebIcS
44
github.com/bots-go-framework/bots-api-telegram v0.14.0/go.mod h1:/HcUOCL75qOKP2l2mk+o0FSfp86r6Zto5L/voN8rvPo=
55
github.com/bots-go-framework/bots-fw v0.70.0 h1:QM32CYH6Jwu/AqbqyQELqwoAfDe2oeQQkzJECiCfLXQ=
66
github.com/bots-go-framework/bots-fw v0.70.0/go.mod h1:T6EyFubSt3ZJbIosiL8b11YE4PGqTWGu47TPLSGTT2U=
7+
github.com/bots-go-framework/bots-fw v0.70.2 h1:kwEVGN5Cichl77e+WK+4HBdvg3cRXRbJIaLx/zU2lwU=
8+
github.com/bots-go-framework/bots-fw v0.70.2/go.mod h1:T6EyFubSt3ZJbIosiL8b11YE4PGqTWGu47TPLSGTT2U=
79
github.com/bots-go-framework/bots-fw-store v0.10.0 h1:e6bD274mjrHVp+X05/7uqqT3s5xZOqV9divKTaM2W+w=
810
github.com/bots-go-framework/bots-fw-store v0.10.0/go.mod h1:7oU4B8j5HuJZM8AftosbyQD+AqckXsDv8eU1auGPzn8=
911
github.com/bots-go-framework/bots-fw-telegram-models v0.3.26 h1:J6mdMcrouCB0yjzDMFhVJxnB2epnnltC+iyTtISL27c=

telegram/get_message_uid.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ func GetMessageUID(whc botsfw.WebhookContext) (*ChatMessageUID, error) {
2020
if tgChatID, err = strconv.ParseInt(chatID, 10, 64); err != nil {
2121
return nil, err
2222
}
23-
messageID := whc.Input().(TgWebhookCallbackQuery).GetMessage().MessageIntID()
23+
messageID := whc.Input().(callbackQueryInput).GetMessage().MessageIntID()
2424
return NewChatMessageUID(tgChatID, messageID), nil
2525
}

telegram/webhook_input.go renamed to telegram/input.go

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,51 @@ import (
99
"time"
1010
)
1111

12-
var _ botinput.InputMessage = (*tgWebhookInput)(nil)
12+
var _ botinput.InputMessage = (*tgInput)(nil)
1313

14-
type tgWebhookInput struct {
14+
type tgInput struct {
1515
update *tgbotapi.Update
1616
logRequest func()
1717
}
1818

19-
func (whi tgWebhookInput) BotChatID() (string, error) {
19+
func (whi tgInput) BotChatID() (string, error) {
2020
tgChat := whi.update.Chat()
2121
if tgChat == nil {
2222
return "", nil
2323
}
2424
return strconv.FormatInt(tgChat.ID, 10), nil
2525
}
2626

27-
func (whi tgWebhookInput) InputType() botinput.Type {
27+
func (whi tgInput) InputType() botinput.Type {
28+
29+
getMessageType := func(m *tgbotapi.Message, defaultType botinput.Type) botinput.Type {
30+
switch {
31+
case m.Location != nil:
32+
return botinput.TypeLocation
33+
case m.SuccessfulPayment != nil:
34+
return botinput.TypeSuccessfulPayment
35+
36+
case m.RefundedPayment != nil:
37+
return botinput.TypeRefundedPayment
38+
default:
39+
return botinput.TypeText
40+
}
41+
}
42+
2843
switch {
2944
case whi.update.InlineQuery != nil:
3045
return botinput.TypeInlineQuery
3146

3247
case whi.update.CallbackQuery != nil:
3348
return botinput.TypeCallbackQuery
3449

50+
case whi.update.Message != nil:
51+
return getMessageType(whi.update.Message, botinput.TypeText)
52+
53+
case whi.update.EditedMessage != nil:
54+
// This should be after any whi.update.Message.* checks
55+
return getMessageType(whi.update.EditedMessage, botinput.TypeEditText)
56+
3557
case whi.update.ChosenInlineResult != nil:
3658
return botinput.TypeChosenInlineResult
3759

@@ -41,16 +63,6 @@ func (whi tgWebhookInput) InputType() botinput.Type {
4163
case whi.update.PreCheckoutQuery != nil:
4264
return botinput.TypePreCheckoutQuery
4365

44-
case whi.update.Message.SuccessfulPayment != nil:
45-
return botinput.TypeSuccessfulPayment
46-
47-
case whi.update.Message.RefundedPayment != nil:
48-
return botinput.TypeRefundedPayment
49-
50-
case whi.update.Message != nil || whi.update.EditedMessage != nil:
51-
// This should be after any whi.update.Message.* checks
52-
return botinput.TypeText
53-
5466
default:
5567
return botinput.TypeUnknown
5668
}
@@ -61,35 +73,35 @@ type TgWebhookInput interface {
6173
TgUpdate() *tgbotapi.Update
6274
}
6375

64-
func (whi tgWebhookInput) LogRequest() {
76+
func (whi tgInput) LogRequest() {
6577
if whi.logRequest != nil {
6678
whi.logRequest()
6779
}
6880
}
6981

70-
var _ TgWebhookInput = (*tgWebhookInput)(nil)
82+
var _ TgWebhookInput = (*tgInput)(nil)
7183

7284
// tgWebhookUpdateProvider indicates that input can provide original Telegram update struct
7385
type tgWebhookUpdateProvider interface {
7486
TgUpdate() *tgbotapi.Update
7587
}
7688

77-
func (whi tgWebhookInput) TgUpdate() *tgbotapi.Update {
89+
func (whi tgInput) TgUpdate() *tgbotapi.Update {
7890
return whi.update
7991
}
8092

8193
var _ botinput.InputMessage = (*tgWebhookTextMessage)(nil)
8294
var _ botinput.InputMessage = (*tgWebhookContactMessage)(nil)
8395
var _ botinput.InputMessage = (*TgWebhookInlineQuery)(nil)
8496
var _ botinput.InputMessage = (*tgWebhookChosenInlineResult)(nil)
85-
var _ botinput.InputMessage = (*TgWebhookCallbackQuery)(nil)
97+
var _ botinput.InputMessage = (*callbackQueryInput)(nil)
8698
var _ botinput.InputMessage = (*tgWebhookNewChatMembersMessage)(nil)
8799

88-
func (whi tgWebhookInput) GetID() interface{} {
100+
func (whi tgInput) GetID() interface{} {
89101
return whi.update.UpdateID
90102
}
91103

92-
func message2input(input tgWebhookInput, tgMessageType TgMessageType, tgMessage *tgbotapi.Message) botinput.InputMessage {
104+
func message2input(input tgInput, tgMessageType MessageType, tgMessage *tgbotapi.Message) botinput.InputMessage {
93105
switch {
94106
case tgMessage.Text != "":
95107
return newTgWebhookTextMessage(input, tgMessageType, tgMessage)
@@ -109,14 +121,16 @@ func message2input(input tgWebhookInput, tgMessageType TgMessageType, tgMessage
109121
return newTgWebhookStickerMessage(input, tgMessageType, tgMessage)
110122
case tgMessage.UsersShared != nil:
111123
return newTgWebhookUsersSharedMessage(input, tgMessageType, tgMessage)
124+
case tgMessage.Location != nil:
125+
return newLocationMessage(input, tgMessage)
112126
default:
113127
return nil
114128
}
115129
}
116130

117131
// NewTelegramWebhookInput maps telegram update struct to bots framework interface
118132
func NewTelegramWebhookInput(update *tgbotapi.Update, logRequest func()) (botinput.InputMessage, error) {
119-
input := tgWebhookInput{update: update, logRequest: logRequest}
133+
input := tgInput{update: update, logRequest: logRequest}
120134

121135
switch inputType := input.InputType(); inputType {
122136
case botinput.TypeInlineQuery:
@@ -131,13 +145,15 @@ func NewTelegramWebhookInput(update *tgbotapi.Update, logRequest func()) (botinp
131145
return newTgWebhookSuccessfulPayment(input), nil
132146
case botinput.TypeRefundedPayment:
133147
return newTgWebhookRefundedPayment(input), nil
148+
case botinput.TypeLocation:
149+
return newLocationMessage(input, update.Message), nil
134150
case botinput.TypeText:
135151
switch {
136152
case update.Message != nil:
137-
return message2input(input, TgMessageTypeRegular, update.Message), nil
153+
return message2input(input, MessageTypeRegular, update.Message), nil
138154

139155
case update.EditedMessage != nil:
140-
return message2input(input, TgMessageTypeEdited, update.EditedMessage), nil
156+
return message2input(input, MessageTypeEdited, update.EditedMessage), nil
141157

142158
}
143159
case botinput.TypeNotImplemented:
@@ -164,7 +180,7 @@ func NewTelegramWebhookInput(update *tgbotapi.Update, logRequest func()) (botinp
164180
return nil, botsfw.ErrNotImplemented
165181
}
166182

167-
func (whi tgWebhookInput) GetSender() botinput.User {
183+
func (whi tgInput) GetSender() botinput.User {
168184
switch {
169185
case whi.update.Message != nil:
170186
return tgWebhookUser{tgUser: whi.update.Message.From}
@@ -193,11 +209,11 @@ func (whi tgWebhookInput) GetSender() botinput.User {
193209
}
194210
}
195211

196-
func (whi tgWebhookInput) GetRecipient() botinput.Recipient {
212+
func (whi tgInput) GetRecipient() botinput.Recipient {
197213
panic("Not implemented")
198214
}
199215

200-
func (whi tgWebhookInput) GetTime() time.Time {
216+
func (whi tgInput) GetTime() time.Time {
201217
if whi.update.Message != nil {
202218
return whi.update.Message.Time()
203219
}
@@ -207,7 +223,7 @@ func (whi tgWebhookInput) GetTime() time.Time {
207223
return time.Time{}
208224
}
209225

210-
func (whi tgWebhookInput) MessageIntID() int {
226+
func (whi tgInput) MessageIntID() int {
211227
switch {
212228
case whi.update.CallbackQuery != nil:
213229
return whi.update.CallbackQuery.Message.MessageID
@@ -223,15 +239,15 @@ func (whi tgWebhookInput) MessageIntID() int {
223239
return 0
224240
}
225241

226-
func (whi tgWebhookInput) MessageStringID() string {
242+
func (whi tgInput) MessageStringID() string {
227243
messageID := whi.MessageIntID()
228244
if messageID == 0 {
229245
return ""
230246
}
231247
return strconv.Itoa(messageID)
232248
}
233249

234-
func (whi tgWebhookInput) TelegramChatID() int64 {
250+
func (whi tgInput) TelegramChatID() int64 {
235251
if whi.update.Message != nil {
236252
return whi.update.Message.Chat.ID
237253
}
@@ -241,18 +257,18 @@ func (whi tgWebhookInput) TelegramChatID() int64 {
241257
panic("Can't get Telegram chat ID from `update.Message` or `update.EditedMessage`.")
242258
}
243259

244-
func (whi tgWebhookInput) Chat() botinput.Chat {
260+
func (whi tgInput) Chat() botinput.Chat {
245261
update := whi.update
246262
if update.Message != nil {
247-
return TgWebhookChat{
263+
return TgChat{
248264
chat: update.Message.Chat,
249265
}
250266
} else if update.EditedMessage != nil {
251-
return TgWebhookChat{
267+
return TgChat{
252268
chat: update.EditedMessage.Chat,
253269
}
254270
} else if callbackQuery := update.CallbackQuery; callbackQuery != nil && callbackQuery.Message != nil {
255-
return TgWebhookChat{
271+
return TgChat{
256272
chat: callbackQuery.Message.Chat,
257273
}
258274
}

telegram/webhook_callbackquery.go renamed to telegram/input_callback_query.go

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,74 +6,76 @@ import (
66
"strconv"
77
)
88

9+
type WebhookCallbackQuery interface {
10+
botinput.CallbackQuery
11+
GetInlineMessageID() string // Telegram only?
12+
GetChatInstanceID() string // Telegram only?
13+
}
14+
915
var (
10-
_ TgWebhookInput = (*TgWebhookCallbackQuery)(nil)
11-
_ botinput.InputMessage = (*TgWebhookCallbackQuery)(nil)
12-
_ botinput.CallbackQuery = (*TgWebhookCallbackQuery)(nil)
13-
_ WebhookCallbackQuery = (*TgWebhookCallbackQuery)(nil)
16+
_ TgWebhookInput = (*callbackQueryInput)(nil)
17+
_ botinput.InputMessage = (*callbackQueryInput)(nil)
18+
_ botinput.CallbackQuery = (*callbackQueryInput)(nil)
19+
_ WebhookCallbackQuery = (*callbackQueryInput)(nil)
1420
)
1521

16-
// TgWebhookCallbackQuery is wrapper on callback query
17-
type TgWebhookCallbackQuery struct { // TODO: make non-exportable
18-
tgWebhookInput
22+
// callbackQueryInput is wrapper on callback query
23+
type callbackQueryInput struct { // TODO: make non-exportable
24+
tgInput
1925
//callbackQuery *tgbotapi.CallbackQuery
2026
//message botsfw.WebhookMessage
2127
}
2228

23-
func (whi TgWebhookCallbackQuery) MessageIntID() int {
24-
return whi.update.CallbackQuery.Message.MessageID
25-
}
26-
27-
func (whi TgWebhookCallbackQuery) GetChatInstanceID() string {
29+
func (whi callbackQueryInput) GetChatInstanceID() string {
2830
return whi.update.CallbackQuery.ChatInstance
2931
}
3032

31-
func newTelegramWebhookCallbackQuery(input tgWebhookInput) TgWebhookCallbackQuery {
33+
func newTelegramWebhookCallbackQuery(input tgInput) callbackQueryInput {
3234
if input.update.CallbackQuery == nil {
3335
panic("update.CallbackQuery == nil")
3436
}
35-
return TgWebhookCallbackQuery{
36-
tgWebhookInput: input,
37+
return callbackQueryInput{
38+
tgInput: input,
3739
}
3840
}
3941

4042
// GetID returns update ID
41-
func (whi TgWebhookCallbackQuery) GetID() string {
43+
func (whi callbackQueryInput) GetID() string {
4244
return whi.update.CallbackQuery.ID
4345
}
4446

4547
// Sequence returns update ID
46-
func (whi TgWebhookCallbackQuery) Sequence() int {
48+
func (whi callbackQueryInput) Sequence() int {
4749
return whi.update.UpdateID
4850
}
4951

5052
// GetMessage returns message
51-
func (whi TgWebhookCallbackQuery) GetMessage() botinput.Message {
52-
return newTelegramWebhookMessage(whi.tgWebhookInput, whi.update.CallbackQuery.Message)
53+
func (whi callbackQueryInput) GetMessage() botinput.Message {
54+
return newTelegramWebhookMessage(whi.tgInput, whi.update.CallbackQuery.Message)
5355
}
5456

5557
// TelegramCallbackMessage returns message
56-
func (whi TgWebhookCallbackQuery) TelegramCallbackMessage() *tgbotapi.Message {
58+
func (whi callbackQueryInput) TelegramCallbackMessage() *tgbotapi.Message {
5759
return whi.update.CallbackQuery.Message
5860
}
5961

6062
// GetFrom returns sender
61-
func (whi TgWebhookCallbackQuery) GetFrom() botinput.Sender {
63+
func (whi callbackQueryInput) GetFrom() botinput.Sender {
6264
return tgWebhookUser{tgUser: whi.update.CallbackQuery.From}
6365
}
6466

6567
// GetData returns callback query data
66-
func (whi TgWebhookCallbackQuery) GetData() string {
68+
func (whi callbackQueryInput) GetData() string {
6769
return whi.update.CallbackQuery.Data
6870
}
6971

7072
// GetInlineMessageID returns callback query inline message ID
71-
func (whi TgWebhookCallbackQuery) GetInlineMessageID() string {
73+
func (whi callbackQueryInput) GetInlineMessageID() string {
7274
return whi.update.CallbackQuery.InlineMessageID
7375
}
7476

7577
// BotChatID returns bot chat ID
76-
func (whi TgWebhookCallbackQuery) BotChatID() (string, error) {
78+
func (whi callbackQueryInput) BotChatID() (string, error) {
7779
if cbq := whi.update.CallbackQuery; cbq.Message != nil && cbq.Message.Chat != nil {
7880
return strconv.FormatInt(cbq.Message.Chat.ID, 10), nil
7981
}
@@ -82,7 +84,7 @@ func (whi TgWebhookCallbackQuery) BotChatID() (string, error) {
8284

8385
// EditMessageOnCallbackQuery creates edit message
8486
func EditMessageOnCallbackQuery(whcbq botinput.CallbackQuery, parseMode, text string) *tgbotapi.EditMessageTextConfig {
85-
twhcbq := whcbq.(TgWebhookCallbackQuery)
87+
twhcbq := whcbq.(callbackQueryInput)
8688
callbackQuery := twhcbq.update.CallbackQuery
8789

8890
emc := tgbotapi.EditMessageTextConfig{

telegram/webhook_chat_left_members.go renamed to telegram/input_chat_left_members.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
)
66

77
type tgWebhookLeftChatMembersMessage struct {
8-
tgWebhookMessage
8+
tgInputMessage
99
}
1010

1111
func (*tgWebhookLeftChatMembersMessage) InputType() botinput.Type {
@@ -14,8 +14,8 @@ func (*tgWebhookLeftChatMembersMessage) InputType() botinput.Type {
1414

1515
var _ botinput.LeftChatMembersMessage = (*tgWebhookLeftChatMembersMessage)(nil)
1616

17-
func newTgWebhookLeftChatMembersMessage(input tgWebhookInput) tgWebhookNewChatMembersMessage {
18-
return tgWebhookNewChatMembersMessage{tgWebhookMessage: newTelegramWebhookMessage(input, input.update.Message)}
17+
func newTgWebhookLeftChatMembersMessage(input tgInput) tgWebhookNewChatMembersMessage {
18+
return tgWebhookNewChatMembersMessage{tgInputMessage: newTelegramWebhookMessage(input, input.update.Message)}
1919
}
2020

2121
func (m *tgWebhookLeftChatMembersMessage) LeftChatMembers() []botinput.Actor {

telegram/webhook_chat_new_members.go renamed to telegram/input_chat_new_members.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ var (
1111
)
1212

1313
type tgWebhookNewChatMembersMessage struct {
14-
tgWebhookMessage
14+
tgInputMessage
1515
}
1616

17-
func newTgWebhookNewChatMembersMessage(input tgWebhookInput) tgWebhookNewChatMembersMessage {
18-
return tgWebhookNewChatMembersMessage{tgWebhookMessage: newTelegramWebhookMessage(input, input.update.Message)}
17+
func newTgWebhookNewChatMembersMessage(input tgInput) tgWebhookNewChatMembersMessage {
18+
return tgWebhookNewChatMembersMessage{tgInputMessage: newTelegramWebhookMessage(input, input.update.Message)}
1919
}
2020

2121
func (m tgWebhookNewChatMembersMessage) NewChatMembers() []botinput.Actor {

0 commit comments

Comments
 (0)