func checkUpdates(bot *irc.IRC, source string, context string) { var manga Manga var uri, message string var watched map[string]MangaEntry loadWatched(&manga) switch source { case "mangafox": uri = "http://mangafox.me/rss/latest_manga_chapters.xml" watched = manga.MangaFox case "mangastream": uri = "http://mangastream.com/rss" watched = manga.MangaStream } data, err := web.Get(&uri) if err != "" { logger.Error(err) return } var entries map[string]MangaEntry entries, perr := parseRSS(data, source) if perr != nil { logger.Error(perr.Error()) return } keys := getKeys(source) updates := make([]irc.RatedMessage, 0) var method string var newEntry MangaEntry for title, entry := range entries { for _, key := range keys { if strings.Index(title, key) > -1 { if entry.Date > watched[key].Date { // update found switch source { case "mangastream": message = fmt.Sprintf("%s is out! \\o/ ~ %s ~ %q", entry.Title, entry.Link, entry.Desc) newEntry = MangaEntry{ Manga: entry.Title[:len(key)], Title: entry.Title, Date: entry.Date, Desc: entry.Desc, Link: entry.Link, Announce: watched[key].Announce, } case "mangafox": message = fmt.Sprintf("%s is out! \\o/ ~ %s", entry.Title, entry.Link) newEntry = MangaEntry{ Manga: entry.Title[:len(key)], Title: entry.Title, Date: entry.Date, Link: entry.Link, Announce: watched[key].Announce, } } delete(watched, key) watched[key] = newEntry if context != "" && !lib.HasElementString(watched[key].Announce, context) { if context[0:1] == "#" { method = "say" } else { method = "notice" } updates = append(updates, irc.RatedMessage{ Method: method, Target: context, Message: message, }) } for _, target := range watched[key].Announce { if target[0:1] == "#" { method = "say" } else { method = "notice" } updates = append(updates, irc.RatedMessage{ Method: method, Target: target, Message: message, }) } } } } } if len(updates) > 0 { bot.Rated(&updates) saveWatched(&manga) } else if context != "" { bot.Say(context, "Nothing new. :\\") } }