#!/usr/bin/env python3.9 import json import requests import sys from daemon import Daemon from datetime import datetime, timedelta from datafiles import JSONFile from irc import Client from schedule import Scheduler from time import sleep IRC_SERVER = "irc.uni-erlangen.de" IRC_PORT = 6667 IRC_CHANNEL = "#hinterzimmer" IRC_NICK = "aocrr-bot" IRC_USER = "aocrr-bot" IRC_REALNAME = "#aocrr Leaderboard Announcer" def fetch_leaderboard(session_id: str, year: int = datetime.now().year) -> dict: return json.loads( requests.get( "https://adventofcode.com/%d/leaderboard/private/view/711147.json" % year, cookies={'session': session_id} ).content ) class IrcBot(Daemon): def __init__(self): super().__init__() self.cache = JSONFile("aocrr_bot.cache", create=True) self.irc_client = Client(IRC_SERVER, IRC_PORT, IRC_NICK, IRC_USER, IRC_REALNAME) self.irc_client.join(IRC_CHANNEL) self.irc_client.register('PRIVMSG', self.on_privmsg) self.scheduler = Scheduler() self.scheduler.schedule('irc-receive', timedelta(seconds=10), self.irc_client.receive) def on_privmsg(self, msg_from: str, msg_to: str, message: str): if msg_to != IRC_CHANNEL: return if message.startswith("!today"): pass elif message.startswith("!test"): self.irc_client.privmsg(IRC_CHANNEL, "What I've read: " + " ".join(message.split()[1:])) elif message.startswith("!quit") and msg_from.startswith("stha!"): self.irc_client.privmsg(IRC_CHANNEL, "Oh, ok ... bye :'(") self.irc_client.quit() self.stop() def run(self): while 1: self.scheduler.run_pending() sleep(1) def main(): ircbot = IrcBot() if sys.argv[1] == 'start': ircbot.start() elif sys.argv[1] == "stop": ircbot.stop() elif sys.argv[1] == "restart": ircbot.restart() else: print("unknown command '%s'. Must be one of 'start', 'stop', 'restart'" % sys.argv[1]) if __name__ == '__main__': main()