/
message.go
48 lines (40 loc) · 1.35 KB
/
message.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package tbcomctl
import (
"context"
tb "gopkg.in/tucnak/telebot.v2"
)
// Message is the controller that sends a message.
type Message struct {
commonCtl
opts []interface{}
}
var _ Controller = &Message{}
// NewMessage creates new Message Controller. One must pass Bot instance, name
// of the controller, text function that returns the desired message and
// optionally any sendOpts that will be supplied to telebot.Bot.Send.
func NewMessage(b Boter, name string, textfn TextFunc, sendOpts ...interface{}) *Message {
return &Message{
commonCtl: newCommonCtl(b, name, textfn),
opts: sendOpts,
}
}
// NewMessageText is a convenience wrapper for NewMessage with a fixed text.
func NewMessageText(b Boter, name, text string, sendOpts ...interface{}) *Message {
return NewMessage(b, name, TextFn(text), sendOpts...)
}
// Handler is the Message controller's message handler.
func (m *Message) Handler(msg *tb.Message) {
ctx := WithController(context.Background(), m)
txt, err := m.textFn(ctx, msg.Sender)
if err != nil {
lg.Printf("tbcomctl: message: text function error: %s: %s", Userinfo(msg.Sender), err)
return
}
outbound, err := m.sendOrEdit(msg, txt, m.opts...)
if err != nil {
lg.Printf("tbcomctl: message: send error: %s: %s", Userinfo(msg.Sender), err)
return
}
m.register(msg.Sender, outbound.ID)
m.unregister(msg.Sender, outbound.ID)
}