-
Notifications
You must be signed in to change notification settings - Fork 2
/
slack.go
83 lines (64 loc) · 1.66 KB
/
slack.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
74
75
76
77
78
79
80
81
82
83
package main
import (
"log"
"os"
"fmt"
"strings"
"sync/atomic"
"github.com/nlopes/slack"
)
func statusMsg(api *slack.Client, channel string) {
channels := []string{channel}
params := slack.FileUploadParameters{
Title: "Status Gethinx",
Filetype: "txt",
Content: GetStatusTable(),
Channels: channels,
}
_, err := api.UploadFile(params)
if err != nil {
fmt.Printf("%s\n", err)
return
}
}
func StartSlackBot() {
api := slack.New(conf.Slack.Token)
logger := log.New(os.Stdout, "slack-bot: ", log.Lshortfile|log.LstdFlags)
slack.SetLogger(logger)
api.SetDebug(false)
rtm := api.NewRTM()
go rtm.ManageConnection()
for msg := range rtm.IncomingEvents {
switch ev := msg.Data.(type) {
case *slack.ConnectedEvent:
log.Println("Message: ", ev)
case *slack.MessageEvent:
log.Println("Message: ", ev)
user, err := api.GetUserInfo(ev.Msg.User)
if err != nil {
log.Println("Error get user name ", err)
}
if user != nil {
if user.IsBot == false {
message := ev.Msg.Text
//TODO: add reload and update commands
//rtm.SendMessage(rtm.NewOutgoingMessage("@"+user.Name+" "+ev.Msg.Text, ev.Msg.Channel))
if strings.Contains(message, "status") {
statusMsg(api, ev.Msg.Channel)
}
if strings.Contains(message, "last") {
msg := fmt.Sprintf("@ %s last block is %d", user.Name, atomic.LoadInt64(&LastBlock.Dig))
rtm.SendMessage(rtm.NewOutgoingMessage(msg, ev.Msg.Channel))
}
}
}
case *slack.RTMError:
log.Println("Error:", ev.Error())
case *slack.InvalidAuthEvent:
log.Println("Invalid credentials")
return
default:
//log.Println("Unexpected: ", msg.Data)
}
}
}