forked from Rapptz/discord.py
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add an example for the new dropdowns
- Loading branch information
Showing
1 changed file
with
63 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import typing | ||
|
||
import discord | ||
from discord.ext import commands | ||
|
||
# Defines a custom Select containing colour options | ||
# that the user can choose. The callback function | ||
# of this class is called when the user changes their choice | ||
class Dropdown(discord.ui.Select): | ||
def __init__(self): | ||
|
||
# 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 | ||
super().__init__(placeholder='Choose your favourite colour...', min_values=1, max_values=1, options=options) | ||
|
||
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]}') | ||
|
||
|
||
class DropdownView(discord.ui.View): | ||
def __init__(self): | ||
super().__init__() | ||
|
||
# Adds the dropdown to our view object. | ||
self.add_item(Dropdown()) | ||
|
||
|
||
class Bot(commands.Bot): | ||
def __init__(self): | ||
super().__init__(command_prefix=commands.when_mentioned_or('$')) | ||
|
||
async def on_ready(self): | ||
print(f'Logged in as {self.user} (ID: {self.user.id})') | ||
print('------') | ||
|
||
|
||
bot = Bot() | ||
|
||
|
||
@bot.command() | ||
async def colour(ctx): | ||
"""Sends a message with our dropdown containing colours""" | ||
|
||
# Create the view containing our dropdown | ||
view = DropdownView() | ||
|
||
# Sending a message containing our view | ||
await ctx.send('Pick your favourite colour:', view=view) | ||
|
||
|
||
bot.run('token') |