mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-08-11 14:02:13 +00:00
Add FAQ about guild specific app commands
This commit is contained in:
parent
4496df79d0
commit
21fed315c7
79
docs/faq.rst
79
docs/faq.rst
@ -500,3 +500,82 @@ My bot's commands are not showing up!
|
|||||||
``https://discord.com/oauth2/authorize?client_id=<client id>&scope=applications.commands+bot``.
|
``https://discord.com/oauth2/authorize?client_id=<client id>&scope=applications.commands+bot``.
|
||||||
Alternatively, if you use :func:`utils.oauth_url`, you can call the function as such:
|
Alternatively, if you use :func:`utils.oauth_url`, you can call the function as such:
|
||||||
``oauth_url(<other options>, scopes=("bot", "applications.commands"))``.
|
``oauth_url(<other options>, scopes=("bot", "applications.commands"))``.
|
||||||
|
|
||||||
|
How do I restrict a command to a specific guild?
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
To restrict an application command to one or more guilds, you must register it as a **guild command** instead of a
|
||||||
|
global command. Guild commands are only available in the specified guild(s).
|
||||||
|
|
||||||
|
The most straightforward way is to use the :meth:`~app_commands.guilds` decorator on your command or GroupCog.
|
||||||
|
|
||||||
|
``123456789012345678`` should be replaced with the actual guild ID you want to restrict the command to.
|
||||||
|
|
||||||
|
.. code-block:: python3
|
||||||
|
|
||||||
|
@app_commands.command() # or @tree.command()
|
||||||
|
@app_commands.guilds(123456789012345678) # or @app_commands.guilds(discord.Object(123456789012345678))
|
||||||
|
async def ping(interaction: Interaction):
|
||||||
|
await interaction.response.send_message("Pong!")
|
||||||
|
|
||||||
|
# or GroupCog (applies to all subcommands):
|
||||||
|
|
||||||
|
@app_commands.guilds(123456789012345678)
|
||||||
|
class MyGroup(commands.GroupCog):
|
||||||
|
@app_commands.command()
|
||||||
|
async def pong(self, interaction: Interaction):
|
||||||
|
await interaction.response.send_message("Ping!")
|
||||||
|
|
||||||
|
After that, you must :meth:`~app_commands.CommandTree.sync` the command tree for each guild:
|
||||||
|
|
||||||
|
.. code-block:: python3
|
||||||
|
|
||||||
|
await tree.sync(guild=discord.Object(123456789012345678))
|
||||||
|
|
||||||
|
Other methods to restrict commands to specific guilds include:
|
||||||
|
|
||||||
|
- Using the ``guild`` or ``guilds`` argument in the :meth:`~app_commands.CommandTree.command` decorator:
|
||||||
|
|
||||||
|
.. code-block:: python3
|
||||||
|
|
||||||
|
@tree.command(guild=discord.Object(123456789012345678))
|
||||||
|
async def ping(interaction: Interaction):
|
||||||
|
await interaction.response.send_message("Pong!")
|
||||||
|
|
||||||
|
- Adding commands with :meth:`~app_commands.CommandTree.add_command` and specifying ``guild`` or ``guilds``:
|
||||||
|
|
||||||
|
.. code-block:: python3
|
||||||
|
|
||||||
|
@app_commands.command()
|
||||||
|
async def ping(interaction: Interaction):
|
||||||
|
await interaction.response.send_message("Pong!")
|
||||||
|
|
||||||
|
tree.add_command(ping, guild=discord.Object(123456789012345678))
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Do not combine this method with the :meth:`~app_commands.CommandTree.command` decorator,
|
||||||
|
as it will cause duplicate commands.
|
||||||
|
|
||||||
|
- Using ``guild`` or ``guilds`` in :meth:`~ext.commands.Bot.add_cog`:
|
||||||
|
|
||||||
|
This is mainly for :class:`~ext.commands.GroupCog`, but also works for cogs with application commands.
|
||||||
|
Note: This does not work with hybrid app commands (:issue:`9366`).
|
||||||
|
|
||||||
|
.. code-block:: python3
|
||||||
|
|
||||||
|
class MyCog(commands.Cog):
|
||||||
|
@app_commands.command()
|
||||||
|
async def ping(self, interaction: Interaction):
|
||||||
|
await interaction.response.send_message("Pong!")
|
||||||
|
|
||||||
|
async def setup(bot: commands.Bot) -> None:
|
||||||
|
await bot.add_cog(MyCog(...), guild=discord.Object(123456789012345678))
|
||||||
|
|
||||||
|
- Using :meth:`~app_commands.CommandTree.copy_global_to`:
|
||||||
|
|
||||||
|
This copies all global commands to a specific guild. This is mainly for development purposes.
|
||||||
|
|
||||||
|
.. code-block:: python3
|
||||||
|
|
||||||
|
tree.copy_global_to(guild=discord.Object(123456789012345678))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user