Added dropdowns to utilities
This commit is contained in:
parent
c253ae90a3
commit
63e738d048
46
utilities/dropdown.py
Normal file
46
utilities/dropdown.py
Normal file
@ -0,0 +1,46 @@
|
||||
import discord
|
||||
import logging
|
||||
|
||||
class DropdownOption(discord.ui.Select):
|
||||
def __init__(self, option_list: list, placeholder: str = 'Make your selection', min_values: int = 1, max_values: int = 1, callback=None):
|
||||
# Set the options that will be presented inside the dropdown
|
||||
# options = [
|
||||
# discord.SelectOption(label='Red', description='Your favourite colour is red', emoji='🟥'),
|
||||
# discord.SelectOption(label='Green', description='Your favourite colour is green', emoji='🟩'),
|
||||
# discord.SelectOption(label='Blue', description='Your favourite colour is blue', emoji='🟦'),
|
||||
# ]
|
||||
|
||||
# The placeholder is what will be shown when no option is chosen
|
||||
# The min and max values indicate we can only pick one of the three options
|
||||
# The options parameter defines the dropdown options. We defined this above
|
||||
|
||||
# If a default option is set on any SelectOption, the View will not process if only the default is
|
||||
# selected by the user
|
||||
self.custom_callback = callback
|
||||
super().__init__(
|
||||
placeholder=placeholder,
|
||||
min_values=min_values,
|
||||
max_values=max_values,
|
||||
options=option_list
|
||||
)
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
# Use the interaction object to send a response message containing
|
||||
# the user's favourite colour or choice. The self object refers to the
|
||||
# Select object, and the values attribute gets a list of the user's
|
||||
# selected options. We only want the first one.
|
||||
# await interaction.response.send_message(f'Your favourite colour is {self.values[0]}')
|
||||
logging.info(f'Dropdown callback: {self.custom_callback}')
|
||||
await self.custom_callback(interaction, self.values)
|
||||
|
||||
|
||||
class DropdownView(discord.ui.View):
|
||||
"""
|
||||
https://discordpy.readthedocs.io/en/latest/interactions/api.html#select
|
||||
"""
|
||||
def __init__(self, dropdown_objects: list[DropdownOption], timeout: float = 300.0):
|
||||
super().__init__(timeout=timeout)
|
||||
|
||||
# self.add_item(Dropdown())
|
||||
for x in dropdown_objects:
|
||||
self.add_item(x)
|
||||
42
utilities/pages.py
Normal file
42
utilities/pages.py
Normal file
@ -0,0 +1,42 @@
|
||||
import discord
|
||||
import logging
|
||||
|
||||
|
||||
class Pagination(discord.ui.View):
|
||||
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.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}')
|
||||
return
|
||||
|
||||
self.value = 'left'
|
||||
await interaction.response.defer()
|
||||
self.stop()
|
||||
|
||||
@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}')
|
||||
return
|
||||
|
||||
self.value = 'right'
|
||||
await interaction.response.defer()
|
||||
self.stop()
|
||||
Loading…
Reference in New Issue
Block a user