-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodule.go
More file actions
122 lines (102 loc) · 2.39 KB
/
module.go
File metadata and controls
122 lines (102 loc) · 2.39 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
package bot
import (
"bytes"
"errors"
"fmt"
"html/template"
"regexp"
)
type Module struct {
// Internal
bot *Bot
triggers []Trigger
// Properties
name string
version string
help string
// Options
active bool
acceptBotMessages bool
}
func NewModule(name string, version string) *Module {
return &Module{
name: name,
version: version,
help: `
{{.Module.Name}} Module [{{.Module.Version}}]
There is no help text
`,
active: true,
acceptBotMessages: false,
}
}
func (module *Module) AcceptBotMessages() {
module.acceptBotMessages = true
}
func (module *Module) AcceptsBotMessages() bool {
return module.acceptBotMessages
}
func (module *Module) SetBot(bot *Bot) {
module.bot = bot
}
func (module *Module) AddTrigger(regex string, handler TriggerFunc) {
trigger := Trigger{regex, func(message *Message) {
h := handler
h(message)
}}
module.triggers = append(module.triggers, trigger)
}
func (module *Module) HandleInput(message *Message) {
trigger, err := module.checkForTriggers(message)
if err == nil {
trigger.handler(message)
}
}
func (module *Module) checkForTriggers(message *Message) (*Trigger, error) {
for _, trigger := range module.triggers {
match, _ := regexp.MatchString(trigger.regex, message.Text)
if match {
return &trigger, nil
}
}
return &Trigger{}, errors.New("No match")
}
func (module *Module) Help() string {
// params := slack.PostMessageParameters{
// AsUser: true,
// }
t := template.Must(template.New("help").Parse(module.help))
var helpText bytes.Buffer
data := struct {
Module *Module
}{
Module: module,
}
if err := t.Execute(&helpText, data); err != nil {
return err.Error()
}
return helpText.String()
// channelID, timestamp, err := bot.slack.PostMessage(channelId, helpText, params)
// if err != nil {
// fmt.Printf("%s\n", err)
// return
// }
// fmt.Printf("Message successfully sent to channel %s at %s\n", channelID, timestamp)
}
func (module *Module) Status() bool {
return module.active
}
func (module *Module) Name() string {
return module.name
}
func (module *Module) Version() string {
return module.version
}
func (module *Module) SetVersion(version string) {
module.version = version
}
func (module *Module) Info() {
fmt.Println("Module Name: ", module.Name())
fmt.Println("Module Version: ", module.Version())
fmt.Println("Module Status: ", module.Status())
}