-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathhandler.go
More file actions
123 lines (86 loc) · 2.94 KB
/
handler.go
File metadata and controls
123 lines (86 loc) · 2.94 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package telepher
import (
"github.com/goTelegramBot/telepher/types"
"sort"
"regexp"
)
type Handler struct {
Type string
Trigger *regexp.Regexp
function interface{}
HandlerOptions *HandlerOptions
}
type Commands struct{
Command string
function func(Bot,*types.Message)
HandlerOptions *HandlerOptions
}
type messageHandler struct {
function interface{}
HandlerOptions *HandlerOptions
}
type HandlerOptions struct {
GroupID int
filters func(message *types.Message) bool
}
func (telepher *Bot) On(Type string, handler interface{},handlerOptions *HandlerOptions){
if handlerOptions != nil{
telepher.Handlers[handlerOptions.GroupID] = append(telepher.Handlers[handlerOptions.GroupID], Handler{Type:Type,function: handler,HandlerOptions:handlerOptions})
}else{
telepher.Handlers[DefaultHandlerGroup] = append(telepher.Handlers[DefaultHandlerGroup])
}
}
func (telepher Bot) handle(Type string, msg *types.Message) {
var groupIDs []int
for i := range telepher.Handlers {
groupIDs = append(groupIDs,i)
}
sort.Ints(groupIDs)
for _,groupID := range groupIDs {
for _, handler := range telepher.Handlers[groupID]{
if handler.Type == Type {
if handler.HandlerOptions.filters != nil{
if handler.HandlerOptions.filters(msg){
handler.function.(func (Bot, *types.Message))(telepher,msg)}
}else{
handler.function.(func (Bot, *types.Message))(telepher,msg)
}
}
}}
}
func (telepher Bot) Command(trigger string,commandHandler func(Bot,*types.Message)){
telepher.Commands[trigger] = append(telepher.Commands[trigger], Commands{function:commandHandler})
}
func (telepher Bot) CommandHandler(trigger string, msg *types.Message){
for _, command := range telepher.Commands[trigger] {
command.function(telepher,msg)
return
}
}
func (telepher Bot) Hears(trigger string, handler interface{},handlerOptions *HandlerOptions){
rx := regexp.MustCompile(trigger)
if handlerOptions != nil{
telepher.Handlers[handlerOptions.GroupID] = append(telepher.Handlers[handlerOptions.GroupID], Handler{Trigger:rx,function: handler,HandlerOptions:handlerOptions})
}else{
telepher.Handlers[DefaultHandlerGroup] = append(telepher.Handlers[DefaultHandlerGroup])
}
}
func (telepher Bot) handleMessage(msg *types.Message) {
var groupIDs []int
for i := range telepher.Handlers {
groupIDs = append(groupIDs,i)
}
sort.Ints(groupIDs)
for _,groupID := range groupIDs {
for _, handler := range telepher.Handlers[groupID]{
if handler.Trigger != nil{
if handler.Trigger.MatchString(msg.Text) {
if handler.HandlerOptions.filters != nil{
if handler.HandlerOptions.filters(msg){
handler.function.(func (Bot, *types.Message))(telepher,msg)}
}else{
handler.function.(func (Bot, *types.Message))(telepher,msg)
}
}}
}}
}