AoC & Stats are working, I believe

This commit is contained in:
2019-11-22 12:37:15 -06:00
parent 52e0fca780
commit 86c0efaff7
7 changed files with 306 additions and 29 deletions

View File

@@ -25,7 +25,8 @@ type AoCState struct {
sessionCookie string
sessionNeedsUpdate bool
aoc *aoc.AoC
aoc *aoc.AoC
lastYear int
}
var State AoCState
@@ -71,7 +72,7 @@ func (s *AoCState) ProcessMessage(m helperbot.Message) {
return
}
switch slackMsg.Channel[0] {
case 'C':
case 'C', 'G':
s.ProcessChannelMessage(slackMsg)
case 'D':
admin, err := s.model.GetSlackAdminDMId()
@@ -88,6 +89,8 @@ func (s *AoCState) ProcessMessage(m helperbot.Message) {
}
}
func (s *AoCState) ProcessRTMEvent(msg slack.RTMEvent) {}
func (s *AoCState) Run() {
go s.runLoop()
}
@@ -113,12 +116,18 @@ func (s *AoCState) NewAoC() error {
func (s *AoCState) runLoop() {
for {
_, err := s.getChannelId()
// This plugin fails without a channel id
if err != nil {
// This plugin fails without a channel id
return
}
for _, yr := range s.GetListOfAoCYears() {
if !s.sessionNeedsUpdate {
if s.GetLatestYear() != s.lastYear {
// Latest year changed. Grab that board first.
s.lastYear = s.GetLatestYear()
s.AoCBoardCheckAndUpdate(s.lastYear)
time.Sleep(time.Minute)
}
s.AoCBoardCheckAndUpdate(yr)
time.Sleep(time.Minute)
}
@@ -385,6 +394,20 @@ func (s *AoCState) AoCBoardNeedsUpdate(yr int) bool {
return time.Since(l.LastFetch) > freshDt
}
func (s *AoCState) AoCBoardIsNew(yr int) bool {
l, err := s.aoc.GetCachedLeaderboard(yr)
fmt.Println("Checking if board is new")
if err != nil || l == nil {
if err.Error() == "Invalid Year" {
return false
}
fmt.Println("YUP!")
return true
}
return false
}
func (s *AoCState) RequestBoardId() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Advent of Code Board ID: ")

View File

@@ -0,0 +1,89 @@
package main
import (
"C"
)
import (
"strings"
"time"
"git.bullercodeworks.com/brian/helperbot"
"github.com/nlopes/slack"
)
type StatsState struct {
model helperbot.Model
lag time.Duration
}
var State StatsState
/* Plugin Interface Functions */
func (s *StatsState) Name() string { return "slack-stats" }
func (s *StatsState) Initialize(m helperbot.Model) error {
s.model = m
return nil
}
func (s *StatsState) ProcessMessage(m helperbot.Message) {
if m.GetSource() == "slack" {
slackMsg := m.GetMessage()
if len(slackMsg.Channel) == 0 {
return
}
admin, err := s.model.GetSlackAdminDMId()
if err != nil {
s.SendAdminIdError()
return
}
if slackMsg.Channel == admin {
s.ProcessAdminDirectMessage(slackMsg)
}
}
}
func (s *StatsState) ProcessRTMEvent(msg slack.RTMEvent) {
switch ev := msg.Data.(type) {
case *slack.LatencyReport:
s.lag = ev.Value
}
}
func (s *StatsState) Run() {}
func (s *StatsState) Exit() {}
/* Other Functions */
func (s *StatsState) ProcessAdminDirectMessage(slackMsg slack.Message) {
msgPts := strings.Fields(slackMsg.Text)
if len(msgPts) < 2 || msgPts[0] != "!stats" {
return
}
switch msgPts[1] {
case "lag", "latency":
s.DoLatencyCommand(slackMsg)
}
}
func (s *StatsState) DoLatencyCommand(slackMsg slack.Message) {
if s.lag == 0 {
s.SendSlackMessage("Unknown", slackMsg.Channel)
return
}
s.SendSlackMessage(s.lag.String(), slackMsg.Channel)
}
func (s *StatsState) SendSlackMessage(text, dest string) {
s.model.SendMessage(s.Name(), "slack", s.BuildMessage("message", text, dest))
}
func (s *StatsState) SendAdminIdError() {
s.model.SendMessage(s.Name(), "error", s.BuildMessage("error", "Error getting Admin DM Id", ""))
}
func (s *StatsState) BuildMessage(tp, text, ch string) slack.Message {
ret := slack.Message{}
ret.Type = tp
ret.Text = text
ret.Channel = ch
return ret
}