/
reporter.go
109 lines (101 loc) · 2.94 KB
/
reporter.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
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
package main
import (
"log"
"time"
"github.com/bwmarrin/discordgo"
"github.com/johansundell/cocapi"
)
var queryInsertUpdateMember = `INSERT INTO members (tag, name, created, last_updated, active) VALUES (?, ?, null, null, 1) ON DUPLICATE KEY UPDATE member_id=LAST_INSERT_ID(member_id), last_updated = NOW(), active = 1`
var myChannel string
var isCocUnderUpdate bool
var failedTries int
var emailTo, emailFrom string
func reporter(s *discordgo.Session) {
ticker := time.NewTicker(1 * time.Minute)
quit := make(chan struct{})
go func() {
for {
select {
case <-ticker.C:
checkMembers(s)
case <-quit:
ticker.Stop()
return
}
}
}()
}
func checkMembers(s *discordgo.Session) {
members, err := cocClient.GetMembers(myClanTag)
if err != nil {
reportError(s, err)
return
}
if isCocUnderUpdate {
isCocUnderUpdate = false
sendMessage(s, "@everyone Clash of Clans servers are up again", true)
}
failedTries = 0
for _, m := range members.Items {
if result, err := db.Exec(queryInsertUpdateMember, m.Tag, m.Name); err != nil {
log.Println(err)
} else {
if id, err := result.LastInsertId(); err != nil {
log.Println(err)
} else {
donations := 0
if err := db.QueryRow("SELECT current_donations FROM members WHERE member_id = ?", id).Scan(&donations); err != nil {
log.Println(err)
} /*else {
//log.Println(m.Donations, donations)
if m.Donations != donations {
if _, err := db.Exec("UPDATE members SET prev_donations = ?, current_donations = ?, last_donation_time = NOW() WHERE member_id = ?", donations, m.Donations, id); err != nil {
log.Println(err)
}
if m.Donations > donations {
if _, err := db.Exec("INSERT donations (member_id, ts, current_donations, prev_donations) VALUES (?, NOW(), ?, ?)", id, m.Donations, donations); err != nil {
log.Println(err)
}
}
}
}*/
}
}
/*
if m.Role == "member" && m.Donations >= 1000 {
log.Println("Found member that should be upgraded", m.Name)
var alerted int
db.QueryRow("SELECT alerted_discord FROM members WHERE tag = ?", m.Tag).Scan(&alerted)
if alerted == 0 {
//sendEmail("Member "+m.Name+" should be upgraded", "Member "+m.Name+" should be upgraded")
sendMessage(s, "<@&303853476776116224> Member "+m.Name+" should be upgraded", true)
db.Exec("UPDATE members SET alerted_discord = 1 WHERE tag = ?", m.Tag)
}
}
*/
}
}
func sendMessage(s *discordgo.Session, message string, pin bool) {
m, _ := s.ChannelMessageSend(myChannel, message)
if pin {
s.ChannelMessagePin(myChannel, m.ID)
}
}
func reportError(s *discordgo.Session, err error) {
switch t := err.(type) {
case *cocapi.ServerError:
if t.ErrorCode == 503 {
failedTries++
if failedTries > 3 {
if !isCocUnderUpdate {
isCocUnderUpdate = true
sendMessage(s, "@everyone Clash of Clans servers are down", true)
}
}
}
break
default:
log.Println("Fatal error coc:", t)
break
}
}