options: implement CallbackEndpoint for Btn

pull/300/head
Demian 4 years ago
parent f5f0b4b696
commit d02458be27

@ -81,9 +81,22 @@ func TestBotHandle(t *testing.T) {
b.Handle("/start", func(m *Message) {})
assert.Contains(t, b.handlers, "/start")
btn := &InlineButton{Unique: "test"}
b.Handle(btn, func(c *Callback) {})
assert.Contains(t, b.handlers, btn.CallbackUnique())
reply := ReplyButton{Text: "reply"}
b.Handle(&reply, func(m *Message) {})
inline := InlineButton{Unique: "inline"}
b.Handle(&inline, func(c *Callback) {})
btnReply := (&ReplyMarkup{}).Text("btnReply")
b.Handle(&btnReply, func(m *Message) {})
btnInline := (&ReplyMarkup{}).Data("", "btnInline")
b.Handle(&btnInline, func(c *Callback) {})
assert.Contains(t, b.handlers, btnReply.CallbackUnique())
assert.Contains(t, b.handlers, btnInline.CallbackUnique())
assert.Contains(t, b.handlers, reply.CallbackUnique())
assert.Contains(t, b.handlers, inline.CallbackUnique())
assert.Panics(t, func() { b.Handle(1, func() {}) })
}
@ -359,16 +372,20 @@ func TestBot(t *testing.T) {
t.Run("EditReplyMarkup()", func(t *testing.T) {
markup := &ReplyMarkup{
InlineKeyboard: [][]InlineButton{{{
Data: "btn",
Text: "Hi Telebot!",
}}},
InlineKeyboard: [][]InlineButton{
{{
Data: "btn",
Text: "Hi Telebot!",
}},
},
}
badMarkup := &ReplyMarkup{
InlineKeyboard: [][]InlineButton{{{
Data: strings.Repeat("*", 65),
Text: "Bad Button",
}}},
InlineKeyboard: [][]InlineButton{
{{
Data: strings.Repeat("*", 65),
Text: "Bad Button",
}},
},
}
msg, err := b.EditReplyMarkup(msg, markup)

@ -86,8 +86,7 @@ func (t *InlineButton) With(data string) *InlineButton {
InlineQuery: t.InlineQuery,
InlineQueryChat: t.InlineQueryChat,
Login: t.Login,
Data: data,
Data: data,
}
}
@ -101,6 +100,14 @@ func (t *ReplyButton) CallbackUnique() string {
return t.Text
}
// CallbackUnique implements CallbackEndpoint.
func (t *Btn) CallbackUnique() string {
if t.Unique != "" {
return "\f" + t.Unique
}
return t.Text
}
// Login represents a parameter of the inline keyboard button
// used to automatically authorize a user. Serves as a great replacement
// for the Telegram Login Widget when the user is coming from Telegram.
@ -111,7 +118,7 @@ type Login struct {
WriteAccess bool `json:"request_write_access,omitempty"`
}
// MarshalJSON implements Marshaler interface.
// MarshalJSON implements json.Marshaler interface.
// It needed to avoid InlineQueryChat and Login fields conflict.
// If you have Login field in your button, InlineQueryChat must be skipped.
func (t *InlineButton) MarshalJSON() ([]byte, error) {

Loading…
Cancel
Save