AoC & Stats are working, I believe
This commit is contained in:
@@ -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: ")
|
||||
|
89
plugins_src/plugin_stats.go
Normal file
89
plugins_src/plugin_stats.go
Normal 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
|
||||
}
|
Reference in New Issue
Block a user