aoc2021/aocrr_bot.py

73 lines
2.1 KiB
Python
Executable File

#!/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.tu-ilmenau.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()