diff options
Diffstat (limited to 'minecrafttrivia/utils.py')
-rw-r--r-- | minecrafttrivia/utils.py | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/minecrafttrivia/utils.py b/minecrafttrivia/utils.py index de80da0..8bb4730 100644 --- a/minecrafttrivia/utils.py +++ b/minecrafttrivia/utils.py @@ -6,11 +6,22 @@ from . import constants async def get_participants(reactions: typing.List[discord.Reaction]) -> typing.List[discord.User]: - for r in reactions: - if r.emoji == constants.POSITIVE_REACTION: - users = [] - async for u in r.users(): - if not u.bot: - users.append(u) - return users - return [] + for r in reactions: + if r.emoji == constants.POSITIVE_REACTION: + users = [] + async for u in r.users(): + if not u.bot: + users.append(u) + return users + return [] + + +def format_leaderboard(points: typing.List[typing.Tuple[int, typing.Tuple[typing.Union[discord.User, int], int]]]) -> str: + return "\n".join(f"**{rank + 1}.** {user.mention if hasattr(user, 'mention') else '<@' + str(user) + '>'} - {points}" for rank, (user, points) in points) + + +_T = typing.TypeVar("_T", discord.User, int) + + +def create_leaderboard(points: typing.Dict[_T, int]) -> typing.List[typing.Tuple[int, typing.Tuple[_T, int]]]: + return list(enumerate(reversed(sorted(points.items(), key=lambda x: x[1])))) |