Several Fixes/Improvements
* Fix issue with parsing AOC leaderboard JSON * Add aoc-util for different things * go mod * Makefile
This commit is contained in:
@@ -114,6 +114,21 @@ func (s *AoCState) NewAoC() error {
|
||||
}
|
||||
|
||||
func (s *AoCState) runLoop() {
|
||||
_, err := s.getChannelId()
|
||||
// This plugin fails without a channel id
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// Don't do anything until we've done an initial update of all earlier years
|
||||
for _, yr := range s.GetListOfAoCYears() {
|
||||
if yr == s.GetLatestYear() {
|
||||
continue
|
||||
}
|
||||
if !s.sessionNeedsUpdate {
|
||||
fmt.Printf("Startup: Checking if board needs update (%d)\n", yr)
|
||||
s.AoCSilentBoardCheckAndUpdate(yr)
|
||||
}
|
||||
}
|
||||
for {
|
||||
_, err := s.getChannelId()
|
||||
// This plugin fails without a channel id
|
||||
@@ -342,6 +357,29 @@ func (s *AoCState) GetAoCBoard(yr int) (*aoc.Leaderboard, error) {
|
||||
return s.aoc.GetLeaderboard(yr)
|
||||
}
|
||||
|
||||
func (s *AoCState) AoCSilentBoardCheckAndUpdate(yr int) {
|
||||
if s.AoCBoardNeedsUpdate(yr) {
|
||||
l, err := s.aoc.GetLeaderboard(yr)
|
||||
if err != nil {
|
||||
admin, adminErr := s.model.GetSlackAdminDMId()
|
||||
if adminErr != nil {
|
||||
s.SendAdminIdError()
|
||||
return
|
||||
}
|
||||
if err.Error() == "Invalid Session Cookie" {
|
||||
s.sessionNeedsUpdate = true
|
||||
}
|
||||
s.SendSlackMessage(fmt.Sprintf(":warning: AoC Error processing leaderboard (%d) - %s", yr, err.Error()), admin)
|
||||
return
|
||||
}
|
||||
|
||||
s.model.SendMessage(s.Name(), "main",
|
||||
s.BuildMessage("success", fmt.Sprintf("Received leaderboard (%d)", yr), ""))
|
||||
// Save the leaderboard to the db
|
||||
s.saveLeaderboard(l)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *AoCState) AoCBoardCheckAndUpdate(yr int) {
|
||||
channelId, _ := s.getChannelId()
|
||||
if s.AoCBoardNeedsUpdate(yr) {
|
||||
@@ -372,10 +410,19 @@ func (s *AoCState) AoCBoardCheckAndUpdate(yr int) {
|
||||
if v.Stars > 1 {
|
||||
plural = "stars"
|
||||
}
|
||||
mbrAll := s.getMemberAllYears(v.ID)
|
||||
var totalStars int
|
||||
for _, v := range mbrAll {
|
||||
totalStars += v.Stars
|
||||
}
|
||||
allYearsText := ""
|
||||
if totalStars > 0 {
|
||||
allYearsText = fmt.Sprintf(" (%d for all years)", totalStars)
|
||||
}
|
||||
if yr == s.GetLatestYear() {
|
||||
s.SendSlackMessage(fmt.Sprintf(":christmas_tree: %s now has %d %s! :christmas_tree:", v.Name, v.Stars, plural), channelId)
|
||||
s.SendSlackMessage(fmt.Sprintf(":christmas_tree: %s now has %d %s! :christmas_tree:%s", v.Name, v.Stars, plural, allYearsText), channelId)
|
||||
} else {
|
||||
s.SendSlackMessage(fmt.Sprintf(":christmas_tree: %s now has %d %s! (%d) :christmas_tree:", v.Name, v.Stars, plural, yr), channelId)
|
||||
s.SendSlackMessage(fmt.Sprintf(":christmas_tree: %s now has %d %s! (%d) :christmas_tree:%s", v.Name, v.Stars, plural, yr, allYearsText), channelId)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -404,13 +451,10 @@ func (s *AoCState) AoCBoardNeedsUpdate(yr int) bool {
|
||||
|
||||
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
|
||||
@@ -439,6 +483,17 @@ func (s *AoCState) RequestChannelId() {
|
||||
s.setChannelId(strings.TrimSpace(chn))
|
||||
}
|
||||
|
||||
// Returns true if we have all AoC years saved to the DB
|
||||
func (s *AoCState) haveAllYearsCached() bool {
|
||||
for _, yr := range s.GetListOfAoCYears() {
|
||||
_, err := s.aoc.GetCachedLeaderboard(yr)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
/* DB Functions */
|
||||
func (s *AoCState) setAoCBoardId(brdId string) error {
|
||||
return s.model.SetString([]string{"aoc", "config", "board_id"}, brdId)
|
||||
@@ -510,6 +565,18 @@ func (s *AoCState) saveMember(event string, m *aoc.Member) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *AoCState) getMemberAllYears(memberId string) map[string]*aoc.Member {
|
||||
ret := make(map[string]*aoc.Member)
|
||||
for _, yr := range s.GetListOfAoCYears() {
|
||||
stYr := strconv.Itoa(yr)
|
||||
m, err := s.getMember(stYr, memberId)
|
||||
if err == nil {
|
||||
ret[stYr] = m
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (s *AoCState) getMember(event string, memberId string) (*aoc.Member, error) {
|
||||
var err error
|
||||
var wrk string
|
||||
|
Reference in New Issue
Block a user