44 lines
816 B
Go
44 lines
816 B
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
func WaitUntilNextHour() {
|
|
now := time.Now()
|
|
dur := now.Truncate(time.Hour).Add(time.Hour).Sub(now)
|
|
log.Println("sleeping for", dur.Round(time.Second))
|
|
time.Sleep(dur)
|
|
}
|
|
|
|
func main() {
|
|
for {
|
|
|
|
stories, err := FetchHackerNewsTopStories()
|
|
if err != nil {
|
|
SendErrorToDiscord(err)
|
|
WaitUntilNextHour()
|
|
continue
|
|
}
|
|
|
|
filtered := CurateContentForStackerNews(&stories)
|
|
|
|
for _, story := range *filtered {
|
|
_, err := PostStoryToStackerNews(&story, PostStoryOptions{SkipDupes: false})
|
|
if err != nil {
|
|
var dupesErr *DupesError
|
|
if errors.As(err, &dupesErr) {
|
|
SendDupesErrorToDiscord(story.ID, dupesErr)
|
|
continue
|
|
}
|
|
SendErrorToDiscord(err)
|
|
continue
|
|
}
|
|
log.Println("Posting to SN ... OK")
|
|
}
|
|
WaitUntilNextHour()
|
|
}
|
|
}
|