start aocrr-bot

This commit is contained in:
Stefan Harmuth 2021-12-05 16:04:45 +01:00
parent bf0b19a1b9
commit 5ae5bb4dfa

72
aocrr_bot.py Normal file
View File

@ -0,0 +1,72 @@
#!/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()