package main import ( "log" "time" ) func WaitUntilNextUpdate() { 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 contains(rss *Rss, a Item) bool { if rss == nil { return false } for _, x := range rss.Channel.Items { if x.Title == a.Title { return true } } return false } func main() { var oldRss *Rss for { rss, err := FetchStackerNewsRssFeed() if err != nil { log.Println(err) WaitUntilNextUpdate() continue } for _, item := range rss.Channel.Items { // TODO: We ignore errors during sending items to telegram. // This means these items will be missed since they will be skipped in the next run if contains(oldRss, item) { continue } err := SendItemToTelegram(&item) if err != nil { log.Println(err) continue } } oldRss = rss WaitUntilNextUpdate() } }