mirror of
https://github.com/Xevion/contest-assistant.git
synced 2025-12-11 08:06:53 -06:00
Implemented 'leaderboard' command
This takes use of the previous commit's changes: the Submission.count column.
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
@@ -6,7 +7,7 @@ from discord.ext.commands import BucketType, Context, errors
|
|||||||
|
|
||||||
from bot import checks, constants
|
from bot import checks, constants
|
||||||
from bot.bot import ContestBot
|
from bot.bot import ContestBot
|
||||||
from bot.models import Guild, Period, PeriodStates
|
from bot.models import Guild, Period, PeriodStates, Submission
|
||||||
|
|
||||||
logger = logging.getLogger(__file__)
|
logger = logging.getLogger(__file__)
|
||||||
logger.setLevel(constants.LOGGING_LEVEL)
|
logger.setLevel(constants.LOGGING_LEVEL)
|
||||||
@@ -119,7 +120,6 @@ class ContestCommandsCog(commands.Cog):
|
|||||||
# TODO: Fetch all submissions related to this period and show a embed
|
# TODO: Fetch all submissions related to this period and show a embed
|
||||||
|
|
||||||
period.advance_state()
|
period.advance_state()
|
||||||
|
|
||||||
await channel.set_permissions(target_role, overwrite=overwrite)
|
await channel.set_permissions(target_role, overwrite=overwrite)
|
||||||
await ctx.send(response)
|
await ctx.send(response)
|
||||||
|
|
||||||
@@ -159,9 +159,38 @@ class ContestCommandsCog(commands.Cog):
|
|||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
async def leaderboard(self, ctx: Context, count: int = 10, page: int = 0) -> None:
|
async def leaderboard(self, ctx: Context, count: int = 10, page: int = 0) -> None:
|
||||||
"""Prints a leaderboard"""
|
"""Prints a leaderboard"""
|
||||||
# TODO: Implement leaderboard command
|
page = min(page, 0)
|
||||||
|
count = max(min(count, 1), 15)
|
||||||
|
|
||||||
# TODO: Make interactive and reaction-based
|
# TODO: Make interactive and reaction-based
|
||||||
pass
|
with self.bot.get_session() as session:
|
||||||
|
guild: Guild = session.query(Guild).get(ctx.guild.id)
|
||||||
|
if guild.current_period is not None:
|
||||||
|
board = session.query(Submission) \
|
||||||
|
.filter_by(period_id=guild.current_period_id) \
|
||||||
|
.order_by(Submission.count.desc()) \
|
||||||
|
.slice(page * count, (page + 1) * count) \
|
||||||
|
.all()
|
||||||
|
|
||||||
|
description = ''
|
||||||
|
for i, submission in enumerate(board, start=1):
|
||||||
|
message = self.bot.get_message(guild.submission_channel, submission.id)
|
||||||
|
|
||||||
|
emote = ''
|
||||||
|
if i == 1: emote = ':trophy: '
|
||||||
|
elif i == 2: emote = ':second_place: '
|
||||||
|
elif i == 3: emote = ':third_place: '
|
||||||
|
|
||||||
|
description += f'`{str(i).zfill(2)}` {emote}<@{submission.user}> [Jump]({message.jump_url})\n'
|
||||||
|
|
||||||
|
embed = discord.Embed(colour=discord.Colour(0x4a90e2),
|
||||||
|
description=description,
|
||||||
|
timestamp=datetime.datetime.utcnow())
|
||||||
|
embed.set_footer(text='Contest is still in progress...' if guild.current_period.active else 'Contest has finished.')
|
||||||
|
embed.set_author(name="Leaderboard")
|
||||||
|
|
||||||
|
# embed.add_field(name="🤔", value="some of these properties have certain limits...", inline=True)
|
||||||
|
await ctx.send(embed=embed)
|
||||||
|
|
||||||
|
|
||||||
def setup(bot) -> None:
|
def setup(bot) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user