Browse Source

Add CommandTree.clear_commands

pull/7888/head
Rapptz 3 years ago
parent
commit
83fae4f0fa
  1. 41
      discord/app_commands/tree.py

41
discord/app_commands/tree.py

@ -409,6 +409,47 @@ class CommandTree(Generic[ClientT]):
key = (command, guild_id, type.value)
return self._context_menus.pop(key, None)
def clear_commands(self, *, guild: Optional[Snowflake], type: Optional[AppCommandType] = None) -> None:
"""Clears all application commands from the tree.
This only removes the commands locally -- in order to sync the commands
and remove them in the client, :meth:`sync` must be called.
Parameters
-----------
guild: Optional[:class:`~discord.abc.Snowflake`]
The guild to remove the commands from. If ``None`` then it
removes all global commands instead.
type: :class:`~discord.AppCommandType`
The type of command to clear. If not given or ``None`` then it removes all commands
regardless of the type.
"""
if type is None or type is AppCommandType.chat_input:
if guild is None:
self._global_commands.clear()
else:
try:
commands = self._guild_commands[guild.id]
except KeyError:
pass
else:
commands.clear()
guild_id = None if guild is None else guild.id
if type is None:
self._context_menus = {
(name, _guild_id, value): cmd
for (name, _guild_id, value), cmd in self._context_menus.items()
if _guild_id != guild_id
}
elif type in (AppCommandType.user, AppCommandType.message):
self._context_menus = {
(name, _guild_id, value): cmd
for (name, _guild_id, value), cmd in self._context_menus.items()
if _guild_id != guild_id or value != type.value
}
@overload
def get_command(
self,

Loading…
Cancel
Save