"""Contains commands and views for settings commands.""" import nextcord from nextcord.ext import commands from DakinySettings import settings from utils import GUILDS class SettingsCog(commands.Cog, name="Settings Commands"): """Class holds settings commands.""" def __init__(self) -> None: """Default constructor for SettingsCog class. Does nothing.""" @nextcord.slash_command(guild_ids=GUILDS, default_member_permissions=nextcord.Permissions(administrator=True)) async def settings(self, interaction: nextcord.Interaction) -> None: """Parent slash command for settings. Never called.""" @settings.subcommand() async def channel_ids(self, interaction: nextcord.Interaction) -> None: """Subcommand parent. Never called.""" @channel_ids.subcommand(description="Sets channel that bot sends verification requests to admins.") async def admin( self, interaction: nextcord.Interaction, channel: nextcord.TextChannel = nextcord.SlashOption( required=False, description="Channel to set to. If left blank, uses current channel." ), ) -> None: """ Sets DakinySettings channel_ids.admin value to given channel id or current channel id. Args: interaction (nextcord.Interaction): Discord interaction of command. channel (nextcord.TextChannel, optional): Channel to set in settings. """ channel_id = interaction.channel_id if channel is None else channel.id settings.channel_ids.admin = channel_id settings.save() await interaction.response.send_message(f"Admin verification channel set to <#{channel_id}>.", ephemeral=True) @channel_ids.subcommand(description="Sets announcement channel.") async def announcement( self, interaction: nextcord.Interaction, channel: nextcord.TextChannel = nextcord.SlashOption( required=False, description="Channel to set to. If left blank, uses current channel." ), ) -> None: """ Sets DakinySettings channel_ids.announcement value to given channel id or current channel id. Args: interaction (nextcord.Interaction): Discord interaction of command. channel (nextcord.TextChannel, optional): Channel to set in settings. """ channel_id = interaction.channel_id if channel is None else channel.id settings.channel_ids.announcement = channel_id settings.save() await interaction.response.send_message(f"Announcement channel set to <#{channel_id}>.", ephemeral=True) @channel_ids.subcommand(description="Sets clan info channel. Channel used for tracking current council.") async def clan_info( self, interaction: nextcord.Interaction, channel: nextcord.TextChannel = nextcord.SlashOption( required=False, description="Channel to set to. If left blank, uses current channel." ), ) -> None: """ Sets DakinySettings channel_ids.clan_info value to given channel id or current channel id. Args: interaction (nextcord.Interaction): Discord interaction of command. channel (nextcord.TextChannel, optional): Channel to set in settings. """ channel_id = interaction.channel_id if channel is None else channel.id settings.channel_ids.clan_info = channel_id settings.save() await interaction.response.send_message(f"Clan information channel set to <#{channel_id}>.", ephemeral=True) @channel_ids.subcommand( description="Sets event post channel. Channel is where event tracking information is posted." ) async def event_post( self, interaction: nextcord.Interaction, channel: nextcord.TextChannel = nextcord.SlashOption( required=False, description="Channel to set to. If left blank, uses current channel." ), ) -> None: """ Sets DakinySettings channel_ids.event_post value to given channel id or current channel id. Args: interaction (nextcord.Interaction): Discord interaction of command. channel (nextcord.TextChannel, optional): Channel to set in settings. """ channel_id = interaction.channel_id if channel is None else channel.id settings.channel_ids.event_post = channel_id settings.save() await interaction.response.send_message(f"Event posting channel set to <#{channel_id}>.", ephemeral=True) @channel_ids.subcommand(description="Sets general channel.") async def general( self, interaction: nextcord.Interaction, channel: nextcord.TextChannel = nextcord.SlashOption( required=False, description="Channel to set to. If left blank, uses current channel." ), ) -> None: """ Sets DakinySettings channel_ids.general value to given channel id or current channel id. Args: interaction (nextcord.Interaction): Discord interaction of command. channel (nextcord.TextChannel, optional): Channel to set in settings. """ channel_id = interaction.channel_id if channel is None else channel.id settings.channel_ids.general = channel_id settings.save() await interaction.response.send_message(f"General channel set to <#{channel_id}>.", ephemeral=True) @channel_ids.subcommand(description="Sets voting channel. Channel used as parent for voting threads.") async def voting( self, interaction: nextcord.Interaction, channel: nextcord.TextChannel = nextcord.SlashOption( required=False, description="Channel to set to. If left blank, uses current channel." ), ) -> None: """ Sets DakinySettings channel_ids.voting value to given channel id or current channel id. Args: interaction (nextcord.Interaction): Discord interaction of command. channel (nextcord.TextChannel, optional): Channel to set in settings. """ channel_id = interaction.channel_id if channel is None else channel.id settings.channel_ids.voting = channel_id settings.save() await interaction.response.send_message(f"Voting channel set to <#{channel_id}>.", ephemeral=True)