""" Bot command to post the highscores """ 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.""" 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) # This function will be called when this extension is loaded. # It is necessary to add these functions to the bot. def setup(bot: commands.Bot): """Adds function to bot""" bot.add_cog(PostHighscores(bot))