diff --git a/aocbot.go b/aocbot.go index 95287d2..80b9faf 100644 --- a/aocbot.go +++ b/aocbot.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "gogs.bullercodeworks.com/brian/boltease" + "github.com/br0xen/boltease" ) const programName = "aocbot" @@ -33,8 +33,12 @@ func main() { if db, err = getDatabase(); err != nil { panic(err) } + // AoC Channel slackChannel = "C0G3X1M5K" + // br0xen DM + //slackChannel = "D0D793N5R" + // DevICT Leaderboard: 3549 boardID = os.Args[2] @@ -58,37 +62,36 @@ func aocBotMain(slack *Slack) { lastAoCUpdate = time.Now() var leaderboard *Leaderboard fmt.Println(lastAoCUpdate.Format(time.RFC3339) + ": Fetching Online Leaderboard") - if leaderboard, err = getAoCLeaderboard(boardID); err != nil { - fmt.Println(err.Error()) - } - - for _, v := range leaderboard.Members { - var mbr *Member - if mbr, err = getAoCUser(v.ID); err != nil { - // Member doesn't exist in db, add it - // Notify br0xen ( U030RD9NU ) - m := new(Message) - m.Type = "message" - m.Channel = "D0D793N5R" - m.Text = "AoC Leaderboard has a new member! " + v.Name - fmt.Println("New Leaderboard Member Found: " + v.Name) - if err = slack.postMessage(*m); err != nil { - fmt.Println(err.Error()) + leaderboard, err = getAoCLeaderboard(boardID) + if err == nil { + for _, v := range leaderboard.Members { + var mbr *Member + if mbr, err = getAoCUser(v.ID); err != nil { + // Member doesn't exist in db, add it + // Notify br0xen ( U030RD9NU ) + m := new(Message) + m.Type = "message" + m.Channel = "D0D793N5R" + m.Text = "AoC Leaderboard has a new member! " + v.Name + fmt.Println("New Leaderboard Member Found: " + v.Name) + if err = slack.postMessage(*m); err != nil { + fmt.Println(err.Error()) + } + saveAoCUser(&v) + continue } - saveAoCUser(&v) - continue - } - if mbr.Stars != v.Stars { - // Number of stars has changed - fmt.Println(v.ID + "(" + v.Name + "): " + v.LastStarTs.Format(time.RFC3339)) - m := new(Message) - m.Type = "message" - m.Channel = slackChannel - m.Text = ":christmas_tree: " + v.Name + " now has " + strconv.Itoa(v.Stars) + " stars! :christmas_tree:" - if err = slack.postMessage(*m); err != nil { - fmt.Println(err.Error()) + if mbr.Stars != v.Stars { + // Number of stars has changed + fmt.Println(v.ID + "(" + v.Name + "): " + v.LastStarTs.Format(time.RFC3339)) + m := new(Message) + m.Type = "message" + m.Channel = slackChannel + m.Text = ":christmas_tree: " + v.Name + " now has " + strconv.Itoa(v.Stars) + " stars! :christmas_tree:" + if err = slack.postMessage(*m); err != nil { + fmt.Println(err.Error()) + } + saveAoCUser(&v) } - saveAoCUser(&v) } } time.Sleep(time.Minute * 10) @@ -126,7 +129,6 @@ func processMessage(slack *Slack, m *Message) { } } - // TODO: Process the message if m.Channel != "" { // Check if we know what the channel is chnl, err := getChannelInfo(m.Channel) @@ -257,6 +259,7 @@ func getAoCLeaderboard(boardId string) (*Leaderboard, error) { resp, err = client.Do(req) if err != nil { fmt.Println("Error getting leaderboard") + return leaderboard, err } defer resp.Body.Close() body, err = ioutil.ReadAll(resp.Body) @@ -265,6 +268,10 @@ func getAoCLeaderboard(boardId string) (*Leaderboard, error) { return leaderboard, err } err = json.Unmarshal(body, &leaderboard) + if err != nil { + fmt.Println("Error on json unmarshal") + return leaderboard, err + } for k, mbr := range leaderboard.Members { mbr.LastStarTs, err = time.Parse("2006-01-02T15:04:05-0700", mbr.RawStarTs) leaderboard.Members[k] = mbr diff --git a/model.go b/model.go index bf4bd2f..3936812 100644 --- a/model.go +++ b/model.go @@ -4,7 +4,7 @@ import ( "strings" "time" - "gogs.bullercodeworks.com/brian/boltease" + "github.com/br0xen/boltease" ) func getDatabase() (*boltease.DB, error) { @@ -226,3 +226,11 @@ func getAoCUserByName(nm string) (*Member, error) { } return nil, err } + +func getUserSlackIDFromAoCName(nm string) (string, error) { + m, err := getAoCUserByName(nm) + if err != nil { + return "", err + } + return m.SlackID, nil +} diff --git a/slack_structs.go b/slack_structs.go index bb1f154..9b98e5b 100644 --- a/slack_structs.go +++ b/slack_structs.go @@ -12,7 +12,27 @@ type Message struct { Name string `json:"name"` Text string `json:"text"` Ts string `json:"ts"` - Time time.Time + + Time time.Time +} + +type Attachment struct { + Fallback string `json:"fallback"` + Color string `json:"color"` + Pretext string `json:"pretext"` + AuthorName string `json:"author_name"` + AuthorLink string `json:"author_link"` + AuthorIcon string `json:"author_icon"` + Title string `json:"title"` + TitleLink string `json:"title_link"` + Text string `json:"text"` + //Fields []AttachmentFields `json:"fields"` + ImageUrl string `json:"image_url"` + ThumbUrl string `json:"thumb_url"` + Footer string `json:"footer"` + FooterIcon string `json:"footer_icon"` + RawTS int `json:"ts"` + TS time.Time } // Channel object