From f2c5eaf8439be22fef7cabb62b7392c1fcf5c634 Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Sun, 26 Feb 2023 19:17:13 -0600 Subject: [PATCH] Add ButtonOptions and Update Pagination --- helpers.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 4 deletions(-) diff --git a/helpers.py b/helpers.py index f4c370e..18a771f 100644 --- a/helpers.py +++ b/helpers.py @@ -262,16 +262,92 @@ class Confirm(discord.ui.View): self.stop() +class ButtonOptions(discord.ui.View): + def __init__(self, responders: list, timeout: float = 300.0, labels=None): + super().__init__(timeout=timeout) + if not isinstance(responders, list): + raise TypeError('responders must be a list') + self.value = None + self.responders = responders + self.options = labels + for count, x in enumerate(labels): + if count == 0: + self.option1.label = x + if x is None or x.lower() == 'na' or x == 'N/A': + self.remove_item(self.option1) + if count == 1: + self.option2.label = x + if x is None or x.lower() == 'na' or x == 'N/A': + self.remove_item(self.option2) + if count == 2: + self.option3.label = x + if x is None or x.lower() == 'na' or x == 'N/A': + self.remove_item(self.option3) + if count == 3: + self.option4.label = x + if x is None or x.lower() == 'na' or x == 'N/A': + self.remove_item(self.option4) + if count == 4: + self.option5.label = x + if x is None or x.lower() == 'na' or x == 'N/A': + self.remove_item(self.option5) + + @discord.ui.button(label='Option 1', style=discord.ButtonStyle.primary) + async def option1(self, interaction: discord.Interaction, button: discord.ui.Button): + if interaction.user not in self.responders: + return + + self.value = self.options[0] + self.clear_items() + self.stop() + + @discord.ui.button(label='Option 2', style=discord.ButtonStyle.primary) + async def option2(self, interaction: discord.Interaction, button: discord.ui.Button): + if interaction.user not in self.responders: + return + + self.value = self.options[1] + self.clear_items() + self.stop() + + @discord.ui.button(label='Option 3', style=discord.ButtonStyle.primary) + async def option3(self, interaction: discord.Interaction, button: discord.ui.Button): + if interaction.user not in self.responders: + return + + self.value = self.options[2] + self.clear_items() + self.stop() + + @discord.ui.button(label='Option 4', style=discord.ButtonStyle.primary) + async def option4(self, interaction: discord.Interaction, button: discord.ui.Button): + if interaction.user not in self.responders: + return + + self.value = self.options[3] + self.clear_items() + self.stop() + + @discord.ui.button(label='Option 5', style=discord.ButtonStyle.primary) + async def option5(self, interaction: discord.Interaction, button: discord.ui.Button): + if interaction.user not in self.responders: + return + + self.value = self.options[4] + self.clear_items() + self.stop() + + class Pagination(discord.ui.View): - def __init__(self, responders: list): - super().__init__() + def __init__(self, responders: list, timeout: float = 300.0): + super().__init__(timeout=timeout) if not isinstance(responders, list): raise TypeError('responders must be a list') self.value = None self.responders = responders - @discord.ui.button(label='⏮️', style=discord.ButtonStyle.grey) + @discord.ui.button(label='⏮️', style=discord.ButtonStyle.blurple) async def left_button(self, interaction: discord.Interaction, button: discord.ui.Button): if interaction.user not in self.responders: logging.info(f'{interaction.user} is not in {self.responders}') @@ -281,7 +357,17 @@ class Pagination(discord.ui.View): await interaction.response.defer() self.stop() - @discord.ui.button(label='⏭️', style=discord.ButtonStyle.grey) + @discord.ui.button(label='❌️', style=discord.ButtonStyle.secondary) + async def cancel_button(self, interaction: discord.Interaction, button: discord.ui.Button): + if interaction.user not in self.responders: + logging.info(f'{interaction.user} is not in {self.responders}') + return + + self.value = 'cancel' + await interaction.response.defer() + self.stop() + + @discord.ui.button(label='⏭️', style=discord.ButtonStyle.blurple) async def right_button(self, interaction: discord.Interaction, button: discord.ui.Button): if interaction.user not in self.responders: logging.info(f'{interaction.user} is not in {self.responders}')