nunbot/nun.go
Steve 5926c09585
All checks were successful
continuous-integration/drone/push Build is passing
reddit api worse then others, use longer wait and try again
2022-07-18 11:20:29 -04:00

67 lines
1.3 KiB
Go

package main
import (
"fmt"
"log"
"time"
"maunium.net/go/mautrix"
)
type nunWatch struct {
fail int
curPost post
stop chan bool
client *mautrix.Client
}
func newNunWatch(stop chan bool, c *mautrix.Client) *nunWatch {
return &nunWatch{0, post{}, stop, c}
}
func (n *nunWatch) Main() {
ticker := time.NewTicker(30 * time.Second)
for {
select {
case <-n.stop:
return
case <-ticker.C:
if n.fail > 5 {
log.Fatal("fail count too high; ending loop")
return
}
if n.fail > 3 {
log.Println("over three failures, increasing tick time to 5 minutes")
ticker.Reset(5 * time.Minute)
continue
}
newPost, err := getNewestPost("LittleNuns")
if err != nil {
log.Printf("error getting newest post: %v", err)
log.Println("skipping this cycle, incrementing fail count")
n.fail++
continue
}
if n.fail != 0 {
n.fail = 0
ticker.Reset(30 * time.Second)
}
if n.curPost.Title != newPost.Title {
n.curPost = newPost
roomResp, err := n.client.JoinedRooms()
if err != nil {
log.Printf("error getting joined rooms: %v", err)
continue
}
rooms := roomResp.JoinedRooms
for _, room := range rooms {
n.client.SendText(room, fmt.Sprintf("%v\n%v", n.curPost.Title, n.curPost.Link))
}
}
}
}
}