65 lines
2.8 KiB
Python
65 lines
2.8 KiB
Python
"""
|
|
Commands for managing/displaying the highscores messages.
|
|
"""
|
|
|
|
from nextcord.ext import commands
|
|
import nextcord
|
|
|
|
from cogs.submission.submission_views import SubmissionCreateButton # pylint: disable=import-error
|
|
from highscores import highscores_data # pylint: disable=import-error
|
|
from utilities.utils import send_highscore_message # pylint: disable=import-error
|
|
|
|
|
|
class PostHighscores(commands.Cog, name="Post Highscores"):
|
|
"""
|
|
Posts Highscores messages. Either creates new messages for each table if one doesn't exist
|
|
or edits the existing message.
|
|
"""
|
|
|
|
def __init__(self, bot: commands.Bot) -> None:
|
|
"""
|
|
Default constructor for PostHighscores class
|
|
|
|
Args:
|
|
bot (commands.Bot): Bot object. Required to register submission button view.
|
|
"""
|
|
self.bot = bot
|
|
|
|
@nextcord.slash_command(
|
|
description="Triggers post/update of highscores to registered highscore channel.",
|
|
default_member_permissions=nextcord.Permissions(administrator=True),
|
|
)
|
|
async def post_highscore_tables(self, interaction: nextcord.Interaction) -> None:
|
|
"""
|
|
A command which posts the highscore in the registered channel.
|
|
Sends warning if no channel has been registered.
|
|
"""
|
|
guild = highscores_data.get_guild(interaction.guild_id)
|
|
print(f"Printing out highscores information in channel {guild.highscore_channel}")
|
|
channel = interaction.guild.get_channel(guild.highscore_channel)
|
|
|
|
# Error checking for registered highscore channel
|
|
error_response = "Registered Highscores channel does not exist or was never registered. "
|
|
error_response += 'Use "/register" to register channels.'
|
|
assert channel is not None, await interaction.response(error_response, ephemeral=True)
|
|
|
|
# Error checking for tables existing
|
|
# TODO fill out response string once functionality created.
|
|
error_response = "No tables have been created for this guild. Please create some tables."
|
|
assert (
|
|
len(highscores_data.get_guild(interaction.guild_id).tables) > 0
|
|
), await interaction.response(error_response, ephemeral=True)
|
|
|
|
# awaiting response because posting scores takes a while
|
|
await interaction.response.defer(ephemeral=True)
|
|
|
|
for table in highscores_data.get_guild(interaction.guild_id).tables:
|
|
message: nextcord.Message = await send_highscore_message(channel, guild, table)
|
|
await message.edit(view=SubmissionCreateButton(self.bot))
|
|
|
|
# have to save data here in case message id was changed. rather save here after all
|
|
# messages have been sent.
|
|
highscores_data.save_guild_data(guild)
|
|
|
|
await interaction.followup.send(f"Posted all tables to <#{channel.id}>.", ephemeral=True)
|