-
Notifications
You must be signed in to change notification settings - Fork 374
/
handler.go
73 lines (58 loc) · 1.17 KB
/
handler.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package bot
import (
"berty.tech/core/api/p2p"
"berty.tech/core/entity"
)
//
// Handler
//
type Handler interface {
Handle(*Bot, *Event) error
}
func (b *Bot) AddHandler(h Handler) {
b.handlers = append(b.handlers, h)
}
//
// HandlerFunc
//
type HandlerFunc func(*Bot, *Event) error
type handlerFuncHandler struct {
f HandlerFunc
}
func (h handlerFuncHandler) Handle(bot *Bot, event *Event) error {
return h.f(bot, event)
}
func (b *Bot) AddHandlerFunc(f HandlerFunc) {
b.handlers = append(b.handlers, handlerFuncHandler{f: f})
}
//
// Trigger
//
type Trigger struct {
If func(*Bot, *Event) bool
Then HandlerFunc
}
func (t Trigger) Handle(bot *Bot, event *Event) error {
if t.If(bot, event) {
return t.Then(bot, event)
}
return nil
}
//
// MessageHandler
//
type MessageHandlerFunc func(*Bot, *Event, *entity.Message) error
func (b *Bot) AddMessageHandlerFunc(f MessageHandlerFunc) {
b.AddHandler(Trigger{
If: func(b *Bot, e *Event) bool {
return e.Kind == p2p.Kind_ConversationNewMessage
},
Then: func(b *Bot, e *Event) error {
nm, err := e.GetConversationNewMessageAttrs()
if err != nil {
return err
}
return f(b, e, nm.Message)
},
})
}