From de2b1c17611a4d98c737f71be8a63111b39a60b6 Mon Sep 17 00:00:00 2001 From: Alek Ratzloff Date: Mon, 30 May 2022 17:33:37 -0700 Subject: [PATCH] Add !wordbot leaderboard command Signed-off-by: Alek Ratzloff --- plugins/wordbot.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/plugins/wordbot.py b/plugins/wordbot.py index 249ba1f..cf1fa14 100644 --- a/plugins/wordbot.py +++ b/plugins/wordbot.py @@ -243,10 +243,33 @@ class Wordbot(Plugin): ): parts = line.strip().split() match parts: - case ["!wordbot", "end_now"]: - async with self.__db_lock: - self.end_round(conn, channel) - self.start_round(channel, allow_early_end=True) + # case ["!wordbot", "end_now"]: + # async with self.__db_lock: + # self.end_round(conn, channel) + # self.start_round(channel, allow_early_end=True) + case ["!wordbot", "leaderboard", *args]: + if args: + user = args[0] + else: + user = who.nick + + leaderboard = sorted( + self.db.leaderboard(channel).items(), key=lambda value: -value[1] + ) + # Only print out the top 5 + for rank, (nick, score) in enumerate(leaderboard[:5]): + self.send_to(conn, channel, f"{rank + 1}. {nick}. {score}") + + # If the user isn't in the top 5, get their rank + leaderboard_users = [user for user, _ in leaderboard] + if user not in leaderboard_users[:5] and user in leaderboard_users: + rankings = { + nick: (rank, score) + for rank, (nick, score) in enumerate(leaderboard) + } + rank, score = rankings[user] + self.send_to(conn, channel, "...") + self.send_to(conn, channel, f"{rank + 1}. {user}. {score}") case _: pass @@ -256,7 +279,6 @@ class Wordbot(Plugin): words = [word.strip() for word in fp] random.shuffle(words) words = words[: self.words_per_round] - log.debug("%s", words) self.db.start_round(channel, self.duration, words, allow_early_end) def end_round(self, conn: IrcProtocol, channel: str): @@ -271,8 +293,6 @@ class Wordbot(Plugin): ) ) } - log.debug("%r", rankings) - log.debug("%r", scores) self.send_to(conn, channel, "Game over. Here were the scores:") for user, score in scores: self.send_to(conn, channel, f"{rankings[score] + 1}. {user}. {score}")