Implement a least breaking approach to slash commands (#39)
* Most slash command support completed, needs some debugging (and reindent) * Implement a ctx.send helper for slash commands * Add group command support * Add Option converter, fix default optional, fix help command * Add client.setup and move readying commands to that * Implement _FakeSlashMessage.from_interaction * Rename normmal_command to message_command * Add docs for added params * Add slash_command_guilds to bot and decos * Fix merge conflict * Remove name from commands.Option, wasn't used * Move slash command processing to BotBase.process_slash_commands * Create slash_only.py Basic example for slash commands * Create slash_and_message.py Basic example for mixed commands * Fix slash_command and normal_command bools * Add some basic error handling for registration * Fixed converter upload errors * Fix some logic and make an actual example * Thanks Safety Jim * docstrings, *args, and error changes * Add proper literal support * Add basic documentation on slash commands * Fix non-slash command interactions * Fix ctx.reply in slash command context * Fix typing on Context.reply * Fix multiple optional argument sorting * Update ctx.message docs to mention error instead of warning * Move slash command creation to BotBase * Fix code style issues with Black * Rearrange some stuff and add flag support * Change some errors and fix interaction.channel fixing * Fix slash command quoting for *args Co-authored-by: iDutchy <42503862+iDutchy@users.noreply.github.com> Co-authored-by: Lint Action <lint-action@samuelmeuli.com>
This commit is contained in:
41
examples/slash_commands.py
Normal file
41
examples/slash_commands.py
Normal file
@ -0,0 +1,41 @@
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
# Set slash commands=True when constructing your bot to enable all slash commands
|
||||
# if your bot is only for a couple of servers, you can use the parameter
|
||||
# `slash_command_guilds=[list, of, guild, ids]` to specify this,
|
||||
# then the commands will be much faster to upload.
|
||||
bot = commands.Bot("!", intents=discord.Intents(guilds=True, messages=True), slash_commands=True)
|
||||
|
||||
|
||||
@bot.event
|
||||
async def on_ready():
|
||||
print(f"Logged in as {bot.user} (ID: {bot.user.id})")
|
||||
print("------")
|
||||
|
||||
|
||||
@bot.command()
|
||||
# You can use commands.Option to define descriptions for your options, and converters will still work fine.
|
||||
async def ping(
|
||||
ctx: commands.Context, emoji: bool = commands.Option(description="whether to use an emoji when responding")
|
||||
):
|
||||
# This command can be used with slash commands or message commands
|
||||
if emoji:
|
||||
await ctx.send("\U0001f3d3")
|
||||
else:
|
||||
await ctx.send("Pong!")
|
||||
|
||||
|
||||
@bot.command(message_command=False)
|
||||
async def only_slash(ctx: commands.Context):
|
||||
# This command can only be used with slash commands
|
||||
await ctx.send("Hello from slash commands!")
|
||||
|
||||
|
||||
@bot.command(slash_command=False)
|
||||
async def only_message(ctx: commands.Context):
|
||||
# This command can only be used with a message
|
||||
await ctx.send("Hello from message commands!")
|
||||
|
||||
|
||||
bot.run("token")
|
Reference in New Issue
Block a user