diff --git a/aurora/configuration/menus/overrides.py b/aurora/configuration/menus/overrides.py index aa39d2c..0202ab0 100644 --- a/aurora/configuration/menus/overrides.py +++ b/aurora/configuration/menus/overrides.py @@ -1,7 +1,8 @@ -from discord import ui, ButtonStyle, Interaction, SelectOption +from discord import ui, ButtonStyle, Interaction from redbot.core import commands from aurora.configuration.embed import embed +from aurora.configuration.utils import create_pagesize_options from aurora.utilities.config import config class Overrides(ui.View): @@ -9,50 +10,104 @@ class Overrides(ui.View): super().__init__() self.ctx = ctx - @ui.select(cls=ui.Select, placeholder="Auto Evidence Format", row=0, options=[ - SelectOption(label="Enabled", value=1, emoji="✅"), - SelectOption(label="Disabled", value=0, emoji="❌"), - SelectOption(label="Default", value='None', emoji="🔁") - ]) - async def auto_evidenceformat(self, interaction: Interaction, select: ui.Select): # pylint: disable=unused-argument - await interaction.response.defer() + @ui.button(label="Auto Evidence Format", style=ButtonStyle.green, row=0) + async def auto_evidenceformat(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument if self.ctx.author != interaction.user: - await interaction.followup.send("You cannot change this setting for other users.", ephemeral=True) + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) return - if select.values[0] == 'None': - await config.user(self.ctx.author).auto_evidenceformat.clear() + await interaction.response.defer() + current_setting = await config.user(self.ctx.author).auto_evidenceformat() + if current_setting is not None: + await config.user(self.ctx.author).auto_evidenceformat.set(not current_setting) else: - await config.user(self.ctx.author).auto_evidenceformat.set(bool(int(select.values[0]))) + await config.user(self.ctx.author).auto_evidenceformat.set(True) await interaction.message.edit(embed=await embed(self.ctx)) - @ui.select(cls=ui.Select, placeholder="Epheremal", row=1, options=[ - SelectOption(label="Enabled", value=1, emoji="✅"), - SelectOption(label="Disabled", value=0, emoji="❌"), - SelectOption(label="Default", value='None', emoji="🔁") - ]) - async def ephemeral(self, interaction: Interaction, select: ui.Select): # pylint: disable=unused-argument - await interaction.response.defer() + @ui.button(label="X", style=ButtonStyle.red, row=0) + async def auto_evidenceformat_reset(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument if self.ctx.author != interaction.user: - await interaction.followup.send("You cannot change this setting for other users.", ephemeral=True) + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) return - if select.values[0] == 'None': - await config.user(self.ctx.author).history_ephemeral.clear() - else: - await config.user(self.ctx.author).history_ephemeral.set(bool(int(select.values[0]))) + await interaction.response.defer() + await config.user(self.ctx.author).auto_evidenceformat.clear() await interaction.message.edit(embed=await embed(self.ctx)) - @ui.select(cls=ui.Select, placeholder="Inline", row=2, options=[ - SelectOption(label="Enabled", value=1, emoji="✅"), - SelectOption(label="Disabled", value=0, emoji="❌"), - SelectOption(label="Default", value='None', emoji="🔁") - ]) - async def inline(self, interaction: Interaction, select: ui.Select): # pylint: disable=unused-argument - await interaction.response.defer() + @ui.button(label="Ephemeral", style=ButtonStyle.green, row=0) + async def ephemeral(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument if self.ctx.author != interaction.user: - await interaction.followup.send("You cannot change this setting for other users.", ephemeral=True) + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) return - if select.values[0] == 'None': - await config.user(self.ctx.author).history_inline.clear() + await interaction.response.defer() + current_setting = await config.user(self.ctx.author).history_ephemeral() + if current_setting: + await config.user(self.ctx.author).history_ephemeral.set(not current_setting) else: - await config.user(self.ctx.author).history_inline.set(bool(int(select.values[0]))) + await config.user(self.ctx.author).history_ephemeral.set(True) + await interaction.message.edit(embed=await embed(self.ctx)) + + @ui.button(label="X", style=ButtonStyle.red, row=0) + async def ephemeral_reset(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument + if self.ctx.author != interaction.user: + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) + return + await interaction.response.defer() + await config.user(self.ctx.author).history_ephemeral.clear() + await interaction.message.edit(embed=await embed(self.ctx)) + + @ui.button(label="Inline", style=ButtonStyle.green, row=0) + async def inline(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument + if self.ctx.author != interaction.user: + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) + return + await interaction.response.defer() + current_setting = await config.user(self.ctx.author).history_inline() + if current_setting: + await config.user(self.ctx.author).history_inline.set(not current_setting) + else: + await config.user(self.ctx.author).history_inline.set(True) + await interaction.message.edit(embed=await embed(self.ctx)) + + @ui.button(label="X", style=ButtonStyle.red, row=0) + async def inline_reset(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument + if self.ctx.author != interaction.user: + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) + return + await interaction.response.defer() + await config.user(self.ctx.author).history_inline.clear() + await interaction.message.edit(embed=await embed(self.ctx)) + + @ui.select(placeholder="Inline Pagesize", options=create_pagesize_options(), row=1) + async def inline_pagesize(self, select: ui.Select, interaction: Interaction): # pylint: disable=unused-argument + if self.ctx.author != interaction.user: + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) + return + await interaction.response.defer() + await config.user(self.ctx.author).history_inline_pagesize.set(int(select.values[0])) + await interaction.message.edit(embed=await embed(self.ctx)) + + @ui.button(label="X", style=ButtonStyle.red, row=1) + async def inline_pagesize_reset(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument + if self.ctx.author != interaction.user: + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) + return + await interaction.response.defer() + await config.user(self.ctx.author).history_inline_pagesize.clear() + await interaction.message.edit(embed=await embed(self.ctx)) + + @ui.button(label="Pagesize", options=create_pagesize_options(), row=2) + async def pagesize(self, select: ui.Select, interaction: Interaction): # pylint: disable=unused-argument + if self.ctx.author != interaction.user: + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) + return + await interaction.response.defer() + await config.user(self.ctx.author).history_pagesize.set(int(select.values[0])) + await interaction.message.edit(embed=await embed(self.ctx)) + + @ui.button(label="X", style=ButtonStyle.red, row=2) + async def pagesize_reset(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument + if self.ctx.author != interaction.user: + await interaction.response.send_message("You cannot change this setting for other users.", ephemeral=True) + return + await interaction.response.defer() + await config.user(self.ctx.author).history_pagesize.clear() await interaction.message.edit(embed=await embed(self.ctx)) diff --git a/aurora/configuration/utils.py b/aurora/configuration/utils.py index ea3c5e0..c836cf4 100644 --- a/aurora/configuration/utils.py +++ b/aurora/configuration/utils.py @@ -1,5 +1,7 @@ from typing import Union +from discord import SelectOption + def get_bool_emoji(value: bool) -> str: """Returns a unicode emoji based on a boolean value.""" if value is True: @@ -13,3 +15,14 @@ def get_pagesize_str(value: Union[int, None]) -> str: if value is None: return "\N{BLACK QUESTION MARK ORNAMENT}\N{VARIATION SELECTOR-16}" return str(value) + " cases per page" + +def create_pagesize_options() -> list[SelectOption]: + """Returns a list of SelectOptions for pagesize configuration.""" + return [ + SelectOption( + label=str(i), + value=str(i), + description=f"Set the pagesize to {i}.", + ) + for i in range(1, 21) + ]