mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-10-22 08:23:09 +00:00
Move modal example to its own folder
This commit is contained in:
78
examples/modals/basic.py
Normal file
78
examples/modals/basic.py
Normal file
@@ -0,0 +1,78 @@
|
||||
import discord
|
||||
from discord import app_commands
|
||||
|
||||
import traceback
|
||||
|
||||
# The guild in which this slash command will be registered.
|
||||
# It is recommended to have a test guild to separate from your "production" bot
|
||||
TEST_GUILD = discord.Object(0)
|
||||
|
||||
|
||||
class MyClient(discord.Client):
|
||||
def __init__(self) -> None:
|
||||
# Just default intents and a `discord.Client` instance
|
||||
# We don't need a `commands.Bot` instance because we are not
|
||||
# creating text-based commands.
|
||||
intents = discord.Intents.default()
|
||||
super().__init__(intents=intents)
|
||||
|
||||
# We need an `discord.app_commands.CommandTree` instance
|
||||
# to register application commands (slash commands in this case)
|
||||
self.tree = app_commands.CommandTree(self)
|
||||
|
||||
async def on_ready(self):
|
||||
print(f'Logged in as {self.user} (ID: {self.user.id})')
|
||||
print('------')
|
||||
|
||||
async def setup_hook(self) -> None:
|
||||
# Sync the application command with Discord.
|
||||
await self.tree.sync(guild=TEST_GUILD)
|
||||
|
||||
|
||||
class Feedback(discord.ui.Modal, title='Feedback'):
|
||||
# Our modal classes MUST subclass `discord.ui.Modal`,
|
||||
# but the title can be whatever you want.
|
||||
|
||||
# This will be a short input, where the user can enter their name
|
||||
# It will also have a placeholder, as denoted by the `placeholder` kwarg.
|
||||
# By default, it is required and is a short-style input which is exactly
|
||||
# what we want.
|
||||
name = discord.ui.TextInput(
|
||||
label='Name',
|
||||
placeholder='Your name here...',
|
||||
)
|
||||
|
||||
# This is a longer, paragraph style input, where user can submit feedback
|
||||
# Unlike the name, it is not required. If filled out, however, it will
|
||||
# only accept a maximum of 300 characters, as denoted by the
|
||||
# `max_length=300` kwarg.
|
||||
feedback = discord.ui.TextInput(
|
||||
label='What do you think of this new feature?',
|
||||
style=discord.TextStyle.long,
|
||||
placeholder='Type your feedback here...',
|
||||
required=False,
|
||||
max_length=300,
|
||||
)
|
||||
|
||||
async def on_submit(self, interaction: discord.Interaction):
|
||||
await interaction.response.send_message(f'Thanks for your feedback, {self.name.value}!', ephemeral=True)
|
||||
|
||||
async def on_error(self, interaction: discord.Interaction, error: Exception) -> None:
|
||||
await interaction.response.send_message('Oops! Something went wrong.', ephemeral=True)
|
||||
|
||||
# Make sure we know what the error actually is
|
||||
traceback.print_tb(error.__traceback__)
|
||||
|
||||
|
||||
client = MyClient()
|
||||
|
||||
|
||||
@client.tree.command(guild=TEST_GUILD, description="Submit feedback")
|
||||
async def feedback(interaction: discord.Interaction):
|
||||
# Send the modal with an instance of our `Feedback` class
|
||||
# Since modals require an interaction, they cannot be done as a response to a text command.
|
||||
# They can only be done as a response to either an application command or a button press.
|
||||
await interaction.response.send_modal(Feedback())
|
||||
|
||||
|
||||
client.run('token')
|
Reference in New Issue
Block a user