"""Contained commands and views for refresh commands.""" import os from pathlib import Path import nextcord from nextcord.ext import commands from utils import MESSAGES_DIR, edit_clan_council_info, update_clan_messages class RefreshCog(commands.Cog, name="Refresh Commands"): """Class holds refresh commands.""" def __init__(self, bot: commands.Bot) -> None: """Default constructor for RefreshCog class. Does nothing.""" super().__init__() self.bot: commands.Bot = bot @nextcord.slash_command(default_member_permissions=nextcord.Permissions(administrator=True)) async def refresh(self, interaction: nextcord.Interaction) -> None: """Parent slash command for refresh. Never called.""" @refresh.subcommand(description="Force refresh all of the bot managed messages.") async def messages( self, interaction: nextcord.Interaction, channel: nextcord.TextChannel = nextcord.SlashOption( description="Channel to refresh messages in.", required=False, ), ) -> None: """ Updates all messages. Calls update_clan_messages() to update all messages. Args: interaction (nextcord.Interaction): Interaction with the command. channel (nextcord.TextChannel): channel to refresh messages in. """ await interaction.response.defer(ephemeral=True) if channel is None: channel_updates = [ dir_name for dir_name in os.listdir(MESSAGES_DIR) if Path(f"{MESSAGES_DIR}/{dir_name}").is_dir() ] else: channel_updates = [channel.name] await update_clan_messages(interaction.guild, channel_updates) await interaction.followup.send("Messages have been refreshed.", ephemeral=True) @refresh.subcommand(description="Updates the current council info message.") async def council_info(self, interaction: nextcord.Interaction) -> None: """ Edits the clan council info message. Calls edit_clan_council_info(). Args: interaction (nextcord.Interaction): Interaction with the command. """ await edit_clan_council_info(interaction.guild, self.bot.config) await interaction.response.send_message("Clan Council Info message updated.", ephemeral=True)