diff --git a/aocrr_bot.py b/aocrr_bot.py index a2e42ec..c3d9376 100644 --- a/aocrr_bot.py +++ b/aocrr_bot.py @@ -9,11 +9,11 @@ from tools.datafiles import JSONFile from tools.irc import IrcBot, ServerMessage from tools.tools import human_readable_time_from_delta -IRC_SERVER = "irc.eu.libera.chat" -# IRC_SERVER = "irc.tu-ilmenau.de" +# IRC_SERVER = "irc.eu.libera.chat" +IRC_SERVER = "irc.tu-ilmenau.de" IRC_PORT = 6667 -IRC_CHANNEL = "#aocrr" -# IRC_CHANNEL = "#hinterzimmer" +# IRC_CHANNEL = "#aocrr" +IRC_CHANNEL = "#hinterzimmer" IRC_NICK = "aocrr-bot" IRC_USER = "aocrr-bot" IRC_REALNAME = "#aocrr Leaderboard Announcer" @@ -40,32 +40,42 @@ def command_info(msg_from: str, message: str): def command_today(msg_from: str, message: str): - today = str(datetime.now().day) - day_start = datetime.today().replace(hour=6, minute=0, second=0) + if not message: + day = str(datetime.now().day) + else: + day = message.split(" ")[0] + try: + if not (1 <= int(day) <= 25): + ircbot.privmsg(IRC_CHANNEL, "Invalid day: " + day) + return + except ValueError: + ircbot.privmsg(IRC_CHANNEL, "Invalid day: " + day) + return + day_start = datetime.today().replace(hour=6, minute=0, second=0, day=int(day)) today_list = [] for member, member_data in cache.items(): - if not member.startswith("__") and 'days' in member_data and today in member_data['days']: + if not member.startswith("__") and 'days' in member_data and day in member_data['days']: today_list.append(member) ircbot.privmsg( IRC_CHANNEL, - "Todays leaderboard (last updated: %s):" % cache['__last_update__'] + "Day %s's leaderboard (last updated: %s):" % (day, cache['__last_update__']) ) - for i, member in enumerate(sorted(today_list, key=lambda x: cache[x]['days'][today]['score'], reverse=True)): + for i, member in enumerate(sorted(today_list, key=lambda x: cache[x]['days'][day]['score'], reverse=True)): if i > 3: sleep(1) # don't flood - if "1" in cache[member]['days'][today]: + if "1" in cache[member]['days'][day ]: p1_time = "in " + human_readable_time_from_delta( - datetime.fromisoformat(cache[member]['days'][today]['1']) - day_start + datetime.fromisoformat(cache[member]['days'][day]['1']) - day_start ) else: p1_time = "not yet solved" - if "2" in cache[member]['days'][today]: + if "2" in cache[member]['days'][day ]: p2_time = "in " + human_readable_time_from_delta( - datetime.fromisoformat(cache[member]['days'][today]['2']) - day_start + datetime.fromisoformat(cache[member]['days'][day]['2']) - day_start ) else: p2_time = "not yet solved" @@ -77,7 +87,7 @@ def command_today(msg_from: str, message: str): i + 1, cache[member]['name'], cache[member]['score'], - cache[member]['days'][today]['score'], + cache[member]['days'][day ]['score'], p1_time, p2_time ) @@ -184,6 +194,7 @@ ircbot.schedule('update_leaderboard', timedelta(minutes=15), update_leaderboard) ircbot.on(ServerMessage.RAW, on_raw) ircbot.register_channel_command("!info", IRC_CHANNEL, command_info) ircbot.register_channel_command("!today", IRC_CHANNEL, command_today) +ircbot.register_channel_command("!day", IRC_CHANNEL, command_today) ircbot.register_privmsg_command("info", command_info) ircbot.register_privmsg_command("quit", command_quit) ircbot.run()