Update to use nlopes-slack

This commit is contained in:
2019-11-21 17:45:04 -06:00
parent 8909975cce
commit 52e0fca780
9 changed files with 77 additions and 113 deletions

View File

@@ -14,8 +14,8 @@ import (
"time"
aoc "git.bullercodeworks.com/brian/go-adventofcode"
slack "git.bullercodeworks.com/brian/go-slack"
"git.bullercodeworks.com/brian/helperbot"
"github.com/nlopes/slack"
)
/* Plugin State */
@@ -76,11 +76,7 @@ func (s *AoCState) ProcessMessage(m helperbot.Message) {
case 'D':
admin, err := s.model.GetSlackAdminDMId()
if err != nil {
s.model.SendMessage(s.Name(), "error", slack.Message{
Type: "error",
Text: "Error getting Admin DM Id",
Time: time.Now(),
})
s.SendAdminIdError()
return
}
if slackMsg.Channel == admin {
@@ -129,11 +125,8 @@ func (s *AoCState) runLoop() {
}
time.Sleep(time.Minute)
}
s.model.SendMessage(s.Name(), "main", slack.Message{
Type: "status",
Text: "done",
Time: time.Now(),
})
s.model.SendMessage(s.Name(), "main", s.BuildMessage("status", "done", ""))
}
func (s *AoCState) ProcessDirectMessage(slackMsg slack.Message) {
@@ -183,30 +176,18 @@ func (s *AoCState) DoHelpCmd(slackMsg slack.Message) {
txt := fmt.Sprint(":christmas_tree: AoC Help :christmas_tree:\n",
"-- WiP --",
)
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: slackMsg.Channel,
Text: txt,
})
s.SendSlackMessage(txt, slackMsg.Channel)
}
func (s *AoCState) DoHelpAdminCmd(slackMsg slack.Message) {
txt := fmt.Sprint(":christmas_tree: AoC Help :christmas_tree:\n",
"-- WiP --",
)
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: slackMsg.Channel,
Text: txt,
})
s.SendSlackMessage(txt, slackMsg.Channel)
}
func (s *AoCState) DoPingCmd(slackMsg slack.Message) {
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: slackMsg.Channel,
Text: ":christmas_tree: PONG :christmas_tree:",
})
s.SendSlackMessage(":christmas_tree: PONG :christmas_tree:", slackMsg.Channel)
}
func (s *AoCState) DoSessionCmd(slackMsg slack.Message) {
@@ -215,39 +196,23 @@ func (s *AoCState) DoSessionCmd(slackMsg slack.Message) {
// Set the session cookie
admin, err := s.model.GetSlackAdminDMId()
if err != nil {
s.model.SendMessage(s.Name(), "error", slack.Message{
Type: "error",
Text: "Error getting Admin DM Id",
Time: time.Now(),
})
s.SendAdminIdError()
return
}
aocSession := msgPts[2]
s.setAoCSessionCookie(strings.TrimSpace(aocSession))
s.sessionCookie = aocSession
s.sessionNeedsUpdate = false
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: admin,
Text: ":christmas_tree: New Session: " + s.sessionCookie,
})
s.SendSlackMessage(":christmas_tree: New Session: "+s.sessionCookie, admin)
} else if len(msgPts) == 2 && msgPts[1] == "session" {
// Print the session cookie
admin, err := s.model.GetSlackAdminDMId()
if err != nil {
s.model.SendMessage(s.Name(), "error", slack.Message{
Type: "error",
Text: "Error getting Admin DM Id",
Time: time.Now(),
})
s.SendAdminIdError()
return
}
// We only send the session cookie to the admin
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: admin,
Text: ":christmas_tree: session: " + s.sessionCookie,
})
s.SendSlackMessage(":christmas_tree: session: "+s.sessionCookie, admin)
}
}
@@ -275,11 +240,7 @@ func (s *AoCState) DoTopCmd(slackMsg slack.Message) {
} else {
txt = s.DoTopForYear(yr)
}
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: slackMsg.Channel,
Text: txt,
})
s.SendSlackMessage(txt, slackMsg.Channel)
}
func (s *AoCState) DoTopForAll() (string, error) {
@@ -379,30 +340,18 @@ func (s *AoCState) AoCBoardCheckAndUpdate(yr int) {
if err != nil {
admin, adminErr := s.model.GetSlackAdminDMId()
if adminErr != nil {
s.model.SendMessage(s.Name(), "error", slack.Message{
Type: "error",
Text: "Error getting Admin DM Id",
Time: time.Now(),
})
s.SendAdminIdError()
return
}
if err.Error() == "Invalid Session Cookie" {
s.sessionNeedsUpdate = true
}
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: admin,
Text: fmt.Sprintf(":warning: AoC Error processing leaderboard (%d) - %s", yr, err.Error()),
})
s.SendSlackMessage(fmt.Sprintf(":warning: AoC Error processing leaderboard (%d) - %s", yr, err.Error()), admin)
return
}
msg := slack.Message{
Type: "success",
Text: fmt.Sprintf("Received leaderboard (%d)", yr),
Time: time.Now(),
}
s.model.SendMessage(s.Name(), "main", msg)
s.model.SendMessage(s.Name(), "main",
s.BuildMessage("success", fmt.Sprintf("Received leaderboard (%d)", yr), ""))
// Compare the new leaderboard to the saved one
for _, v := range l.Members {
mbr, err := s.getMember(l.Event, v.ID)
@@ -410,11 +359,7 @@ func (s *AoCState) AoCBoardCheckAndUpdate(yr int) {
continue
}
if mbr.Stars != v.Stars {
s.model.SendMessage(s.Name(), "slack", slack.Message{
Type: "message",
Channel: channelId,
Text: ":christmas_tree: " + v.Name + " now has " + strconv.Itoa(v.Stars) + " stars! :christmas_tree:",
})
s.SendSlackMessage(":christmas_tree: "+v.Name+" now has "+strconv.Itoa(v.Stars)+" stars! :christmas_tree:", channelId)
}
}
// Save the leaderboard to the db
@@ -499,11 +444,7 @@ func (s *AoCState) saveLeaderboard(l *aoc.Leaderboard) error {
}
for _, v := range l.Members {
if err = s.saveMember(l.Event, &v); err != nil {
s.model.SendMessage(s.Name(), "error", slack.Message{
Type: "error",
Text: fmt.Sprintf("Error Saving Member (%s)", v.Name),
Time: time.Now(),
})
s.model.SendMessage(s.Name(), "error", s.BuildMessage("error", fmt.Sprintf("Error Saving Member (%s)", v.Name), ""))
}
}
return nil
@@ -579,3 +520,19 @@ func (s *AoCState) getMember(event string, memberId string) (*aoc.Member, error)
mbr.GlobalScore, err = strconv.Atoi(wrk)
return mbr, nil
}
func (s *AoCState) SendAdminIdError() {
s.model.SendMessage(s.Name(), "error", s.BuildMessage("error", "Error getting Admin DM Id", ""))
}
func (s *AoCState) SendSlackMessage(text, dest string) {
s.model.SendMessage(s.Name(), "slack", s.BuildMessage("message", text, dest))
}
func (s *AoCState) BuildMessage(tp, text, ch string) slack.Message {
ret := slack.Message{}
ret.Type = tp
ret.Text = text
ret.Channel = ch
return ret
}