-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
66 lines (53 loc) · 1.32 KB
/
main.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
package main
import (
"log"
"./errorapi"
"./utils"
"./vkapi"
)
// обработка исключений
func _check(err error, die ...bool) {
if err != nil {
if len(die) == 1 {
log.Fatalln(err)
} else {
log.Println("Некритичная ошибка:", err)
}
}
}
func main() {
log.Println(":: Запускаю бота...")
var vk vkapi.VK
cfg := parseConfig("./config.json")
vk.Init(cfg.Token, cfg.GroupID)
var PSys Plugins
PSys.Load(cfg.Plugins)
pushConfigs(&PSys, cfg.PlugConfigs)
var ErrorHandler errorapi.ErrorHandler
ErrorHandler.Init(&vk, cfg.ErrorDictionary)
helpmsg := PSys.Help()
for {
Handle(&vk, &PSys, &ErrorHandler, helpmsg)
}
}
// Handle крутится в бесконечном цикле и получает новые сообщения
func Handle(vk *vkapi.VK, p *Plugins, e *errorapi.ErrorHandler, helpmsg string) {
upd := vk.ListenLongPoll()
for _, v := range upd.Updates {
if v.Type == "message_new" {
cmd := utils.ExtractCmd(string(v.Object.GetStringBytes("text")))
sym, found := p.Sym(cmd)
if found {
sym.Data.VK = vk
sym.Data.Data = v.Object
go func() {
err := sym.Launch()
e.Handle(&sym.Data, &err)
}()
}
if cmd == "хелп" || cmd == "помощь" {
vk.Method.SendMessage(helpmsg, v.Object.GetInt64("peer_id"))
}
}
}
}