API Reference
The following section outlines the API of discord.py’s command extension module.
Bots
Bot
- activity
- allowed_mentions
- application_commands
- cached_messages
- case_insensitive
- cogs
- command_prefix
- commands
- delete_not_existing_commands
- description
- emojis
- extensions
- global_application_commands
- guilds
- help_command
- intents
- latency
- owner_id
- owner_ids
- private_channels
- self_bot
- stickers
- strip_after_prefix
- sync_commands
- sync_commands_on_cog_reload
- user
- users
- voice_clients
- @activity_primary_entry_point_command
- defadd_application_cmds_from_cog
- defadd_check
- defadd_cog
- defadd_command
- defadd_commands
- defadd_interaction_listener
- defadd_listener
- @after_invoke
- asyncapplication_info
- asyncbefore_identify_hook
- @before_invoke
- asyncchange_presence
- @check
- @check_once
- defclear
- asyncclose
- @command
- asyncconnect
- asyncconsume_entitlement
- asynccreate_guild
- asynccreate_test_entitlement
- asyncdelete_invite
- asyncdelete_test_entitlement
- @event
- asyncfetch_all_nitro_stickers
- asyncfetch_channel
- asyncfetch_entitlements
- asyncfetch_guild
- deffetch_guilds
- asyncfetch_invite
- asyncfetch_template
- asyncfetch_user
- asyncfetch_voice_regions
- asyncfetch_webhook
- asyncfetch_widget
- defget_all_channels
- defget_all_members
- defget_channel
- defget_cog
- defget_command
- asyncget_context
- defget_emoji
- defget_guild
- defget_message
- defget_partial_messageable
- asyncget_prefix
- defget_user
- @group
- asyncinvoke
- defis_closed
- asyncis_owner
- defis_ready
- defis_ws_ratelimited
- @listen
- defload_extension
- asynclogin
- asynclogout
- @message_command
- asyncon_application_command_error
- @on_click
- asyncon_command_error
- asyncon_error
- @on_select
- @on_submit
- @once
- asyncprocess_commands
- defreload_extension
- defreload_extensions
- defremove_application_cmds_from_cog
- defremove_check
- defremove_cog
- defremove_command
- defremove_interaction_listener
- defremove_listener
- asyncrequest_offline_members
- defrun
- @slash_command
- asyncstart
- defunload_extension
- asyncupdate_primary_entry_point_command
- @user_command
- asyncwait_for
- asyncwait_until_ready
- defwalk_commands
- class discord.ext.commands.Bot(command_prefix, help_command=<default-help-command>, description=None, **options)
Bases:
BotBase
,Client
Represents a discord bot.
This class is a subclass of
discord.Client
and as a result anything that you can do with adiscord.Client
you can do with this bot.This class also subclasses
GroupMixin
to provide the functionality to manage commands.- command_prefix
The command prefix is what the message content must contain initially to have a command invoked. This prefix could either be a string to indicate what the prefix should be, or a callable that takes in the bot as its first parameter and
discord.Message
as its second parameter and returns the prefix. This is to facilitate “dynamic” command prefixes. This callable can be either a regular function or a coroutine.An empty string as the prefix always matches, enabling prefix-less command invocation. While this may be useful in DMs it should be avoided in servers, as it’s likely to cause performance issues and unintended command invocations.
The command prefix could also be an iterable of strings indicating that multiple checks for the prefix should be used and the first one to match will be the invocation prefix. You can get this prefix via
Context.prefix
. To avoid confusion empty iterables are not allowed.Note
When passing multiple prefixes be careful to not pass a prefix that matches a longer prefix occurring later in the sequence. For example, if the command prefix is
('!', '!?')
the'!?'
prefix will never be matched to any message as the previous one matches messages starting with!?
. This is especially important when passing an empty string, it should always be last as no prefix after it will be matched.
- case_insensitive
Whether the commands should be case insensitive. Defaults to
False
. This attribute does not carry over to groups. You must set it to every group if you require group commands to be case insensitive as well.- Type:
- self_bot
If
True
, the bot will only listen to commands invoked by itself rather than ignoring itself. IfFalse
(the default) then the bot will ignore itself. This cannot be changed once initialised.- Type:
- help_command
The help command implementation to use. This can be dynamically set at runtime. To remove the help command pass
None
. For more information on implementing a help command, see Help Commands.- Type:
Optional[
HelpCommand
]
- owner_id
The user ID that owns the bot. If this is not set and is then queried via
is_owner()
then it is fetched automatically usingapplication_info()
.- Type:
Optional[
int
]
- owner_ids
The user IDs that owns the bot. This is similar to
owner_id
. If this is not set and the application is team based, then it is fetched automatically usingapplication_info()
. For performance reasons it is recommended to use aset
for the collection. You cannot set bothowner_id
andowner_ids
.Added in version 1.3.
- Type:
Optional[Collection[
int
]]
- strip_after_prefix
Whether to strip whitespace characters after encountering the command prefix. This allows for
! hello
and!hello
to both work if thecommand_prefix
is set to!
. Defaults toFalse
.Added in version 1.7.
- Type:
- sync_commands
Whether to sync application-commands on startup, default
False
.This will register global and guild application-commands(slash-, user- and message-commands) that are not registered yet, update changes and remove application-commands that could not be found in the code anymore if
delete_not_existing_commands
is set toTrue
what it is by default.- Type:
- delete_not_existing_commands
Whether to remove global and guild-only application-commands that are not in the code anymore, default
True
.- Type:
- sync_commands_on_cog_reload
Whether to sync global and guild-only application-commands when reloading an extension, default
False
.- Type:
- @after_invoke
A decorator that registers a coroutine as a post-invoke hook.
A post-invoke hook is called directly after the command is called. This makes it a useful function to clean-up database connections or any type of clean up required.
This post-invoke hook takes a sole parameter, a
Context
.Note
Similar to
before_invoke()
, this is not called unless checks and argument parsing procedures succeed. This hook is, however, always called regardless of the internal command callback raising an error (i.e.CommandInvokeError
). This makes it ideal for clean-up scenarios.
- @before_invoke
A decorator that registers a coroutine as a pre-invoke hook.
A pre-invoke hook is called directly before the command is called. This makes it a useful function to set up database connections or any type of set up required.
This pre-invoke hook takes a sole parameter, a
Context
.Note
The
before_invoke()
andafter_invoke()
hooks are only called if all checks and argument parsing procedures pass without error. If any check or argument parsing procedures fail then the hooks are not called.
- @check
A decorator that adds a global check to the bot.
A global check is similar to a
check()
that is applied on a per command basis except it is run before any command checks have been verified and applies to every command the bot has.Note
This function can either be a regular function or a coroutine.
Similar to a command
check()
, this takes a single parameter of typeContext
and can only raise exceptions inherited fromCommandError
.Example
@bot.check def check_commands(ctx): return ctx.command.qualified_name in allowed_commands
- @check_once
A decorator that adds a “call once” global check to the bot.
Unlike regular global checks, this one is called only once per
Command.invoke()
call.Regular global checks are called whenever a command is called or
Command.can_run()
is called. This type of check bypasses that and ensures that it’s called only once, even inside the default help command.Note
When using this function the
Context
sent to a group subcommand may only parse the parent command and not the subcommands due to it being invoked once perBot.invoke()
call.Note
This function can either be a regular function or a coroutine.
Similar to a command
check()
, this takes a single parameter of typeContext
and can only raise exceptions inherited fromCommandError
.Example
@bot.check_once def whitelist(ctx): return ctx.message.author.id in my_whitelist
- @command(*args, **kwargs)
A shortcut decorator that invokes
command()
and adds it to the internal command list viaadd_command()
.- Returns:
A decorator that converts the provided method into a Command, adds it to the bot, then returns it.
- Return type:
Callable[…,
Command
]
- @event
A decorator that registers an event to listen to.
You can find more info about the events on the documentation below.
The events must be a coroutine, if not,
TypeError
is raised.Example
@client.event async def on_ready(): print('Ready!')
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- @group(*args, **kwargs)
A shortcut decorator that invokes
group()
and adds it to the internal command list viaadd_command()
.- Returns:
A decorator that converts the provided method into a Group, adds it to the bot, then returns it.
- Return type:
Callable[…,
Group
]
- @listen(name=None)
A decorator that registers another function as an external event listener. Basically this allows you to listen to multiple events from different places e.g. such as
on_ready()
The functions being listened to must be a coroutine.
Example
@bot.listen() async def on_message(message): print('one') # in some other file... @bot.listen('on_message') async def my_message(message): print('two')
Would print one and two in an unspecified order.
- Raises:
TypeError – The function being listened to is not a coroutine.
- @once(name=None, check=None)
A decorator that registers an event to listen to only once. For example if you want to perform a database connection once the bot is ready.
You can find more info about the events on the documentation below.
The events must be a coroutine, if not,
TypeError
is raised.- Parameters:
name (
str
) – The name of the event we want to listen to. This is passed towait_for()
. Defaults tofunc.__name__
.check (Optional[Callable[…,
bool
]]) – A predicate to check what to wait for. The arguments must meet the parameters of the event being waited for.
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
Example
@client.once() async def ready(): print('Beep bop, I\'m ready!') @client.once(check=lambda msg: msg.author.id == 693088765333471284) async def message(message): await message.reply('Hey there, how are you?')
- async for ... in fetch_guilds(*, limit=100, before=None, after=None)
Retrieves an
AsyncIterator
that enables receiving your guilds.Note
Using this, you will only receive
Guild.owner
,Guild.icon
,Guild.id
, andGuild.name
perGuild
.Note
This method is an API call. For general usage, consider
guilds
instead.Examples
Usage
async for guild in client.fetch_guilds(limit=150): print(guild.name)
Flattening into a list
guilds = await client.fetch_guilds(limit=150).flatten() # guilds is now a list of Guild...
All parameters are optional.
- Parameters:
limit (Optional[
int
]) – The number of guilds to retrieve. IfNone
, it retrieves every guild you have access to. Note, however, that this would make it a slow operation. Defaults to100
.before (Union[
abc.Snowflake
,datetime.datetime
]) – Retrieves guilds before this date or object. If a date is provided it must be a timezone-naive datetime representing UTC time.after (Union[
abc.Snowflake
,datetime.datetime
]) – Retrieve guilds after this date or object. If a date is provided it must be a timezone-naive datetime representing UTC time.
- Raises:
discord.HTTPException – Getting the guilds failed.
- Yields:
Guild
– The guild with the guild data parsed.
- @slash_command(name=None, name_localizations=<Localizations: None>, description=None, description_localizations=<Localizations: None>, allow_dm=MISSING, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=MISSING, default_required_permissions=None, options=[], guild_ids=None, connector={}, option_descriptions={}, option_descriptions_localizations={}, base_name=None, base_name_localizations=<Localizations: None>, base_desc=None, base_desc_localizations=<Localizations: None>, group_name=None, group_name_localizations=<Localizations: None>, group_desc=None, group_desc_localizations=<Localizations: None>)
A decorator that adds a slash-command to the client. The function this is attached to must be a coroutine.
Warning
sync_commands
of theClient
instance must be set toTrue
to register a command if it does not already exist and update it if changes where made.Note
Any of the following parameters are only needed when the corresponding target was not used before (e.g. there is already a command in the code that has these parameters set) - otherwise it will replace the previous value or update it for iterables.
allow_dm
allowed_contexts
(update)allowed_integration_types
(update)is_nsfw
base_name_localizations
base_desc
base_desc_localizations
group_name_localizations
group_desc
group_desc_localizations
- Parameters:
name (Optional[
str
]) – The name of the command. Must only contain a-z, _ and - and be 1-32 characters long. Default to the functions name.name_localizations (Optional[
Localizations
]) – Localizations object for name field. Values follow the same restrictions asname
description (Optional[
str
]) – The description of the command shows up in the client. Must be between 1-100 characters long. Default to the functions docstring or “No Description”.description_localizations (Optional[
Localizations
]) – Localizations object for description field. Values follow the same restrictions asdescription
allow_dm (Optional[
bool
]) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) –Whether this command is an NSFW command , default
False
.Note
Currently all sub-commands of a command that is marked as NSFW are NSFW too.
default_required_permissions (Optional[
Permissions
]) – Permissions that a Member needs by default to execute(see) the command.options (Optional[List[
SlashCommandOption
]]) – A list of max. 25 options for the command. If not provided the options will be generated usinggenerate_options()
that creates the options out of the function parameters. Required options must be listed before optional ones. Useoptions
to connect non-ascii option names with the parameter of the function.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.connector (Optional[Dict[
str
,str
]]) – A dictionary containing the name of function-parameters as keys and the name of the option as values. Useful for using non-ascii Letters in your option names without getting ide-errors.option_descriptions (Optional[Dict[
str
,str
]]) –Descriptions the
generate_options()
should take for the Options that will be generated. The keys are thename
of the option and the value thedescription
.Note
This will only be used if
options
is not set.option_descriptions_localizations (Optional[Dict[
str
,Localizations
]]) – Localizeddescription
for the options. In the format{'option_name': Localizations(...)}
base_name (Optional[
str
]) – The name of the base-command(a-z, _ and -, 1-32 characters) if you want the command to be in a command-/sub-command-group. If the base-command does not exist yet, it will be added.base_name_localizations (Optional[
Localizations
]) – Localizedbase_name
’s for the command.base_desc (Optional[
str
]) – The description of the base-command(1-100 characters).base_desc_localizations (Optional[
Localizations
]) – Localizedbase_description
’s for the command.group_name (Optional[
str
]) – The name of the command-group(a-z, _ and -, 1-32 characters) if you want the command to be in a sub-command-group.group_name_localizations (Optional[
Localizations
]) – Localizedgroup_name
’s for the command.group_desc (Optional[
str
]) – The description of the sub-command-group(1-100 characters).group_desc_localizations (Optional[
Localizations
]) – Localizedgroup_desc
’s for the command.
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine or a parameter passed to
SlashCommandOption
is invalid for theoption_type
or theoption_type
itself is invalid.InvalidArgument – You passed
group_name
but nobase_name
.ValueError – Any of
name
,description
,options
,base_name
,base_desc
,group_name
orgroup_desc
is not valid.
- Returns:
If neither
guild_ids
norbase_name
passed: An instance ofSlashCommand
.If
guild_ids
and nobase_name
where passed: An instance ofGuildOnlySlashCommand
representing the guild-only slash-commands.If
base_name
and noguild_ids
where passed: An instance ofSubCommand
.If
base_name
andguild_ids
passed: instance ofGuildOnlySubCommand
representing the guild-only sub-commands.
- Return type:
Union[
SlashCommand
,GuildOnlySlashCommand
,SubCommand
,GuildOnlySubCommand
]
- @message_command(name=None, name_localizations=<Localizations: None>, default_required_permissions=None, allow_dm=True, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=False, guild_ids=None)
A decorator that registers a
MessageCommand
(shows up underApps
when right-clicking on a message) to the client. The function this is attached to must be a coroutine.Note
sync_commands
of theClient
instance must be set toTrue
to register a command if it does not already exit and update it if changes where made.- Parameters:
name (Optional[
str
]) – The name of the message-command, default to the functions name. Must be between 1-32 characters long.name_localizations (
Localizations
) – Localizedname
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allow_dm (
bool
) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command , defaultFalse
.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.
- Returns:
The message-command registered.
- Return type:
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine.
- @user_command(name=None, name_localizations=<Localizations: None>, default_required_permissions=None, allow_dm=True, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=False, guild_ids=None)
A decorator that registers a
UserCommand
(shows up underApps
when right-clicking on a user) to the client. The function this is attached to must be a coroutine.Note
sync_commands
of theClient
instance must be set toTrue
to register a command if it does not already exist and update it if changes where made.- Parameters:
name (Optional[
str
]) – The name of the user-command, default to the functions name. Must be between 1-32 characters long.name_localizations (
Localizations
) – Localizedname
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allow_dm (
bool
) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command , defaultFalse
.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.
- Returns:
The user-command registered.
- Return type:
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine.
- @on_click(custom_id=None)
A decorator with which you can assign a function to a specific
Button
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_raw_button_click()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]]) –
If the
custom_id
of theButton
could not be used as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘cool blue Button is blue’ will let the function bee invoked too.
Example
# the button Button(label='Hey im a cool blue Button', custom_id='cool blue Button', style=ButtonStyle.blurple) # function that's called when the button pressed @client.on_click(custom_id='^cool blue Button$') async def cool_blue_button(i: discord.ComponentInteraction, button: Button): await i.respond(f'Hey you pressed a {button.custom_id}!', hidden=True)
- Return type:
The decorator for the function called when the button clicked
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- @on_select(custom_id=None)
A decorator with which you can assign a function to a specific
SelectMenu
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_raw_selection_select()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]] = None) –
If the custom_id of the
SelectMenu
could not be used as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘choose_your_gender later’ will let the function bee invoked too.
Example
# the SelectMenu SelectMenu(custom_id='choose_your_gender', options=[ SelectOption(label='Female', value='Female', emoji='♀️'), SelectOption(label='Male', value='Male', emoji='♂️'), SelectOption(label='Trans/Non Binary', value='Trans/Non Binary', emoji='⚧') ], placeholder='Choose your Gender') # function that's called when the SelectMenu is used @client.on_select() async def choose_your_gender(i: discord.Interaction, select_menu): await i.respond(f'You selected `{select_menu.values[0]}`!', hidden=True)
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- @on_submit(custom_id=None)
A decorator with which you can assign a function to a specific
Modal
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_modal_submit()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]]) –
If the
custom_id
of the modal could not be used as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘suggestions_modal_submit_private’ will let the function bee invoked too.
Examples
# the Modal Modal( title='Create a new suggestion', custom_id='suggestions_modal', components=[...] ) # function that's called when the Modal is submitted @client.on_submit(custom_id='^suggestions_modal$') async def suggestions_modal_callback(i: discord.ModalSubmitInteraction): ... # This can also be done based on the function name @client.on_submit() async def suggestions_modal(i: discord.ModalSubmitInteraction): ...
@client.on_submit(custom_id='^ticket_answer:(?P<id>[0-9]+)$') async def ticket_answer_callback(i: discord.ModalSubmitInteraction): user_id = int(i.match['id']) user = client.get_user(user_id) or await client.fetch_user(user_id)
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- property activity
The activity being used upon logging in.
- Type:
Optional[
BaseActivity
]
- activity_primary_entry_point_command(name='launch', name_localizations=<Localizations: None>, description='', description_localizations=<Localizations: None>, default_required_permissions=None, allowed_contexts=None, allowed_integration_types=None, is_nsfw=False)
A decorator that sets the handler function for the primary entry point of an activity.
This overwrites the default activity command created by Discord.
Note
If you only want to change the name, description, permissions, etc. of the default activity command, use
update_activity_command()
instead.- Parameters:
name (Optional[
str
]) – The name of the activity command. Default to ‘launch’.name_localizations (
Localizations
) – Localizedname
’s.description (
str
) – The description of the activity command.description_localizations (
Localizations
) – Localizeddescription
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allowed_contexts (Optional[List[
InteractionContextType
]]) – The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command, defaultFalse
.
- Returns:
The activity command to be registered as the primary entry point.
- Return type:
ActivityEntryPointCommand
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine.
- add_application_cmds_from_cog(cog)
Add all application-commands in the given cog to the internal list of application-commands.
- Parameters:
cog (
Cog
) – The cog which application-commands should be added to the internal list of application-commands.
- add_check(func, *, call_once=False)
Adds a global check to the bot.
This is the non-decorator interface to
check()
andcheck_once()
.- Parameters:
func – The function that was used as a global check.
call_once (
bool
) – If the function should only be called once perCommand.invoke()
call.
- add_cog(cog)
Adds a “cog” to the bot.
A cog is a class that has its own event listeners and commands.
- Parameters:
cog (
Cog
) – The cog to register to the bot.- Raises:
CommandError – An error happened during loading.
- add_command(command)
Adds a
Command
into the internal list of commands.This is usually not called, instead the
command()
orgroup()
shortcut decorators are used instead.Changed in version 1.4: Raise
CommandRegistrationError
instead of genericClientException
- add_commands(*commands)
Similar to
add_command()
but you can pass multiple commands at once.
- add_interaction_listener(_type, func, custom_id)
This adds an interaction(decorator) like
on_click()
oron_select()
to the client listeners.Note
This should not be used directly; it’s used internal when a Cog is loaded.
- add_listener(func, name=None)
The non decorator alternative to
listen()
.- Parameters:
Example
async def on_ready(): pass async def my_message(message): pass bot.add_listener(on_ready) bot.add_listener(my_message, 'on_message')
- property allowed_mentions
The allowed mention configuration.
Added in version 1.4.
- Type:
Optional[
AllowedMentions
]
- property application_commands
Returns a list of any application command that is registered for the bot`
- Type:
List[
ApplicationCommand
]
- await application_info()
This function is a coroutine.
Retrieves the bot’s application information.
- Raises:
.HTTPException – Retrieving the information failed somehow.
- Returns:
The bot’s application information.
- Return type:
- await before_identify_hook(shard_id, *, initial=False)
This function is a coroutine.
A hook that is called before IDENTIFYing a _session. This is useful if you wish to have more control over the synchronization of multiple IDENTIFYing clients.
The default implementation sleeps for 5 seconds.
Added in version 1.4.
- property cached_messages
Read-only list of messages the connected client has cached.
Added in version 1.1.
- Type:
Sequence[
Message
]
- await change_presence(*, activity=None, status='online')
This function is a coroutine.
Changes the client’s presence.
Changed in version 2.0: Removed the
afk
parameterExample
game = discord.Game("with the API") await client.change_presence(status=discord.Status.idle, activity=game)
- Parameters:
activity (Optional[
BaseActivity
]) – The activity being done.None
if no currently active activity is done.status (Optional[
Status
]) – Indicates what status to change to. IfNone
, thenStatus.online
is used.
- Raises:
.InvalidArgument – If the
activity
parameter is not the proper type.
- clear()
Clears the internal state of the bot.
After this, the bot can be considered “re-opened”, i.e.
is_closed()
andis_ready()
both returnFalse
along with the bot’s internal cache cleared.
- await close()
This function is a coroutine.
This has the same behaviour as
discord.Client.close()
except that it unload all extensions and cogs first.
- property commands
A unique set of commands without aliases that are registered.
- Type:
Set[
Command
]
- await connect(*, reconnect=True)
This function is a coroutine.
Creates a websocket connection and lets the websocket listen to messages from Discord. This is a loop that runs the entire event system and miscellaneous aspects of the library. Control is not resumed until the WebSocket connection is terminated.
- Parameters:
reconnect (
bool
) – If we should attempt reconnecting, either due to internet failure or a specific failure on Discord’s part. Certain disconnects that lead to bad state will not be handled (such as invalid sharding payloads or bad tokens).- Raises:
.GatewayNotFound – If the gateway to connect to Discord is not found. Usually if this is thrown then there is a Discord API outage.
.ConnectionClosed – The websocket connection has been terminated.
- await consume_entitlement(entitlement_id)
This function is a coroutine.
For one-time purchase
consumable
SKUs, marks a given entitlement for the user as consumed.consumed
will beFalse
for this entitlement when usingfetch_entitlements()
.- Parameters:
entitlement_id (
int
) – The ID of the entitlement to consume.
- await create_guild(name, region=None, icon=None, *, code=None)
This function is a coroutine.
Creates a
Guild
.Bot accounts in more than 10 guilds are not allowed to create guilds.
- Parameters:
name (
str
) – The name of the guild.region (
VoiceRegion
) – The region for the voice communication server. Defaults toVoiceRegion.us_west
.icon (
bytes
) – The bytes-like object representing the icon. SeeClientUser.edit()
for more details on what is expected.code (Optional[
str
]) –The code for a template to create the guild with.
Added in version 1.4.
- Raises:
.HTTPException – Guild creation failed.
.InvalidArgument – Invalid icon image format given. Must be PNG or JPG.
- Returns:
The guild created. This is not the same guild that is added to cache.
- Return type:
- await create_test_entitlement(sku_id, target, owner_type=MISSING)
This function is a coroutine.
Note
This method is only temporary and probably will be removed with or even before a stable v2 release as discord is already redesigning the testing system based on developer feedback.
See https://github.com/discord/discord-api-docs/pull/6502 for more information.
Creates a test entitlement to a given
SKU
for a given guild or user. Discord will act as though that user or guild has entitlement to your premium offering.After creating a test entitlement, you’ll need to reload your Discord client. After doing so, you’ll see that your server or user now has premium access.
- Parameters:
sku_id (
int
) – The ID of the SKU to create a test entitlement for.target (Union[
User
,Guild
,Snowflake
]) –The target to create a test entitlement for.
This can be a user, guild or just the ID, if so the owner_type parameter must be set.
owner_type (
str
) – The type of thetarget
, could beguild
oruser
.
- Returns:
The created test entitlement.
- Return type:
Entitlement
- await delete_invite(invite)
This function is a coroutine.
Revokes an
Invite
, URL, or ID to an invite.You must have the
manage_channels
permission in the associated guild to do this.
- await delete_test_entitlement(entitlement_id)
This function is a coroutine.
Note
This method is only temporary and probably will be removed with or even before a stable v2 release as discord is already redesigning the testing system based on developer feedback.
See https://github.com/discord/discord-api-docs/pull/6502 for more information.
Deletes a currently-active test entitlement. Discord will act as though that user or guild no longer has entitlement to your premium offering.
- Parameters:
entitlement_id (
int
) – The ID of the entitlement to delete.
- property emojis
The emojis that the connected client has.
- Type:
List[
Emoji
]
- property extensions
A read-only mapping of extension name to extension.
- Type:
Mapping[
str
,types.ModuleType
]
- await fetch_all_nitro_stickers()
This function is a coroutine.
Retrieves a
list
with all build-inStickerPack
‘s.- Returns:
A list containing all build-in sticker-packs.
- Return type:
- await fetch_channel(channel_id)
This function is a coroutine.
Retrieves a
abc.GuildChannel
orabc.PrivateChannel
with the specified ID.Note
This method is an API call. For general usage, consider
get_channel()
instead.Added in version 1.2.
- Raises:
.InvalidData – An unknown channel type was received from Discord.
.HTTPException – Retrieving the channel failed.
.NotFound – Invalid Channel ID.
.Forbidden – You do not have permission to fetch this channel.
- Returns:
The channel from the ID.
- Return type:
Union[
abc.GuildChannel
,abc.PrivateChannel
]
- await fetch_entitlements(*, limit=100, user=None, guild=None, sku_ids=None, before=None, after=None, exclude_ended=False)
This function is a coroutine.
- Parameters:
limit (
int
) – The maximum amount of entitlements to fetch. Defaults to100
.user (Optional[
User
]) – The user to fetch entitlements for.guild (Optional[
Guild
]) – The guild to fetch entitlements for.sku_ids (Optional[List[
int
]]) – Optional list of SKU IDs to check entitlements forbefore (Optional[Union[
datetime.datetime
,Snowflake
]]) – Retrieve entitlements before this date or object. If a date is provided it must be a timezone-naive datetime representing UTC time.after (Optional[Union[
datetime.datetime
,Snowflake
]]) – Retrieve entitlements after this date or object. If a date is provided it must be a timezone-naive datetime representing UTC time.exclude_ended (
bool
) – Whether ended entitlements should be fetched or not. Defaults toFalse
.
- Returns:
An iterator to fetch all entitlements for the current application.
- Return type:
AsyncIterator
- await fetch_guild(guild_id)
This function is a coroutine.
Retrieves a
Guild
from an ID.Note
Using this, you will not receive
Guild.channels
,Guild.members
,Member.activity
andMember.voice
perMember
.Note
This method is an API call. For general usage, consider
get_guild()
instead.
- fetch_guilds(*, limit=100, before=None, after=None)
Retrieves an
AsyncIterator
that enables receiving your guilds.Note
Using this, you will only receive
Guild.owner
,Guild.icon
,Guild.id
, andGuild.name
perGuild
.Note
This method is an API call. For general usage, consider
guilds
instead.Examples
Usage
async for guild in client.fetch_guilds(limit=150): print(guild.name)
Flattening into a list
guilds = await client.fetch_guilds(limit=150).flatten() # guilds is now a list of Guild...
All parameters are optional.
- Parameters:
limit (Optional[
int
]) – The number of guilds to retrieve. IfNone
, it retrieves every guild you have access to. Note, however, that this would make it a slow operation. Defaults to100
.before (Union[
abc.Snowflake
,datetime.datetime
]) – Retrieves guilds before this date or object. If a date is provided it must be a timezone-naive datetime representing UTC time.after (Union[
abc.Snowflake
,datetime.datetime
]) – Retrieve guilds after this date or object. If a date is provided it must be a timezone-naive datetime representing UTC time.
- Raises:
discord.HTTPException – Getting the guilds failed.
- Yields:
Guild
– The guild with the guild data parsed.
- await fetch_invite(url, *, with_counts=True)
This function is a coroutine.
Gets an
Invite
from a discord.gg URL or ID.Note
If the invite is for a guild you have not joined, the guild and channel attributes of the returned
Invite
will bePartialInviteGuild
andPartialInviteChannel
respectively.- Parameters:
url (Union[
Invite
,str
]) – The Discord invite ID or URL (must be a discord.gg URL).with_counts (
bool
) – Whether to include count information in the invite. This fills theInvite.approximate_member_count
andInvite.approximate_presence_count
fields.
- Raises:
.NotFound – The invite has expired or is invalid.
.HTTPException – Getting the invite failed.
- Returns:
The invite from the URL/ID.
- Return type:
- await fetch_template(code)
This function is a coroutine.
Gets a
Template
from a discord.new URL or code.
- await fetch_user(user_id)
This function is a coroutine.
Retrieves a
User
based on their ID. This can only be used by bot accounts. You do not have to share any guilds with the user to get this information, however many operations do require that you do.Note
This method is an API call. If you have
Intents.members
and member cache enabled, considerget_user()
instead.
- await fetch_voice_regions()
This function is a coroutine.
Returns a list of
VoiceRegionInfo
that can be used when creating or editing aVoiceChannel
orStageChannel
’s region.Note
This method is an API call. For general usage, consider using the
VoiceRegion
enum instead.- Returns:
The voice regions that can be used.
- Return type:
List[
VoiceRegionInfo
]
- await fetch_webhook(webhook_id)
This function is a coroutine.
Retrieves a
Webhook
with the specified ID.- Raises:
.HTTPException – Retrieving the webhook failed.
.NotFound – Invalid webhook ID.
.Forbidden – You do not have permission to fetch this webhook.
- Returns:
The webhook you requested.
- Return type:
- await fetch_widget(guild_id)
This function is a coroutine.
Gets a
Widget
from a guild ID.Note
The guild must have the widget enabled to get this information.
- for ... in get_all_channels()
A generator that retrieves every
abc.GuildChannel
the client can ‘access’.This is equivalent to:
for guild in client.guilds: for channel in guild.channels: yield channel
Note
Just because you receive a
abc.GuildChannel
does not mean that you can communicate in said channel.abc.GuildChannel.permissions_for()
should be used for that.- Yields:
abc.GuildChannel
– A channel the client can ‘access’.
- for ... in get_all_members()
Returns a generator with every
Member
the client can see.This is equivalent to:
for guild in client.guilds: for member in guild.members: yield member
- Yields:
Member
– A member the client can see.
- get_channel(id)
Returns a channel with the given ID.
- Parameters:
id (
int
) – The ID to search for.- Returns:
The returned channel or
None
if not found.- Return type:
Optional[Union[
abc.GuildChannel
,abc.PrivateChannel
]]
- get_command(name)
Get a
Command
from the internal list of commands.This could also be used as a way to get aliases.
The name could be fully qualified (e.g.
'foo bar'
) will get the subcommandbar
of the group commandfoo
. If a subcommand is not found thenNone
is returned just as usual.
- await get_context(message, *, cls=<class 'discord.ext.commands.context.Context'>)
This function is a coroutine.
Returns the invocation context from the message.
This is a more low-level counter-part for
process_commands()
to allow users more fine grained control over the processing.The returned context is not guaranteed to be a valid invocation context,
Context.valid
must be checked to make sure it is. If the context is not valid then it is not a valid candidate to be invoked underinvoke()
.- Parameters:
message (
discord.Message
) – The message to get the invocation context from.cls – The factory class that will be used to create the context. By default, this is
Context
. Should a custom class be provided, it must be similar enough toContext
's interface.
- Returns:
The invocation context. The type of this can change via the
cls
parameter.- Return type:
- get_partial_messageable(id, *, guild_id=None, type=None)
Returns a
PartialMessageable
with the given channel ID. This is useful if you have the ID of a channel but don’t want to do an API call to send messages to it.- Parameters:
id (
int
) – The channel ID to create aPartialMessageable
for.guild_id (Optional[
int
]) – The optional guild ID to create aPartialMessageable
for. This is not required to actually send messages, but it does allow thejump_url()
andguild
properties to function properly.type (Optional[
ChannelType
]) – The underlying channel type for thePartialMessageable
.
- Returns:
The partial messageable created
- Return type:
- await get_prefix(message)
This function is a coroutine.
Retrieves the prefix the bot is listening to with the message as a context.
- Parameters:
message (
discord.Message
) – The message context to get the prefix of.- Returns:
A list of prefixes or a single prefix that the bot is listening for.
- Return type:
- property global_application_commands
Returns a list of all global application commands that are registered for the bot
Note
This requires the bot running and all commands cached, otherwise the list will be empty
- Returns:
A list of registered global application commands for the bot
- Return type:
List[
ApplicationCommand
]
- property guilds
The guilds that the connected client is a member of.
- Type:
List[
Guild
]
- await invoke(ctx)
This function is a coroutine.
Invokes the command given under the invocation context and handles all the internal event dispatch mechanisms.
- Parameters:
ctx (
Context
) – The invocation context to invoke.
- is_closed()
bool
: Indicates if the websocket connection is closed.
- await is_owner(user)
This function is a coroutine.
Checks if a
User
orMember
is the owner of this bot.If an
owner_id
is not set, it is fetched automatically through the use ofapplication_info()
.Changed in version 1.3: The function also checks if the application is team-owned if
owner_ids
is not set.
- is_ready()
bool
: Specifies if the client’s internal cache is ready for use.
- is_ws_ratelimited()
bool
: Whether the websocket is currently rate limited.This can be useful to know when deciding whether you should query members using HTTP or via the gateway.
Added in version 1.6.
- property latency
Measures latency between a HEARTBEAT and a HEARTBEAT_ACK in seconds.
This could be referred to as the Discord WebSocket protocol latency.
- Type:
- load_extension(name, *, package=None)
Loads an extension.
An extension is a python module that contains commands, cogs, or listeners.
An extension must have a global function,
setup
defined as the entry point on what to do when the extension is loaded. This entry point must have a single argument, thebot
.- Parameters:
name (
str
) – The extension name to load. It must be dot separated like regular Python imports if accessing a sub-module. e.g.foo.test
if you want to importfoo/test.py
.package (Optional[
str
]) –The package name to resolve relative imports with. This is required when loading an extension using a relative path, e.g
.foo.test
. Defaults toNone
.Added in version 1.7.
- Raises:
ExtensionNotFound – The extension could not be imported. This is also raised if the name of the extension could not be resolved using the provided
package
parameter.ExtensionAlreadyLoaded – The extension is already loaded.
NoEntryPointError – The extension does not have a setup function.
ExtensionFailed – The extension or its setup function had an execution error.
- await login(token)
This function is a coroutine.
Logs in the client with the specified credentials.
This function can be used in two different ways.
- Parameters:
token (
str
) – The authentication token. Do not prefix this token with anything as the library will do it for you.- Raises:
.LoginFailure – The wrong credentials are passed.
.HTTPException – An unknown HTTP related error occurred, usually when it isn’t 200 or the known incorrect credentials passing status code.
- await logout()
This function is a coroutine.
Logs out of Discord and closes all connections.
Deprecated since version 1.7.
- message_command(name=None, name_localizations=<Localizations: None>, default_required_permissions=None, allow_dm=True, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=False, guild_ids=None)
A decorator that registers a
MessageCommand
(shows up underApps
when right-clicking on a message) to the client. The function this is attached to must be a coroutine.Note
sync_commands
of theClient
instance must be set toTrue
to register a command if it does not already exit and update it if changes where made.- Parameters:
name (Optional[
str
]) – The name of the message-command, default to the functions name. Must be between 1-32 characters long.name_localizations (
Localizations
) – Localizedname
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allow_dm (
bool
) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command , defaultFalse
.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.
- Returns:
The message-command registered.
- Return type:
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine.
- await on_application_command_error(cmd, interaction, exception)
This function is a coroutine.
The default error handler when an Exception was raised when invoking an application-command.
By default this prints to
sys.stderr
however it could be overridden to have a different implementation. Checkon_application_command_error()
for more details.
- on_click(custom_id=None)
A decorator with which you can assign a function to a specific
Button
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_raw_button_click()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]]) –
If the
custom_id
of theButton
could not be used as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘cool blue Button is blue’ will let the function bee invoked too.
Example
# the button Button(label='Hey im a cool blue Button', custom_id='cool blue Button', style=ButtonStyle.blurple) # function that's called when the button pressed @client.on_click(custom_id='^cool blue Button$') async def cool_blue_button(i: discord.ComponentInteraction, button: Button): await i.respond(f'Hey you pressed a {button.custom_id}!', hidden=True)
- Return type:
The decorator for the function called when the button clicked
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- await on_command_error(context, exception)
This function is a coroutine.
The default command error handler provided by the bot.
By default this prints to
sys.stderr
however it could be overridden to have a different implementation.This only fires if you do not specify any listeners for command error.
- await on_error(event_method, *args, **kwargs)
This function is a coroutine.
The default error handler provided by the client.
By default, this prints to
sys.stderr
however it could be overridden to have a different implementation. Checkon_error()
for more details.
- on_select(custom_id=None)
A decorator with which you can assign a function to a specific
SelectMenu
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_raw_selection_select()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]] = None) –
If the custom_id of the
SelectMenu
could not be used as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘choose_your_gender later’ will let the function bee invoked too.
Example
# the SelectMenu SelectMenu(custom_id='choose_your_gender', options=[ SelectOption(label='Female', value='Female', emoji='♀️'), SelectOption(label='Male', value='Male', emoji='♂️'), SelectOption(label='Trans/Non Binary', value='Trans/Non Binary', emoji='⚧') ], placeholder='Choose your Gender') # function that's called when the SelectMenu is used @client.on_select() async def choose_your_gender(i: discord.Interaction, select_menu): await i.respond(f'You selected `{select_menu.values[0]}`!', hidden=True)
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- on_submit(custom_id=None)
A decorator with which you can assign a function to a specific
Modal
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_modal_submit()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]]) –
If the
custom_id
of the modal could not be used as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘suggestions_modal_submit_private’ will let the function bee invoked too.
Examples
# the Modal Modal( title='Create a new suggestion', custom_id='suggestions_modal', components=[...] ) # function that's called when the Modal is submitted @client.on_submit(custom_id='^suggestions_modal$') async def suggestions_modal_callback(i: discord.ModalSubmitInteraction): ... # This can also be done based on the function name @client.on_submit() async def suggestions_modal(i: discord.ModalSubmitInteraction): ...
@client.on_submit(custom_id='^ticket_answer:(?P<id>[0-9]+)$') async def ticket_answer_callback(i: discord.ModalSubmitInteraction): user_id = int(i.match['id']) user = client.get_user(user_id) or await client.fetch_user(user_id)
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- property private_channels
The private channels that the connected client is participating on.
Note
This returns only up to 128 most recent private channels due to an internal working on how Discord deals with private channels.
- Type:
List[
abc.PrivateChannel
]
- await process_commands(message)
This function is a coroutine.
This function processes the commands that have been registered to the bot and other groups. Without this coroutine, none of the commands will be triggered.
By default, this coroutine is called inside the
on_message()
event. If you choose to override theon_message()
event, then you should invoke this coroutine as well.This is built using other low level tools, and is equivalent to a call to
get_context()
followed by a call toinvoke()
.This also checks if the message’s author is a bot and doesn’t call
get_context()
orinvoke()
if so.- Parameters:
message (
discord.Message
) – The message to process commands for.
- reload_extension(name, *, package=None)
Atomically reloads an extension.
This replaces the extension with the same extension, only refreshed. This is equivalent to a
unload_extension()
followed by aload_extension()
except done in an atomic way. That is, if an operation fails mid-reload then the bot will roll-back to the prior working state.- Parameters:
name (
str
) – The extension name to reload. It must be dot separated like regular Python imports if accessing a sub-module. e.g.foo.test
if you want to importfoo/test.py
.package (Optional[
str
]) –The package name to resolve relative imports with. This is required when reloading an extension using a relative path, e.g
.foo.test
. Defaults toNone
.Added in version 1.7.
- Raises:
ExtensionNotLoaded – The extension was not loaded.
ExtensionNotFound – The extension could not be imported. This is also raised if the name of the extension could not be resolved using the provided
package
parameter.NoEntryPointError – The extension does not have a setup function.
ExtensionFailed – The extension setup function had an execution error.
- reload_extensions(*names, package=None)
Same behaviour as
reload_extension()
excepts that it reloads multiple extensions and triggers application commands syncing after all has been reloaded
- remove_application_cmds_from_cog(cog)
Removes all application-commands in the given cog from the internal list of application-commands.
- Parameters:
cog (
Cog
) – The cog which application-commands should be removed from the internal list of application-commands.
- remove_check(func, *, call_once=False)
Removes a global check from the bot.
This function is idempotent and will not raise an exception if the function is not in the global checks.
- Parameters:
func – The function to remove from the global checks.
call_once (
bool
) – If the function was added withcall_once=True
in theBot.add_check()
call or usingcheck_once()
.
- remove_cog(name)
Removes a cog from the bot.
All registered commands and event listeners that the cog has registered will be removed as well.
If no cog is found then this method has no effect.
- Parameters:
name (
str
) – The name of the cog to remove.
- remove_command(name)
Remove a
Command
from the internal list of commands.This could also be used as a way to remove aliases.
- remove_interaction_listener(_type, func)
This removes an interaction(decorator) like
on_click()
oron_select()
from the client listeners.Note
This should not be used directly; it’s used internal when a Cog is un-loaded.
- remove_listener(func, name=None)
Removes a listener from the pool of listeners.
- Parameters:
func – The function that was used as a listener to remove.
name (
str
) – The name of the event we want to remove. Defaults tofunc.__name__
.
- await request_offline_members(*guilds)
This function is a coroutine.
Requests previously offline members from the guild to be filled up into the
Guild.members
cache. This function is usually not called. It should only be used if you have thefetch_offline_members
parameter set toFalse
.When the client logs on and connects to the websocket, Discord does not provide the library with offline members if the number of members in the guild is larger than 250. You can check if a guild is large if
Guild.large
isTrue
.Warning
This method is deprecated. Use
Guild.chunk()
instead.- Parameters:
*guilds (
Guild
) – An argument list of guilds to request offline members for.- Raises:
.InvalidArgument – If any guild is unavailable in the collection.
- run(token, reconnect=True, *, log_handler=MISSING, log_formatter=MISSING, log_level=MISSING, root_logger=False)
A blocking call that abstracts away the event loop initialisation from you.
If you want more control over the event loop then this function should not be used. Use
start()
coroutine orconnect()
+login()
.Roughly Equivalent to:
try: loop.run_until_complete(start(*args, **kwargs)) except KeyboardInterrupt: loop.run_until_complete(close()) # cancel all tasks lingering finally: loop.close()
This function also sets up the :mod:`logging library to make it easier for beginners to know what is going on with the library. For more advanced users, this can be disabled by passing
None
to thelog_handler
parameter.Warning
This function must be the last function to call due to the fact that it is blocking. That means that registration of events or anything being called after this function call will not execute until it returns.
- Parameters:
token (
str
) – The authentication token. Do not prefix this token with anything as the library will do it for you.reconnect (
bool
) – If we should attempt reconnecting, either due to internet failure or a specific failure on Discord’s part. Certain disconnects that lead to bad state will not be handled (such as invalid sharding payloads or bad tokens).log_handler (Optional[
logging.Handler
]) – The log handler to use for the library’s logger. If this isNone
then the library will not set up anything logging related. Logging will still work ifNone
is passed, though it is your responsibility to set it up. The default log handler if not provided islogging.StreamHandler
.log_formatter (
logging.Formatter
) – The formatter to use with the given log handler. If not provided then it defaults to a colour based logging formatter (if available).log_level (
int
) – The default log level for the library’s logger. This is only applied if thelog_handler
parameter is notNone
. Defaults tologging.INFO
.root_logger (
bool
) – Whether to set up the root logger rather than the library logger. By default, only the library logger ('discord'
) is set up. If this is set toTrue
then the root logger is set up as well. Defaults toFalse
.
- slash_command(name=None, name_localizations=<Localizations: None>, description=None, description_localizations=<Localizations: None>, allow_dm=MISSING, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=MISSING, default_required_permissions=None, options=[], guild_ids=None, connector={}, option_descriptions={}, option_descriptions_localizations={}, base_name=None, base_name_localizations=<Localizations: None>, base_desc=None, base_desc_localizations=<Localizations: None>, group_name=None, group_name_localizations=<Localizations: None>, group_desc=None, group_desc_localizations=<Localizations: None>)
A decorator that adds a slash-command to the client. The function this is attached to must be a coroutine.
Warning
sync_commands
of theClient
instance must be set toTrue
to register a command if it does not already exist and update it if changes where made.Note
Any of the following parameters are only needed when the corresponding target was not used before (e.g. there is already a command in the code that has these parameters set) - otherwise it will replace the previous value or update it for iterables.
allow_dm
allowed_contexts
(update)allowed_integration_types
(update)is_nsfw
base_name_localizations
base_desc
base_desc_localizations
group_name_localizations
group_desc
group_desc_localizations
- Parameters:
name (Optional[
str
]) – The name of the command. Must only contain a-z, _ and - and be 1-32 characters long. Default to the functions name.name_localizations (Optional[
Localizations
]) – Localizations object for name field. Values follow the same restrictions asname
description (Optional[
str
]) – The description of the command shows up in the client. Must be between 1-100 characters long. Default to the functions docstring or “No Description”.description_localizations (Optional[
Localizations
]) – Localizations object for description field. Values follow the same restrictions asdescription
allow_dm (Optional[
bool
]) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) –Whether this command is an NSFW command , default
False
.Note
Currently all sub-commands of a command that is marked as NSFW are NSFW too.
default_required_permissions (Optional[
Permissions
]) – Permissions that a Member needs by default to execute(see) the command.options (Optional[List[
SlashCommandOption
]]) – A list of max. 25 options for the command. If not provided the options will be generated usinggenerate_options()
that creates the options out of the function parameters. Required options must be listed before optional ones. Useoptions
to connect non-ascii option names with the parameter of the function.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.connector (Optional[Dict[
str
,str
]]) – A dictionary containing the name of function-parameters as keys and the name of the option as values. Useful for using non-ascii Letters in your option names without getting ide-errors.option_descriptions (Optional[Dict[
str
,str
]]) –Descriptions the
generate_options()
should take for the Options that will be generated. The keys are thename
of the option and the value thedescription
.Note
This will only be used if
options
is not set.option_descriptions_localizations (Optional[Dict[
str
,Localizations
]]) – Localizeddescription
for the options. In the format{'option_name': Localizations(...)}
base_name (Optional[
str
]) – The name of the base-command(a-z, _ and -, 1-32 characters) if you want the command to be in a command-/sub-command-group. If the base-command does not exist yet, it will be added.base_name_localizations (Optional[
Localizations
]) – Localizedbase_name
’s for the command.base_desc (Optional[
str
]) – The description of the base-command(1-100 characters).base_desc_localizations (Optional[
Localizations
]) – Localizedbase_description
’s for the command.group_name (Optional[
str
]) – The name of the command-group(a-z, _ and -, 1-32 characters) if you want the command to be in a sub-command-group.group_name_localizations (Optional[
Localizations
]) – Localizedgroup_name
’s for the command.group_desc (Optional[
str
]) – The description of the sub-command-group(1-100 characters).group_desc_localizations (Optional[
Localizations
]) – Localizedgroup_desc
’s for the command.
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine or a parameter passed to
SlashCommandOption
is invalid for theoption_type
or theoption_type
itself is invalid.InvalidArgument – You passed
group_name
but nobase_name
.ValueError – Any of
name
,description
,options
,base_name
,base_desc
,group_name
orgroup_desc
is not valid.
- Returns:
If neither
guild_ids
norbase_name
passed: An instance ofSlashCommand
.If
guild_ids
and nobase_name
where passed: An instance ofGuildOnlySlashCommand
representing the guild-only slash-commands.If
base_name
and noguild_ids
where passed: An instance ofSubCommand
.If
base_name
andguild_ids
passed: instance ofGuildOnlySubCommand
representing the guild-only sub-commands.
- Return type:
Union[
SlashCommand
,GuildOnlySlashCommand
,SubCommand
,GuildOnlySubCommand
]
- await start(token, reconnect=True)
This function is a coroutine.
A shorthand coroutine for
login()
+connect()
.- Raises:
TypeError – An unexpected keyword argument was received.
- property stickers
The stickers that the connected client has.
- Type:
List[
Sticker
]
- unload_extension(name, *, package=None)
Unloads an extension.
When the extension is unloaded, all commands, listeners, and cogs are removed from the bot and the module is un-imported.
The extension can provide an optional global function,
teardown
, to do miscellaneous clean-up if necessary. This function takes a single parameter, thebot
, similar tosetup
fromload_extension()
.- Parameters:
name (
str
) – The extension name to unload. It must be dot separated like regular Python imports if accessing a sub-module. e.g.foo.test
if you want to importfoo/test.py
.package (Optional[
str
]) –The package name to resolve relative imports with. This is required when unloading an extension using a relative path, e.g
.foo.test
. Defaults toNone
.Added in version 1.7.
- Raises:
ExtensionNotFound – The name of the extension could not be resolved using the provided
package
parameter.ExtensionNotLoaded – The extension was not loaded.
- await update_primary_entry_point_command(name=MISSING, name_localizations=MISSING, description=MISSING, description_localizations=MISSING, default_required_permissions=MISSING, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=MISSING, handler=MISSING)
This function is a coroutine.
Update the :ddocs:`primary entry point command <interactions/application-commands#entry-point-commands>`_ of the application.
If you don’t want to handle the command, set
handler
toEntryPointHandlerType.discord
- Parameters:
name (Optional[
str
]) – The name of the activity command.name_localizations (
Localizations
) – Localizedname
’s.description (Optional[
str
]) – The description of the activity command.description_localizations (
Localizations
) – Localizeddescription
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allowed_contexts (Optional[List[
InteractionContextType
]]) – The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command , defaultFalse
.handler (
EntryPointHandlerType
) – The handler for the primary entry point command. Default toEntryPointHandlerType.discord
, unlessactivity_primary_entry_point_command
is set.
- Returns:
The updated primary entry point command.
- Return type:
ActivityEntryPointCommand
- Raises:
HTTPException – Editing the command failed.
- property user
Represents the connected client.
None
if not logged in.- Type:
Optional[
ClientUser
]
- user_command(name=None, name_localizations=<Localizations: None>, default_required_permissions=None, allow_dm=True, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=False, guild_ids=None)
A decorator that registers a
UserCommand
(shows up underApps
when right-clicking on a user) to the client. The function this is attached to must be a coroutine.Note
sync_commands
of theClient
instance must be set toTrue
to register a command if it does not already exist and update it if changes where made.- Parameters:
name (Optional[
str
]) – The name of the user-command, default to the functions name. Must be between 1-32 characters long.name_localizations (
Localizations
) – Localizedname
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allow_dm (
bool
) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command , defaultFalse
.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.
- Returns:
The user-command registered.
- Return type:
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine.
- property users
Returns a list of all the users the bot can see.
- Type:
List[
User
]
- property voice_clients
Represents a list of voice connections.
These are usually
VoiceClient
instances.- Type:
List[
VoiceProtocol
]
- wait_for(event, *, check=None, timeout=None)
This function is a coroutine.
Waits for a WebSocket event to be dispatched.
This could be used to wait for a user to reply to a message, or to react to a message, or to edit a message in a self-contained way.
The
timeout
parameter is passed ontoasyncio.wait_for()
. By default, it does not timeout. Note that this does propagate theasyncio.TimeoutError
for you in case of timeout and is provided for ease of use.In case the event returns multiple arguments, a
tuple
containing those arguments is returned instead. Please check the documentation for a list of events and their parameters.This function returns the first event that meets the requirements.
Examples
Waiting for a user reply:
@client.event async def on_message(message): if message.content.startswith('$greet'): channel = message.channel await channel.send('Say hello!') def check(m): return m.content == 'hello' and m.channel == channel msg = await client.wait_for('message', check=check) await channel.send('Hello {.author}!'.format(msg))
Waiting for a thumbs up reaction from the message author:
@client.event async def on_message(message): if message.content.startswith('$thumb'): channel = message.channel await channel.send('Send me that 👍 reaction, mate') def check(reaction, user): return user == message.author and str(reaction.emoji) == '👍' try: reaction, user = await client.wait_for('reaction_add', timeout=60.0, check=check) except asyncio.TimeoutError: await channel.send('👎') else: await channel.send('👍')
- Parameters:
event (
str
) – The event name, similar to the event reference, but without theon_
prefix, to wait for.check (Optional[Callable[…,
bool
]]) – A predicate to check what to wait for. The arguments must meet the parameters of the event being waited for.timeout (Optional[
float
]) – The number of seconds to wait before timing out and raisingasyncio.TimeoutError
.
- Raises:
asyncio.TimeoutError – If a timeout is provided, and it was reached.
- Returns:
Returns no arguments, a single argument, or a
tuple
of multiple arguments that mirrors the parameters passed in the event reference.- Return type:
Any
- await wait_until_ready()
This function is a coroutine.
Waits until the client’s internal cache is all ready.
AutoShardedBot
- class discord.ext.commands.AutoShardedBot(command_prefix, help_command=<default-help-command>, description=None, **options)
Bases:
BotBase
,AutoShardedClient
This is similar to
Bot
except that it is inherited fromdiscord.AutoShardedClient
instead.
Prefix Helpers
- discord.ext.commands.when_mentioned(bot, msg)
A callable that implements a command prefix equivalent to being mentioned.
These are meant to be passed into the
Bot.command_prefix
attribute.
- discord.ext.commands.when_mentioned_or(*prefixes)
A callable that implements when mentioned or other prefixes provided.
These are meant to be passed into the
Bot.command_prefix
attribute.Example
bot = commands.Bot(command_prefix=commands.when_mentioned_or('!'))
Note
This callable returns another callable, so if this is done inside a custom callable, you must call the returned callable, for example:
async def get_prefix(bot, message): extras = await prefixes_for(message.guild) # returns a list return commands.when_mentioned_or(*extras)(bot, message)
See also
Event Reference
These events function similar to the regular events, except they are custom to the command extension module.
- discord.on_command_error(ctx, error)
An error handler that is called when an error is raised inside a command either through user input error, check failure, or an error in your own code.
A default one is provided (
Bot.on_command_error()
).- Parameters:
ctx (
Context
) – The invocation context.error (
CommandError
derived) – The error that was raised.
- discord.on_command(ctx)
An event that is called when a command is found and is about to be invoked.
This event is called regardless of whether the command itself succeeds via error or completes.
- Parameters:
ctx (
Context
) – The invocation context.
- discord.on_command_completion(ctx)
An event that is called when a command has completed its invocation.
This event is called only if the command succeeded, i.e. all checks have passed and the user input it correctly.
- Parameters:
ctx (
Context
) – The invocation context.
Commands
Decorators
- discord.ext.commands.command(name=None, cls=None, **attrs)
A decorator that transforms a function into a
Command
or if called withgroup()
,Group
.By default the
help
attribute is received automatically from the docstring of the function and is cleaned up with the use ofinspect.cleandoc
. If the docstring isbytes
, then it is decoded intostr
using utf-8 encoding.All checks added using the
check()
& co. decorators are added into the function. There is no way to supply your own checks through this decorator.- Parameters:
- Raises:
TypeError – If the function is not a coroutine or is already a command.
Command
- async__call__
- defadd_check
- @after_invoke
- @before_invoke
- asynccan_run
- defcopy
- @error
- defget_cooldown_retry_after
- defhas_error_handler
- defis_on_cooldown
- defremove_check
- defreset_cooldown
- defupdate
- class discord.ext.commands.Command(*args, **kwargs)
Bases:
_BaseCommand
A class that implements the protocol for a bot text command.
These are not created manually, instead they are created via the decorator or functional interface.
- brief
The short help text for the command.
- Type:
Optional[
str
]
- usage
A replacement for arguments in the default help text.
- Type:
Optional[
str
]
- enabled
A boolean that indicates if the command is currently enabled. If the command is invoked while it is disabled, then
DisabledCommand
is raised to theon_command_error()
event. Defaults toTrue
.- Type:
- parent
The parent command that this command belongs to.
None
if there isn’t one.- Type:
Optional[
Command
]
- cog
The cog that this command belongs to.
None
if there isn’t one.- Type:
Optional[
Cog
]
- checks
A list of predicates that verifies if the command could be executed with the given
Context
as the sole parameter. If an exception is necessary to be thrown to signal failure, then one inherited fromCommandError
should be used. Note that if the checks fail thenCheckFailure
exception is raised to theon_command_error()
event.
If
True
, the default help command does not show this in the help output.- Type:
- rest_is_raw
If
False
and a keyword-only argument is provided then the keyword only argument is stripped and handled as if it was a regular argument that handlesMissingRequiredArgument
and default values in a regular matter rather than passing the rest completely raw. IfTrue
then the keyword-only argument will pass in the rest of the arguments in a completely raw matter. Defaults toFalse
.- Type:
- invoked_subcommand
The subcommand that was invoked, if any.
- Type:
Optional[
Command
]
- require_var_positional
If
True
and a variadic positional argument is specified, requires the user to specify at least one argument. Defaults toFalse
.Added in version 1.5.
- Type:
- ignore_extra
If
True
, ignores extraneous strings passed to a command if all its requirements are met (e.g.?foo a b c
when only expectinga
andb
). Otherwiseon_command_error()
and local error handlers are called withTooManyArguments
. Defaults toTrue
.- Type:
- cooldown_after_parsing
If
True
, cooldown processing is done after argument parsing, which calls converters. IfFalse
then cooldown processing is done first and then the converters are called second. Defaults toFalse
.- Type:
- x()
This function is a coroutine.
Calls the internal callback that the command holds.
This bypasses all mechanisms – including checks, converters, invoke hooks, cooldowns, etc. You must take care to pass the proper arguments and types to this function.
Added in version 1.3.
- add_check(func)
Adds a check to the command.
This is the non-decorator interface to
check()
.Added in version 1.3.
- Parameters:
func – The function that will be used as a check.
- remove_check(func)
Removes a check from the command.
This function is idempotent and will not raise an exception if the function is not in the command’s checks.
Added in version 1.3.
- Parameters:
func – The function to remove from the checks.
- update(**kwargs)
Updates
Command
instance with updated attribute.This works similarly to the
command()
decorator in terms of parameters in that they are passed to theCommand
or subclass constructors, sans the name and callback.
- await __call__(*args, **kwargs)
This function is a coroutine.
Calls the internal callback that the command holds.
Note
This bypasses all mechanisms – including checks, converters, invoke hooks, cooldowns, etc. You must take care to pass the proper arguments and types to this function.
Added in version 1.3.
- property clean_params
OrderedDict[
str
,inspect.Parameter
]: Retrieves the parameter OrderedDict without the context or self parameters.Useful for inspecting signature.
- property full_parent_name
Retrieves the fully qualified parent command name.
This the base command name required to execute it. For example, in
?one two three
the parent name would beone two
.- Type:
- property parents
Retrieves the parents of this command.
If the command has no parents then it returns an empty
list
.For example in commands
?a b c test
, the parents are[c, b, a]
.Added in version 1.1.
- Type:
List[
Command
]
- property root_parent
Retrieves the root parent of this command.
If the command has no parents then it returns
None
.For example in commands
?a b c test
, the root parent isa
.- Type:
Optional[
Command
]
- property qualified_name
Retrieves the fully qualified command name.
This is the full parent name with the command name as well. For example, in
?one two three
the qualified name would beone two three
.- Type:
- reset_cooldown(ctx)
Resets the cooldown on this command.
- Parameters:
ctx (
Context
) – The invocation context to reset the cooldown under.
- get_cooldown_retry_after(ctx)
Retrieves the amount of seconds before this command can be tried again.
Added in version 1.4.
- error(coro)
A decorator that registers a coroutine as a local error handler.
A local error handler is an
on_command_error()
event limited to a single command. However, theon_command_error()
is still invoked afterwards as the catch-all.
- has_error_handler()
bool
: Checks whether the command has an error handler registered.Added in version 1.7.
- before_invoke(coro)
A decorator that registers a coroutine as a pre-invoke hook.
A pre-invoke hook is called directly before the command is called. This makes it a useful function to set up database connections or any type of set up required.
This pre-invoke hook takes a sole parameter, a
Context
.See
Bot.before_invoke()
for more info.
- after_invoke(coro)
A decorator that registers a coroutine as a post-invoke hook.
A post-invoke hook is called directly after the command is called. This makes it a useful function to clean-up database connections or any type of clean up required.
This post-invoke hook takes a sole parameter, a
Context
.See
Bot.after_invoke()
for more info.
- property cog_name
The name of the cog this command belongs to, if any.
- Type:
Optional[
str
]
- property short_doc
Gets the “short” documentation of a command.
By default, this is the
brief
attribute. If that lookup leads to an empty string then the first line of thehelp
attribute is used instead.- Type:
- await can_run(ctx)
This function is a coroutine.
Checks if the command can be executed by checking all the predicates inside the
checks
attribute. This also checks whether the command is disabled.Changed in version 1.3: Checks whether the command is disabled or not
- Parameters:
ctx (
Context
) – The ctx of the command currently being invoked.- Raises:
CommandError – Any command error that was raised during a check call will be propagated by this function.
- Returns:
A boolean indicating if the command can be invoked.
- Return type:
Group
- defadd_check
- defadd_command
- defadd_commands
- @after_invoke
- @before_invoke
- asynccan_run
- @command
- defcopy
- @error
- defget_command
- defget_cooldown_retry_after
- @group
- defhas_error_handler
- defis_on_cooldown
- defremove_check
- defremove_command
- defreset_cooldown
- defupdate
- defwalk_commands
- class discord.ext.commands.Group(*args, **kwargs)
Bases:
GroupMixin
,Command
A class that implements a grouping protocol for commands to be executed as subcommands.
This class is a subclass of
Command
and thus all options valid inCommand
are valid in here as well.- invoke_without_command
Indicates if the group callback should begin parsing and invocation only if no subcommand was found. Useful for making it an error handling function to tell the user that no subcommand was found or to have different functionality in case no subcommand was found. If this is
False
, then the group callback will always be invoked first. This means that the checks and the parsing dictated by its parameters will be executed. Defaults toFalse
.- Type:
- case_insensitive
Indicates if the group’s commands should be case insensitive. Defaults to
False
.- Type:
- x()
This function is a coroutine.
Calls the internal callback that the command holds.
This bypasses all mechanisms – including checks, converters, invoke hooks, cooldowns, etc. You must take care to pass the proper arguments and types to this function.
Added in version 1.3.
- add_check(func)
Adds a check to the command.
This is the non-decorator interface to
check()
.Added in version 1.3.
- Parameters:
func – The function that will be used as a check.
- add_command(command)
Adds a
Command
into the internal list of commands.This is usually not called, instead the
command()
orgroup()
shortcut decorators are used instead.Changed in version 1.4: Raise
CommandRegistrationError
instead of genericClientException
- add_commands(*commands)
Similar to
add_command()
but you can pass multiple commands at once.
- after_invoke(coro)
A decorator that registers a coroutine as a post-invoke hook.
A post-invoke hook is called directly after the command is called. This makes it a useful function to clean-up database connections or any type of clean up required.
This post-invoke hook takes a sole parameter, a
Context
.See
Bot.after_invoke()
for more info.
- before_invoke(coro)
A decorator that registers a coroutine as a pre-invoke hook.
A pre-invoke hook is called directly before the command is called. This makes it a useful function to set up database connections or any type of set up required.
This pre-invoke hook takes a sole parameter, a
Context
.See
Bot.before_invoke()
for more info.
- await can_run(ctx)
This function is a coroutine.
Checks if the command can be executed by checking all the predicates inside the
checks
attribute. This also checks whether the command is disabled.Changed in version 1.3: Checks whether the command is disabled or not
- Parameters:
ctx (
Context
) – The ctx of the command currently being invoked.- Raises:
CommandError – Any command error that was raised during a check call will be propagated by this function.
- Returns:
A boolean indicating if the command can be invoked.
- Return type:
- property clean_params
OrderedDict[
str
,inspect.Parameter
]: Retrieves the parameter OrderedDict without the context or self parameters.Useful for inspecting signature.
- property cog_name
The name of the cog this command belongs to, if any.
- Type:
Optional[
str
]
- command(*args, **kwargs)
A shortcut decorator that invokes
command()
and adds it to the internal command list viaadd_command()
.- Returns:
A decorator that converts the provided method into a Command, adds it to the bot, then returns it.
- Return type:
Callable[…,
Command
]
- property commands
A unique set of commands without aliases that are registered.
- Type:
Set[
Command
]
- error(coro)
A decorator that registers a coroutine as a local error handler.
A local error handler is an
on_command_error()
event limited to a single command. However, theon_command_error()
is still invoked afterwards as the catch-all.
- property full_parent_name
Retrieves the fully qualified parent command name.
This the base command name required to execute it. For example, in
?one two three
the parent name would beone two
.- Type:
- get_command(name)
Get a
Command
from the internal list of commands.This could also be used as a way to get aliases.
The name could be fully qualified (e.g.
'foo bar'
) will get the subcommandbar
of the group commandfoo
. If a subcommand is not found thenNone
is returned just as usual.
- get_cooldown_retry_after(ctx)
Retrieves the amount of seconds before this command can be tried again.
Added in version 1.4.
- group(*args, **kwargs)
A shortcut decorator that invokes
group()
and adds it to the internal command list viaadd_command()
.- Returns:
A decorator that converts the provided method into a Group, adds it to the bot, then returns it.
- Return type:
Callable[…,
Group
]
- has_error_handler()
bool
: Checks whether the command has an error handler registered.Added in version 1.7.
- property parents
Retrieves the parents of this command.
If the command has no parents then it returns an empty
list
.For example in commands
?a b c test
, the parents are[c, b, a]
.Added in version 1.1.
- Type:
List[
Command
]
- property qualified_name
Retrieves the fully qualified command name.
This is the full parent name with the command name as well. For example, in
?one two three
the qualified name would beone two three
.- Type:
- remove_check(func)
Removes a check from the command.
This function is idempotent and will not raise an exception if the function is not in the command’s checks.
Added in version 1.3.
- Parameters:
func – The function to remove from the checks.
- remove_command(name)
Remove a
Command
from the internal list of commands.This could also be used as a way to remove aliases.
- reset_cooldown(ctx)
Resets the cooldown on this command.
- Parameters:
ctx (
Context
) – The invocation context to reset the cooldown under.
- property root_parent
Retrieves the root parent of this command.
If the command has no parents then it returns
None
.For example in commands
?a b c test
, the root parent isa
.- Type:
Optional[
Command
]
- property short_doc
Gets the “short” documentation of a command.
By default, this is the
brief
attribute. If that lookup leads to an empty string then the first line of thehelp
attribute is used instead.- Type:
GroupMixin
- defadd_command
- defadd_commands
- @command
- defget_command
- @group
- defremove_command
- defwalk_commands
- class discord.ext.commands.GroupMixin(*args, **kwargs)
Bases:
object
A mixin that implements common functionality for classes that behave similar to
Group
and are allowed to register commands.- property commands
A unique set of commands without aliases that are registered.
- Type:
Set[
Command
]
- add_command(command)
Adds a
Command
into the internal list of commands.This is usually not called, instead the
command()
orgroup()
shortcut decorators are used instead.Changed in version 1.4: Raise
CommandRegistrationError
instead of genericClientException
- add_commands(*commands)
Similar to
add_command()
but you can pass multiple commands at once.
- remove_command(name)
Remove a
Command
from the internal list of commands.This could also be used as a way to remove aliases.
- for ... in walk_commands()
An iterator that recursively walks through all commands and subcommands.
Changed in version 1.4: Duplicates due to aliases are no longer returned
- get_command(name)
Get a
Command
from the internal list of commands.This could also be used as a way to get aliases.
The name could be fully qualified (e.g.
'foo bar'
) will get the subcommandbar
of the group commandfoo
. If a subcommand is not found thenNone
is returned just as usual.
- command(*args, **kwargs)
A shortcut decorator that invokes
command()
and adds it to the internal command list viaadd_command()
.- Returns:
A decorator that converts the provided method into a Command, adds it to the bot, then returns it.
- Return type:
Callable[…,
Command
]
- group(*args, **kwargs)
A shortcut decorator that invokes
group()
and adds it to the internal command list viaadd_command()
.- Returns:
A decorator that converts the provided method into a Group, adds it to the bot, then returns it.
- Return type:
Callable[…,
Group
]
Cogs
Cog
- clsCog.listener
- clsCog.message_command
- clsCog.on_click
- clsCog.on_select
- clsCog.on_submit
- clsCog.slash_command
- clsCog.user_command
- defbot_check
- defbot_check_once
- asynccog_after_invoke
- asynccog_application_command_error
- asynccog_before_invoke
- defcog_check
- asynccog_command_error
- defcog_unload
- defget_commands
- defget_listeners
- defhas_error_handler
- defwalk_commands
- class discord.ext.commands.Cog(*args, **kwargs)
Bases:
object
The base class that all cogs must inherit from.
A cog is a collection of commands, listeners, and optional state to help group commands together. More information on them can be found on the Cogs page.
When inheriting from this class, the options shown in
CogMeta
are equally valid here.- classmethod @listener(name=None)
A decorator that marks a function as a listener.
This is the cog equivalent of
Bot.listen()
.
- classmethod @slash_command(name=None, name_localizations=<Localizations: None>, description=None, description_localizations=<Localizations: None>, allow_dm=True, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=MISSING, default_required_permissions=None, options=[], guild_ids=None, connector={}, option_descriptions={}, option_descriptions_localizations={}, base_name=None, base_name_localizations=<Localizations: None>, base_desc=None, base_desc_localizations=<Localizations: None>, group_name=None, group_name_localizations=<Localizations: None>, group_desc=None, group_desc_localizations=<Localizations: None>)
A decorator that adds a slash-command to the client. The method this is attached to must be a coroutine.
Note
sync_commands
of theBot
instance must be set toTrue
to register a command if it does not already exist and update it if changes where made.Note
Any of the following parameters are only needed when the corresponding target was not used before (e.g. there is already a command in the code that has these parameters set) - otherwise it will replace the previous value or update it for iterables:
allow_dm
allowed_contexts
(update)allowed_integration_types
(update)is_nsfw
base_name_localizations
base_desc
base_desc_localizations
group_name_localizations
group_desc
group_desc_localizations
- Parameters:
name (Optional[
str
]) – The name of the command. Must only contain a-z, _ and - and be 1-32 characters long. Default to the functions name.name_localizations (Optional[
Localizations
]) – Localizations object for name field. Values follow the same restrictions asname
description (Optional[
str
]) – The description of the command shows up in the client. Must be between 1-100 characters long. Default to the functions docstring or “No Description”.description_localizations (Optional[
Localizations
]) – Localizations object for description field. Values follow the same restrictions asdescription
allow_dm (Optional[
bool
]) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) –Whether this command is an NSFW command , default
False
.Note
Currently all sub-commands of a command that is marked as NSFW are NSFW too.
default_required_permissions (Optional[
Permissions
]) – Permissions that a Member needs by default to execute(see) the command.options (Optional[List[
SlashCommandOption
]]) – A list of max. 25 options for the command. If not provided the options will be generated usinggenerate_options()
that creates the options out of the function parameters. Required options must be listed before optional ones. Use theconnector
parameter to connect non-ascii option names with the parameter of the function.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.connector (Optional[Dict[
str
,str
]]) – A dictionary containing the name of function-parameters as keys and the name of the option as values. Useful for using non-ascii Letters in your option names without getting ide-errors.option_descriptions (Optional[Dict[
str
,str
]]) –Descriptions the
generate_options()
should take for the Options that will be generated. The keys are thename
of the option and the value thedescription
.Note
This will only be used if
options
is not set.option_descriptions_localizations (Optional[Dict[
str
,Localizations
]]) – Localizeddescription
for the options. In the format{'option_name': Localizations(...)}
base_name (Optional[
str
]) – The name of the base-command(a-z, _ and -, 1-32 characters) if you want the command to be in a command-/sub-command-group. If the base-command does not exist yet, it will be added.base_name_localizations (Optional[
Localizations
]) – Localizedbase_name
’s for the command.base_desc (Optional[
str
]) – The description of the base-command(1-100 characters).base_desc_localizations (Optional[
Localizations
]) – Localizedbase_description
’s for the command.group_name (Optional[
str
]) – The name of the command-group(a-z, _ and -, 1-32 characters) if you want the command to be in a sub-command-group.group_name_localizations (Optional[
Localizations
]) – Localizedgroup_name
’s for the command.group_desc (Optional[
str
]) – The description of the sub-command-group(1-100 characters).group_desc_localizations (Optional[
Localizations
]) – Localizedgroup_desc
’s for the command.
- Raises:
TypeError – The function the decorator is attached to is not actual a coroutine or a parameter passed to
SlashCommandOption
is invalid for theoption_type
or theoption_type
itself is invalid.InvalidArgument – You passed
group_name
but nobase_name
.ValueError – Any of
name
,description
,options
,base_name
,base_desc
,group_name
orgroup_desc
is not valid.
- Returns:
If neither
guild_ids
norbase_name
passed: An instance ofSlashCommand
.If
guild_ids
and nobase_name
where passed: An instance ofGuildOnlySlashCommand
representing the guild-only slash-commands.If
base_name
and noguild_ids
where passed: An instance ofSubCommand
.If
base_name
andguild_ids
passed: instance ofGuildOnlySubCommand
representing the guild-only sub-commands.
- Return type:
The slash-command registered.
- classmethod @message_command(name=None, name_localizations=<Localizations: None>, default_required_permissions=None, allow_dm=True, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=False, guild_ids=None)
A decorator that registers a
MessageCommand
(shows up underApps
when right-clicking on a message) to the client. The function this is attached to must be a coroutine.Note
sync_commands
of theBot
instance must be set toTrue
to register a command if it does not already exist and update it if changes where made.- Parameters:
name (Optional[
str
]) – The name of the message-command, default to the functions name. Must be between 1-32 characters long.name_localizations (
Localizations
) – Localizedname
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allow_dm (
bool
) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command , defaultFalse
.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.
- Returns:
The message-command registered.
- Return type:
- Raises:
TypeError: – The function the decorator is attached to is not actual a coroutine.
- classmethod @user_command(name=None, name_localizations=<Localizations: None>, default_required_permissions=None, allow_dm=True, allowed_contexts=MISSING, allowed_integration_types=MISSING, is_nsfw=False, guild_ids=None)
A decorator that registers a
UserCommand
(shows up underApps
when right-clicking on a user) to the client. The function this is attached to must be a coroutine.Note
sync_commands
of theBot
instance must be set toTrue
to register a command if he not already exists and update him if changes where made.- Parameters:
name (Optional[
str
]) – The name of the user-command, default to the functions name. Must be between 1-32 characters long.name_localizations (
Localizations
) – Localizedname
’s.default_required_permissions (Optional[
Permissions
]) – Permissions that a member needs by default to execute(see) the command.allow_dm (
bool
) – Deprecated: Useallowed_contexts
instead. Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.allowed_contexts (Optional[List[
InteractionContextType
]]) – global commands only: The contexts in which the command is available. By default, commands are available in all contexts.allowed_integration_types (Optional[List[
AppIntegrationType
]]) – global commands only: The types of app integrations where the command is available. Default to the app’s configured integration typesis_nsfw (
bool
) – Whether this command is an NSFW command , defaultFalse
.guild_ids (Optional[List[
int
]]) – ID’s of guilds this command should be registered in. If empty, the command will be global.
- Returns:
The user-command registered.
- Return type:
- Raises:
TypeError: – The function the decorator is attached to is not actual a coroutine.
- classmethod @on_click(custom_id=None)
A decorator with which you can assign a function to a specific
Button
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_raw_button_click()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]]) –
If the
custom_id
of thediscord.Button
could not use as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘cool blue Button is blue’ will let the function bee invoked too.
Example
# the button Button(label='Hey im a cool blue Button', custom_id='cool blue Button', style=ButtonStyle.blurple) # function that's called when the button pressed @command.Cog.on_click(custom_id='cool blue Button') async def cool_blue_button(self, i: discord.ComponentInteraction, button): await i.respond(f'Hey you pressed a `{button.custom_id}`!', hidden=True)
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- classmethod @on_select(custom_id=None)
A decorator with which you can assign a function to a specific
SelectMenu
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_raw_selection_select()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]]) –
If the
custom_id
of theSelectMenu
could not use as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘choose_your_gender later’ will let the function bee invoked too.
Example
# the SelectMenu SelectMenu(custom_id='choose_your_gender', options=[ select_option(label='Female', value='Female', emoji='♀️'), select_option(label='Male', value='Male', emoji='♂️'), select_option(label='Trans/Non Binary', value='Trans/Non Binary', emoji='⚧') ], placeholder='Choose your Gender') # function that's called when the SelectMenu is used @commands.Cog.on_select() async def choose_your_gender(self, i: discord.ComponentInteraction, select_menu): await i.respond(f'You selected `{select_menu.values[0]}`!', hidden=True)
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- classmethod @on_submit(custom_id=None)
A decorator with which you can assign a function to a specific
Modal
(or its custom_id).Important
The function this is attached to must take the same parameters as a
on_modal_submit()
event.Warning
The func must be a coroutine, if not,
TypeError
is raised.- Parameters:
custom_id (Optional[Union[Pattern[AnyStr], AnyStr]]) –
If the
custom_id
of the modal could not use as a function name, or you want to give the function a different name then the custom_id use this one to set the custom_id. You can also specify a regex and if the custom_id matches it, the function will be executed.Note
As the
custom_id
is converted to a Pattern put^
in front and$
at the end of thecustom_id
if you want that the custom_id must exactly match the specified value. Otherwise, something like ‘suggestions_modal_submit_private’ will let the function bee invoked too.
Example
# the Modal Modal(title='Create a new suggestion', custom_id='suggestions_modal', components=[...]) # function that's called when the Modal is submitted @commands.Cog.on_submit(custom_id='^suggestions_modal$') async def suggestions_modal_callback(self, i: discord.ModalSubmitInteraction): ... # You can also use a more advanced RegEx containing groups to easily allow dynamic id's @commands.Cog.on_submit(custom_id='^ticket_answer:(?P<id>[0-9]+)$') async def ticket_answer_callback(i: discord.ModalSubmitInteraction): user_id = int(i.match['id']) user = client.get_user(user_id) or await client.fetch_user(user_id)
- Raises:
TypeError – The coroutine passed is not actually a coroutine.
- for ... in walk_commands()
An iterator that recursively walks through this cog’s commands and subcommands.
- get_listeners()
Returns a
list
of (name, function) listener pairs that are defined in this cog.
- has_error_handler()
bool
: Checks whether the cog has an error handler.Added in version 1.7.
- cog_unload()
A special method that is called when the cog gets removed.
This function cannot be a coroutine. It must be a regular function.
Subclasses must replace this if they want special unloading behaviour.
- bot_check_once(ctx)
A special method that registers as a
Bot.check_once()
check.This function can be a coroutine and must take a sole parameter,
ctx
, to represent theContext
.
- bot_check(ctx)
A special method that registers as a
Bot.check()
check.This function can be a coroutine and must take a sole parameter,
ctx
, to represent theContext
.
- cog_check(ctx)
A special method that registers as a
commands.check()
for every command and subcommand in this cog.This function can be a coroutine and must take a sole parameter,
ctx
, to represent theContext
.
- await cog_command_error(ctx, error)
A special method that is called whenever an error is dispatched inside this cog.
This is similar to
on_command_error()
except only applying to the commands inside this cog.This must be a coroutine.
- Parameters:
ctx (
Context
) – The invocation context where the error happened.error (
CommandError
) – The error that happened.
- await cog_before_invoke(ctx)
A special method that acts as a cog local pre-invoke hook.
This is similar to
Command.before_invoke()
.This must be a coroutine.
- Parameters:
ctx (
Context
) – The invocation context.
- await cog_after_invoke(ctx)
A special method that acts as a cog local post-invoke hook.
This is similar to
Command.after_invoke()
.This must be a coroutine.
- Parameters:
ctx (
Context
) – The invocation context.
- await cog_application_command_error(cmd, interaction, error)
A special method that is called whenever an error
is dispatched inside this cog.
This is similar to
on_application_command_error()
except only applying to the application-commands inside this cog.This must be a coroutine.
- Parameters:
cmd (Union[
SlashCommand
,SubCommand
]) – The invoked command.interaction (
discord.ApplicationCommandInteraction
) – The interaction.error (
Exception
) – The error that happened.
CogMeta
- class discord.ext.commands.CogMeta(*args, **kwargs)
Bases:
type
A metaclass for defining a cog.
Note that you should probably not use this directly. It is exposed purely for documentation purposes along with making custom metaclasses to intermix with other metaclasses such as the
abc.ABCMeta
metaclass.For example, to create an abstract cog mixin class, the following would be done.
import abc class CogABCMeta(commands.CogMeta, abc.ABCMeta): pass class SomeMixin(metaclass=abc.ABCMeta): pass class SomeCogMixin(SomeMixin, commands.Cog, metaclass=CogABCMeta): pass
Note
When passing an attribute of a metaclass that is documented below, note that you must pass it as a keyword-only argument to the class creation like the following example:
class MyCog(commands.Cog, name='My Cog'): pass
- description
The cog description. By default, it is the cleaned docstring of the class.
Added in version 1.6.
- Type:
- command_attrs
A list of attributes to apply to every command inside this cog. The dictionary is passed into the
Command
options at__init__
. If you specify attributes inside the command attribute in the class, it will override the one specified inside this attribute. For example:class MyCog(commands.Cog, command_attrs=dict(hidden=True)): @commands.command() async def foo(self, ctx): pass # hidden -> True @commands.command(hidden=False) async def bar(self, ctx): pass # hidden -> False
- Type:
Help Commands
HelpCommand
- defadd_check
- asynccommand_callback
- defcommand_not_found
- asyncfilter_commands
- defget_bot_mapping
- defget_command_signature
- defget_destination
- defget_max_size
- asyncon_help_command_error
- asyncprepare_help_command
- defremove_check
- defremove_mentions
- asyncsend_bot_help
- asyncsend_cog_help
- asyncsend_command_help
- asyncsend_error_message
- asyncsend_group_help
- defsubcommand_not_found
- class discord.ext.commands.HelpCommand(*args, **kwargs)
Bases:
object
The base implementation for help command formatting.
Note
Internally instances of this class are deep copied every time the command itself is invoked to prevent a race condition mentioned in GH-2123.
This means that relying on the state of this class to be the same between command invocations would not work as expected.
- context
The context that invoked this help formatter. This is generally set after the help command assigned,
command_callback()
, has been called.- Type:
Optional[
Context
]
Specifies if hidden commands should be shown in the output. Defaults to
False
.- Type:
- verify_checks
Specifies if commands should have their
Command.checks
called and verified. IfTrue
, always callsCommands.checks
. IfNone
, only callsCommands.checks
in a guild setting. IfFalse
, never callsCommands.checks
. Defaults toTrue
.Changed in version 1.7.
- Type:
Optional[
bool
]
- command_attrs
A dictionary of options to pass in for the construction of the help command. This allows you to change the command behaviour without actually changing the implementation of the command. The attributes will be the same as the ones passed in the
Command
constructor.- Type:
- add_check(func)
Adds a check to the help command.
Added in version 1.4.
- Parameters:
func – The function that will be used as a check.
- remove_check(func)
Removes a check from the help command.
This function is idempotent and will not raise an exception if the function is not in the command’s checks.
Added in version 1.4.
- Parameters:
func – The function to remove from the checks.
- get_bot_mapping()
Retrieves the bot mapping passed to
send_bot_help()
.
- property invoked_with
Similar to
Context.invoked_with
except properly handles the case whereContext.send_help()
is used.If the help command was used regularly then this returns the
Context.invoked_with
attribute. Otherwise, if it the help command was called usingContext.send_help()
then it returns the internal command name of the help command.- Returns:
The command name that triggered this invocation.
- Return type:
- remove_mentions(string)
Removes mentions from the string to prevent abuse.
This includes
@everyone
,@here
, member mentions and role mentions.- Returns:
The string with mentions removed.
- Return type:
- property cog
A property for retrieving or setting the cog for the help command.
When a cog is set for the help command, it is as-if the help command belongs to that cog. All cog special methods will apply to the help command and it will be automatically unset on unload.
To unbind the cog from the help command, you can set it to
None
.- Returns:
The cog that is currently set for the help command.
- Return type:
Optional[
Cog
]
- command_not_found(string)
This function could be a coroutine.
A method called when a command is not found in the help command. This is useful to override for i18n.
Defaults to
No command called {0} found.
- subcommand_not_found(command, string)
This function could be a coroutine.
A method called when a command did not have a subcommand requested in the help command. This is useful to override for i18n.
Defaults to either:
'Command "{command.qualified_name}" has no subcommands.'
If there is no subcommand in the
command
parameter.
'Command "{command.qualified_name}" has no subcommand named {string}'
If the
command
parameter has subcommands but not one namedstring
.
- Parameters:
- Returns:
The string to use when the command did not have the subcommand requested.
- Return type:
- await filter_commands(commands, *, sort=False, key=None)
This function is a coroutine.
Returns a filtered list of commands and optionally sorts them.
This takes into account the
verify_checks
andshow_hidden
attributes.- Parameters:
commands (Iterable[
Command
]) – An iterable of commands that are getting filtered.sort (
bool
) – Whether to sort the result.key (Optional[Callable[
Command
, Any]]) – An optional key function to pass tosorted()
that takes aCommand
as its sole parameter. Ifsort
is passed asTrue
then this will default as the command name.
- Returns:
A list of commands that passed the filter.
- Return type:
List[
Command
]
- get_destination()
Returns the
Messageable
where the help command will be output.You can override this method to customise the behaviour.
By default this returns the context’s channel.
- Returns:
The destination where the help command will be output.
- Return type:
- await send_error_message(error)
This function is a coroutine.
Handles the implementation when an error happens in the help command. For example, the result of
command_not_found()
orcommand_has_no_subcommand_found()
will be passed here.You can override this method to customise the behaviour.
By default, this sends the error message to the destination specified by
get_destination()
.Note
You can access the invocation context with
HelpCommand.context
.- Parameters:
error (
str
) – The error message to display to the user. Note that this has had mentions removed to prevent abuse.
- await on_help_command_error(ctx, error)
This function is a coroutine.
The help command’s error handler, as specified by Error Handling.
Useful to override if you need some specific behaviour when the error handler is called.
By default this method does nothing and just propagates to the default error handlers.
- Parameters:
ctx (
Context
) – The invocation context.error (
CommandError
) – The error that was raised.
- await send_bot_help(mapping)
This function is a coroutine.
Handles the implementation of the bot command page in the help command. This function is called when the help command is called with no arguments.
It should be noted that this method does not return anything – rather the actual message sending should be done inside this method. Well behaved subclasses should use
get_destination()
to know where to send, as this is a customisation point for other users.You can override this method to customise the behaviour.
Note
You can access the invocation context with
HelpCommand.context
.Also, the commands in the mapping are not filtered. To do the filtering you will have to call
filter_commands()
yourself.
- await send_cog_help(cog)
This function is a coroutine.
Handles the implementation of the cog page in the help command. This function is called when the help command is called with a cog as the argument.
It should be noted that this method does not return anything – rather the actual message sending should be done inside this method. Well behaved subclasses should use
get_destination()
to know where to send, as this is a customisation point for other users.You can override this method to customise the behaviour.
Note
You can access the invocation context with
HelpCommand.context
.To get the commands that belong to this cog see
Cog.get_commands()
. The commands returned not filtered. To do the filtering you will have to callfilter_commands()
yourself.- Parameters:
cog (
Cog
) – The cog that was requested for help.
- await send_group_help(group)
This function is a coroutine.
Handles the implementation of the group page in the help command. This function is called when the help command is called with a group as the argument.
It should be noted that this method does not return anything – rather the actual message sending should be done inside this method. Well behaved subclasses should use
get_destination()
to know where to send, as this is a customisation point for other users.You can override this method to customise the behaviour.
Note
You can access the invocation context with
HelpCommand.context
.To get the commands that belong to this group without aliases see
Group.commands
. The commands returned not filtered. To do the filtering you will have to callfilter_commands()
yourself.- Parameters:
group (
Group
) – The group that was requested for help.
- await send_command_help(command)
This function is a coroutine.
Handles the implementation of the single command page in the help command.
It should be noted that this method does not return anything – rather the actual message sending should be done inside this method. Well behaved subclasses should use
get_destination()
to know where to send, as this is a customisation point for other users.You can override this method to customise the behaviour.
Note
You can access the invocation context with
HelpCommand.context
.Showing Help
There are certain attributes and methods that are helpful for a help command to show such as the following:
There are more than just these attributes but feel free to play around with these to help you get started to get the output that you want.
- Parameters:
command (
Command
) – The command that was requested for help.
- await prepare_help_command(ctx, command=None)
This function is a coroutine.
A low level method that can be used to prepare the help command before it does anything. For example, if you need to prepare some state in your subclass before the command does its processing then this would be the place to do it.
The default implementation does nothing.
Note
This is called inside the help command callback body. So all the usual rules that happen inside apply here as well.
- await command_callback(ctx, *, command=None)
This function is a coroutine.
The actual implementation of the help command.
It is not recommended to override this method and instead change the behaviour through the methods that actually get dispatched.
DefaultHelpCommand
- defadd_command_formatting
- defadd_indented_commands
- defget_destination
- defget_ending_note
- asyncsend_pages
- defshorten_text
- class discord.ext.commands.DefaultHelpCommand(*args, **kwargs)
Bases:
HelpCommand
The implementation of the default help command.
This inherits from
HelpCommand
.It extends it with the following attributes.
- dm_help
A tribool that indicates if the help command should DM the user instead of sending it to the channel it received it from. If the boolean is set to
True
, then all help output is DM’d. IfFalse
, none of the help output is DM’d. IfNone
, then the bot will only DM when the help message becomes too long (dictated by more thandm_help_threshold
characters). Defaults toFalse
.- Type:
Optional[
bool
]
- dm_help_threshold
The number of characters the paginator must accumulate before getting DM’d to the user if
dm_help
is set toNone
. Defaults to 1000.- Type:
Optional[
int
]
- commands_heading
The command list’s heading string used when the help command is invoked with a category name. Useful for i18n. Defaults to
"Commands:"
- Type:
- no_category
The string used when there is a command which does not belong to any category(cog). Useful for i18n. Defaults to
"No Category"
- Type:
- get_ending_note()
str
: Returns help command’s ending note. This is mainly useful to override for i18n purposes.
- add_indented_commands(commands, *, heading, max_size=None)
Indents a list of commands after the specified heading.
The formatting is added to the
paginator
.The default implementation is the command name indented by
indent
spaces, padded tomax_size
followed by the command’sCommand.short_doc
and then shortened to fit into thewidth
.- Parameters:
commands (Sequence[
Command
]) – A list of commands to indent for output.heading (
str
) – The heading to add to the output. This is only added if the list of commands is greater than 0.max_size (Optional[
int
]) – The max size to use for the gap between indents. If unspecified, callsget_max_size()
on the commands parameter.
- await send_pages()
A helper utility to send the page output from
paginator
to the destination.
- add_command_formatting(command)
A utility function to format the non-indented block of commands and groups.
- Parameters:
command (
Command
) – The command to format.
- get_destination()
Returns the
Messageable
where the help command will be output.You can override this method to customise the behaviour.
By default this returns the context’s channel.
- Returns:
The destination where the help command will be output.
- Return type:
MinimalHelpCommand
- class discord.ext.commands.MinimalHelpCommand(*args, **kwargs)
Bases:
HelpCommand
An implementation of a help command with minimal output.
This inherits from
HelpCommand
.- commands_heading
The command list’s heading string used when the help command is invoked with a category name. Useful for i18n. Defaults to
"Commands"
- Type:
- aliases_heading
The alias list’s heading string used to list the aliases of the command. Useful for i18n. Defaults to
"Aliases:"
.- Type:
- dm_help
A tribool that indicates if the help command should DM the user instead of sending it to the channel it received it from. If the boolean is set to
True
, then all help output is DM’d. IfFalse
, none of the help output is DM’d. IfNone
, then the bot will only DM when the help message becomes too long (dictated by more thandm_help_threshold
characters). Defaults toFalse
.- Type:
Optional[
bool
]
- dm_help_threshold
The number of characters the paginator must accumulate before getting DM’d to the user if
dm_help
is set toNone
. Defaults to 1000.- Type:
Optional[
int
]
- no_category
The string used when there is a command which does not belong to any category(cog). Useful for i18n. Defaults to
"No Category"
- Type:
- await send_pages()
A helper utility to send the page output from
paginator
to the destination.
- get_opening_note()
Returns help command’s opening note. This is mainly useful to override for i18n purposes.
The default implementation returns
Use `{prefix}{command_name} [command]` for more info on a command. You can also use `{prefix}{command_name} [category]` for more info on a category.
- Returns:
The help command opening note.
- Return type:
- get_ending_note()
Return the help command’s ending note. This is mainly useful to override for i18n purposes.
The default implementation does nothing.
- Returns:
The help command ending note.
- Return type:
- add_bot_commands_formatting(commands, heading)
Adds the minified bot heading with commands to the output.
The formatting should be added to the
paginator
.The default implementation is a bold underline heading followed by commands separated by an EN SPACE (U+2002) in the next line.
- add_subcommand_formatting(command)
Adds formatting information on a subcommand.
The formatting should be added to the
paginator
.The default implementation is the prefix and the
Command.qualified_name
optionally followed by an En dash and the command’sCommand.short_doc
.- Parameters:
command (
Command
) – The command to show information of.
- add_aliases_formatting(aliases)
Adds the formatting information on a command’s aliases.
The formatting should be added to the
paginator
.The default implementation is the
aliases_heading
bolded followed by a comma separated list of aliases.This is not called if there are no aliases to format.
- Parameters:
aliases (Sequence[
str
]) – A list of aliases to format.
- add_command_formatting(command)
A utility function to format commands and groups.
- Parameters:
command (
Command
) – The command to format.
- get_destination()
Returns the
Messageable
where the help command will be output.You can override this method to customise the behaviour.
By default this returns the context’s channel.
- Returns:
The destination where the help command will be output.
- Return type:
Paginator
- class discord.ext.commands.Paginator(prefix='```', suffix='```', max_size=2000, linesep='\n')
Bases:
object
A class that aids in paginating code blocks for Discord messages.
- len(x)
Returns the total number of characters in the paginator.
- linesep
- The character string inserted between lines. e.g. a newline character.
Added in version 1.7.
- Type:
- add_line(line='', *, empty=False)
Adds a line to the current page.
If the line exceeds the
max_size
then an exception is raised.- Parameters:
- Raises:
RuntimeError – The line was too big for the current
max_size
.
- property pages
Returns the rendered list of pages.
- Type:
List[
str
]
Enums
Checks
- discord.ext.commands.check(predicate)
A decorator that adds a check to the
Command
or its subclasses. These checks could be accessed viaCommand.checks
.These checks should be predicates that take in a single parameter taking a
Context
. If the check returns aFalse
-like value then during invocation aCheckFailure
exception is raised and sent to theon_command_error()
event.If an exception should be thrown in the predicate then it should be a subclass of
CommandError
. Any exception not subclassed from it will be propagated while those subclassed will be sent toon_command_error()
.A special attribute named
predicate
is bound to the value returned by this decorator to retrieve the predicate passed to the decorator. This allows the following introspection and chaining to be done:def owner_or_permissions(**perms): original = commands.has_permissions(**perms).predicate async def extended_check(ctx): if ctx.guild is None: return False return ctx.guild.owner_id == ctx.author.id or await original(ctx) return commands.check(extended_check)
Note
The function returned by
predicate
is always a coroutine, even if the original function was not a coroutine.Changed in version 1.3: The
predicate
attribute was added.Examples
Creating a basic check to see if the command invoker is you.
def check_if_it_is_me(ctx): return ctx.message.author.id == 85309593344815104 @bot.command() @commands.check(check_if_it_is_me) async def only_for_me(ctx): await ctx.send('I know you!')
Transforming common checks into its own decorator:
def is_me(): def predicate(ctx): return ctx.message.author.id == 85309593344815104 return commands.check(predicate) @bot.command() @is_me() async def only_me(ctx): await ctx.send('Only you!')
- discord.ext.commands.check_any(*checks)
A
check()
that is added that checks if any of the checks passed will pass, i.e. using logical OR.If all checks fail then
CheckAnyFailure
is raised to signal the failure. It inherits fromCheckFailure
.Note
The
predicate
attribute for this function is a coroutine.Added in version 1.3.
- Parameters:
*checks (Callable[[
Context
],bool
]) – An argument list of checks that have been decorated with thecheck()
decorator.- Raises:
TypeError – A check passed has not been decorated with the
check()
decorator.
Examples
Creating a basic check to see if it’s the bot owner or the server owner:
def is_guild_owner(): def predicate(ctx): return ctx.guild is not None and ctx.guild.owner_id == ctx.author.id return commands.check(predicate) @bot.command() @commands.check_any(commands.is_owner(), is_guild_owner()) async def only_for_owners(ctx): await ctx.send('Hello mister owner!')
- discord.ext.commands.has_role(item)
A
check()
that is added that checks if the member invoking the command has the role specified via the name or ID specified.If a string is specified, you must give the exact name of the role, including caps and spelling.
If an integer is specified, you must give the exact snowflake ID of the role.
If the message is invoked in a private message context then the check will return
False
.This check raises one of two special exceptions,
MissingRole
if the user is missing a role, orNoPrivateMessage
if it is used in a private message. Both inherit fromCheckFailure
.Changed in version 1.1: Raise
MissingRole
orNoPrivateMessage
instead of genericCheckFailure
- discord.ext.commands.has_permissions(**perms)
A
check()
that is added that checks if the member has all of the permissions necessary.Note that this check operates on the current channel permissions, not the guild wide permissions.
The permissions passed in must be exactly like the properties shown under
discord.Permissions
.This check raises a special exception,
MissingPermissions
that is inherited fromCheckFailure
.- Parameters:
perms – An argument list of permissions to check for.
Example
@bot.command() @commands.has_permissions(manage_messages=True) async def test(ctx): await ctx.send('You can manage messages.')
- discord.ext.commands.has_guild_permissions(**perms)
Similar to
has_permissions()
, but operates on guild wide permissions instead of the current channel permissions.If this check is called in a DM context, it will raise an exception,
NoPrivateMessage
.Added in version 1.3.
- discord.ext.commands.has_any_role(*items)
A
check()
that is added that checks if the member invoking the command has any of the roles specified. This means that if they have one out of the three roles specified, then this check will return True.Similar to
has_role()
, the names or IDs passed in must be exact.This check raises one of two special exceptions,
MissingAnyRole
if the user is missing all roles, orNoPrivateMessage
if it is used in a private message. Both inherit fromCheckFailure
.Changed in version 1.1: Raise
MissingAnyRole
orNoPrivateMessage
instead of genericCheckFailure
- Parameters:
items (List[Union[
str
,int
]]) – An argument list of names or IDs to check that the member has roles wise.
Example
@bot.command() @commands.has_any_role('Library Devs', 'Moderators', 492212595072434186) async def cool(ctx): await ctx.send('You are cool indeed')
- discord.ext.commands.bot_has_role(item)
Similar to
has_role()
except checks if the bot itself has the role.This check raises one of two special exceptions,
BotMissingRole
if the bot is missing the role, orNoPrivateMessage
if it is used in a private message. Both inherit fromCheckFailure
.Changed in version 1.1: Raise
BotMissingRole
orNoPrivateMessage
instead of genericCheckFailure
- discord.ext.commands.bot_has_permissions(**perms)
Similar to
has_permissions()
except checks if the bot itself has the permissions listed.This check raises a special exception,
BotMissingPermissions
that is inherited fromCheckFailure
.
- discord.ext.commands.bot_has_guild_permissions(**perms)
Similar to
has_guild_permissions()
, but checks the bot members guild permissions.Added in version 1.3.
- discord.ext.commands.bot_has_any_role(*items)
Similar to
has_any_role()
except checks if the bot itself has any of the roles listed.This check raises one of two special exceptions,
BotMissingAnyRole
if the bot is missing all roles, orNoPrivateMessage
if it is used in a private message. Both inherit fromCheckFailure
.Changed in version 1.1: Raise
BotMissingAnyRole
orNoPrivateMessage
instead of generic checkfailure
- discord.ext.commands.cooldown(rate, per, type=('default', 0))
A decorator that adds a cooldown to a
Command
A cooldown allows a command to only be used a specific amount of times in a specific time frame. These cooldowns can be based either on a per-guild, per-channel, per-user, per-role or global basis. Denoted by the third argument of
type
which must be of enum typeBucketType
.If a cooldown is triggered, then
CommandOnCooldown
is triggered inon_command_error()
and the local error handler.A command can only have a single cooldown.
- Parameters:
rate (
int
) – The number of times a command can be used before triggering a cooldown.per (
float
) – The amount of seconds to wait for a cooldown when it’s been triggered.type (Union[
BucketType
, Callable[[Message
], Any]]) –The type of cooldown to have. If callable, should return a key for the mapping.
Changed in version 1.7: Callables are now supported for custom bucket types.
- discord.ext.commands.max_concurrency(number, per=('default', 0), *, wait=False)
A decorator that adds a maximum concurrency to a
Command
or its subclasses.This enables you to only allow a certain number of command invocations at the same time, for example if a command takes too long or if only one user can use it at a time. This differs from a cooldown in that there is no set waiting period or token bucket – only a set number of people can run the command.
Added in version 1.3.
- Parameters:
number (
int
) – The maximum number of invocations of this command that can be running at the same time.per (
BucketType
) – The bucket that this concurrency is based on, e.g.BucketType.guild
would allow it to be used up tonumber
times per guild.wait (
bool
) – Whether the command should wait for the queue to be over. If this is set toFalse
then instead of waiting until the command can run again, the command raisesMaxConcurrencyReached
to its error handler. If this is set toTrue
then the command waits until it can be executed.
- discord.ext.commands.before_invoke(coro)
A decorator that registers a coroutine as a pre-invoke hook.
This allows you to refer to one before invoke hook for several commands that do not have to be within the same cog.
Added in version 1.4.
Example
async def record_usage(ctx): print(ctx.author, 'used', ctx.command, 'at', ctx.message.created_at) @bot.command() @commands.before_invoke(record_usage) async def who(ctx): # Output: <User> used who at <Time> await ctx.send('i am a bot') class What(commands.Cog): @commands.before_invoke(record_usage) @commands.command() async def when(self, ctx): # Output: <User> used when at <Time> await ctx.send('and i have existed since {}'.format(ctx.bot.user.created_at)) @commands.command() async def where(self, ctx): # Output: <Nothing> await ctx.send('on Discord') @commands.command() async def why(self, ctx): # Output: <Nothing> await ctx.send('because someone made me') bot.add_cog(What())
- discord.ext.commands.after_invoke(coro)
A decorator that registers a coroutine as a post-invoke hook.
This allows you to refer to one after invoke hook for several commands that do not have to be within the same cog.
Added in version 1.4.
- discord.ext.commands.guild_only()
A
check()
that indicates this command must only be used in a guild context only. Basically, no private messages are allowed when using the command.This check raises a special exception,
NoPrivateMessage
that is inherited fromCheckFailure
.
- discord.ext.commands.dm_only()
A
check()
that indicates this command must only be used in a DM context. Only private messages are allowed when using the command.This check raises a special exception,
PrivateMessageOnly
that is inherited fromCheckFailure
.Added in version 1.1.
- discord.ext.commands.is_owner()
A
check()
that checks if the person invoking this command is the owner of the bot.This is powered by
Bot.is_owner()
.This check raises a special exception,
NotOwner
that is derived fromCheckFailure
.
- discord.ext.commands.is_nsfw()
A
check()
that checks if the channel is a NSFW channel.This check raises a special exception,
NSFWChannelRequired
that is derived fromCheckFailure
.Changed in version 1.1: Raise
NSFWChannelRequired
instead of genericCheckFailure
. DM channels will also now pass this check.
Context
- asyncfetch_message
- defhistory
- asyncinvoke
- asyncpins
- asyncreinvoke
- asyncreply
- asyncsend
- asyncsend_help
- asynctrigger_typing
- deftyping
- class discord.ext.commands.Context(**attrs)
Bases:
Messageable
Represents the context in which a command is being invoked under.
This class contains a lot of meta data to help you understand more about the invocation context. This class is not created manually and is instead passed around to commands as the first parameter.
This class implements the
Messageable
ABC.- args
The list of transformed arguments that were passed into the command. If this is accessed during the
on_command_error()
event then this list could be incomplete.- Type:
- kwargs
A dictionary of transformed arguments that were passed into the command. Similar to
args
, if this is accessed in theon_command_error()
event then this dict could be incomplete.- Type:
- invoked_with
The command name that triggered this invocation. Useful for finding out which alias called the command.
- Type:
- invoked_parents
The command names of the parents that triggered this invocation. Useful for finding out which aliases called the command.
For example in commands
?a b c test
, the invoked parents are['a', 'b', 'c']
.Added in version 1.7.
- Type:
List[
str
]
- invoked_subcommand
The subcommand that was invoked. If no valid subcommand was invoked then this is equal to
None
.- Type:
- subcommand_passed
The string that was attempted to call a subcommand. This does not have to point to a valid registered subcommand and could just point to a nonsense string. If nothing was passed to attempt a call to a subcommand then this is set to
None
.- Type:
Optional[
str
]
- command_failed
A boolean that indicates if the command failed to be parsed, checked, or invoked.
- Type:
- async for ... in history(*, limit=100, before=None, after=None, around=None, oldest_first=None)
Returns an
AsyncIterator
that enables receiving the destination’s message history.You must have
read_message_history
permissions to use this.Examples
Usage
counter = 0 async for message in channel.history(limit=200): if message.author == client.user: counter += 1
Flattening into a list:
messages = await channel.history(limit=123).flatten() # messages is now a list of Message...
All parameters are optional.
- Parameters:
limit (Optional[
int
]) – The number of messages to retrieve. IfNone
, retrieves every message in the channel. Note, however, that this would make it a slow operation.before (Optional[Union[
Snowflake
,datetime.datetime
]]) – Retrieve messages before this date or message. If a date is provided it must be a timezone-naive datetime representing UTC time.after (Optional[Union[
Snowflake
,datetime.datetime
]]) – Retrieve messages after this date or message. If a date is provided it must be a timezone-naive datetime representing UTC time.around (Optional[Union[
Snowflake
,datetime.datetime
]]) – Retrieve messages around this date or message. If a date is provided it must be a timezone-naive datetime representing UTC time. When using this argument, the maximum limit is 101. Note that if the limit is an even number, then this will return at most limit + 1 messages.oldest_first (Optional[
bool
]) – If set toTrue
, return messages in oldest->newest order. Defaults toTrue
ifafter
is specified, otherwiseFalse
.
- Raises:
Forbidden – You do not have permissions to get channel message history.
HTTPException – The request to get message history failed.
- Yields:
Message
– The message with the message data parsed.
- async with typing()
Returns a context manager that allows you to type for an indefinite period of time.
This is useful for denoting long computations in your bot.
Note
This is both a regular context manager and an async context manager. This means that both
with
andasync with
work with this.Example Usage:
async with channel.typing(): # do expensive stuff here await asyncio.sleep(15) await channel.send('done!')
- await invoke(*args, **kwargs)
This function is a coroutine.
Calls a command with the arguments given.
This is useful if you want to just call the callback that a
Command
holds internally.Note
This does not handle converters, checks, cooldowns, pre-invoke, or after-invoke hooks in any matter. It calls the internal callback directly as-if it was a regular function.
You must take care in passing the proper arguments when using this function.
Warning
The first parameter passed must be the command being invoked.
- await reinvoke(*, call_hooks=False, restart=True)
This function is a coroutine.
Calls the command again.
This is similar to
invoke()
except that it bypasses checks, cooldowns, and error handlers.Note
If you want to bypass
UserInputError
derived exceptions, it is recommended to use the regularinvoke()
as it will work more naturally. After all, this will end up using the old arguments the user has used and will thus just fail again.- Parameters:
- Raises:
ValueError – The context to reinvoke is not valid.
- property cog
Returns the cog associated with this context’s command. None if it does not exist.
- Type:
Optional[
Cog
]
- guild
Returns the guild associated with this context’s command. None if not available.
- Type:
Optional[
Guild
]
- channel
Returns the channel associated with this context’s command. Shorthand for
Message.channel
.- Type:
Union[
abc.Messageable
]
- author
Union[
User
,Member
]: Returns the author associated with this context’s command. Shorthand forMessage.author
- me
Union[
Member
,ClientUser
]: Similar toGuild.me
except it may return theClientUser
in private message contexts.
- property voice_client
A shortcut to
Guild.voice_client
, if applicable.- Type:
Optional[
VoiceProtocol
]
- await send_help(entity=<bot>)
This function is a coroutine.
Shows the help command for the specified entity if given. The entity can be a command or a cog.
If no entity is given, then it’ll show help for the entire bot.
If the entity is a string, then it looks up whether it’s a
Cog
or aCommand
.Note
Due to the way this function works, instead of returning something similar to
command_not_found()
this returnsNone
on bad input or no help command.
- await reply(content=None, tts=False, embed=None, embeds=None, components=None, file=None, files=None, stickers=None, delete_after=None, nonce=None, allowed_mentions=None, mention_author=None, suppress_embeds=False, suppress_notifications=False)
This function is a coroutine.
A shortcut method to
abc.Messageable.send()
to reply to theMessage
.Added in version 1.6.
- Raises:
HTTPException – Sending the message failed.
Forbidden – You do not have the proper permissions to send the message.
InvalidArgument – The
files
list is not of the appropriate size or you specified bothfile
andfiles
.
- Returns:
The message that was sent.
- Return type:
- await fetch_message(id, /)
This function is a coroutine.
Retrieves a single
Message
from the destination.This can only be used by bot accounts.
- Parameters:
id (
int
) – The message ID to look for.- Raises:
NotFound – The specified message was not found.
Forbidden – You do not have the permissions required to get a message.
HTTPException – Retrieving the message failed.
- Returns:
The message asked for.
- Return type:
- property is_partial
Whether this channel is considered as a partial one. Default to
False
for all subclasses ofMessageable
exceptPartialMessageable
.- Type:
- await pins()
This function is a coroutine.
Retrieves all messages that are currently pinned in the channel.
Note
Due to a limitation with the Discord API, the
Message
objects returned by this method do not contain completeMessage.reactions
data.- Raises:
HTTPException – Retrieving the pinned messages failed.
- Returns:
The messages that are currently pinned.
- Return type:
List[
Message
]
- await send(content=None, *, tts=False, embed=None, embeds=None, components=None, file=None, files=None, stickers=None, delete_after=None, nonce=None, allowed_mentions=None, reference=None, mention_author=None, suppress_embeds=False, suppress_notifications=False)
This function is a coroutine.
Sends a message to the destination with the content given.
The content must be a type that can convert to a string through
str(content)
. If the content is set toNone
(the default), then theembed
parameter must be provided.To upload a single file, the
file
parameter should be used with a singleFile
object. To upload multiple files, thefiles
parameter should be used with alist
ofFile
objects.If the
embed
parameter is provided, it must be of typeEmbed
and it must be a rich embed type.- Parameters:
content (
str
) – The content of the message to send.tts (
bool
) – Indicates if the message should be sent using text-to-speech.embed (
Embed
) – The rich embed for the content.embeds (List[
Embed
]) – A list containing up to ten embedscomponents (List[Union[
ActionRow
, List[Union[Button
, Select]]]]) – A list of up to fiveActionRow`s or :class:`list
, each containing up to fiveButton
or one Select like object.file (
File
) – The file to upload.files (List[
File
]) – Alist
of files to upload. Must be a maximum of 10.stickers (List[
GuildSticker
]) – A list of up to 3discord.GuildSticker
that should be sent with the message.nonce (
int
) – The nonce to use for sending this message. If the message was successfully sent, then the message will have a nonce with this value.delete_after (
float
) – If provided, the number of seconds to wait in the background before deleting the message we just sent. If the deletion fails, then it is silently ignored.allowed_mentions (
AllowedMentions
) –Controls the mentions being processed in this message. If this is passed, then the object is merged with
allowed_mentions
. The merging behaviour only overrides attributes that have been explicitly passed to the object, otherwise it uses the attributes set inallowed_mentions
. If no object is passed at all then the defaults given byallowed_mentions
are used instead.Added in version 1.4.
reference (Union[
Message
,MessageReference
]) –A reference to the
Message
to which you are replying, this can be created usingto_reference()
or passed directly as aMessage
. You can control whether this mentions the author of the referenced message using thereplied_user
attribute ofallowed_mentions
or by settingmention_author
.Added in version 1.6.
mention_author (Optional[
bool
]) –If set, overrides the
replied_user
attribute ofallowed_mentions
.Added in version 1.6.
suppress_embeds (
bool
) – Whether to supress embeds send with the message, default toFalse
suppress_notifications (
bool
) –Whether to suppress desktop- & push-notifications for this message, default to
False
Users will still see a ping-symbol when they are mentioned in the message, or the message is in a dm channel.
Added in version 2.0.
- Raises:
HTTPException – Sending the message failed.
Forbidden – You do not have the proper permissions to send the message.
InvalidArgument – The
files
list is not of the appropriate size, you specified bothfile
andfiles
, or thereference
object is not aMessage
orMessageReference
.
- Returns:
The message that was sent.
- Return type:
- await trigger_typing()
This function is a coroutine.
Triggers a typing indicator to the destination.
Typing indicator will go away after 10 seconds, or after a message is sent.
Converters
- class discord.ext.commands.Converter
Bases:
object
The base class of custom converters that require the
Context
to be passed to be useful.This allows you to implement converters that function similar to the special cased
discord
classes.Classes that derive from this should override the
convert()
method to do its conversion logic. This method must be a coroutine.- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.MemberConverter
Bases:
IDConverter
Converts to a
Member
.All lookups are via the local guild. If in a DM context, then the lookup is done by the global cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name#discrim
Lookup by display name (global_name)
Lookup by username
Lookup by nickname
Changed in version 1.5: Raise
MemberNotFound
instead of genericBadArgument
Changed in version 1.5.1: This converter now lazily fetches members from the gateway and HTTP APIs, optionally caching the result if
MemberCacheFlags.joined
is enabled.- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.UserConverter
Bases:
IDConverter
Converts to a
User
.All lookups are via the global user cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name#discrim
Lookup by display name (global_name)
Lookup by username
Changed in version 1.5: Raise
UserNotFound
instead of genericBadArgument
Changed in version 1.6: This converter now lazily fetches users from the HTTP APIs if an ID is passed, and it’s not available in cache.
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.MessageConverter
Bases:
PartialMessageConverter
Converts to a
discord.Message
.Added in version 1.1.
The lookup strategy is as follows (in order):
Lookup by “{channel ID}-{message ID}” (retrieved by shift-clicking on “Copy ID”)
Lookup by message ID (the message must be in the context channel)
Lookup by message URL
Changed in version 1.5: Raise
ChannelNotFound
,MessageNotFound
orChannelNotReadable
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.PartialMessageConverter
Bases:
Converter
Converts to a
discord.PartialMessage
.Added in version 1.7.
The creation strategy is as follows (in order):
By “{channel ID}-{message ID}” (retrieved by shift-clicking on “Copy ID”)
By message ID (The message is assumed to be in the context channel.)
By message URL
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.TextChannelConverter
Bases:
IDConverter
Converts to a
TextChannel
.All lookups are via the local guild. If in a DM context, then the lookup is done by the global cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name
Changed in version 1.5: Raise
ChannelNotFound
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.VoiceChannelConverter
Bases:
IDConverter
Converts to a
VoiceChannel
.All lookups are via the local guild. If in a DM context, then the lookup is done by the global cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name
Changed in version 1.5: Raise
ChannelNotFound
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.StoreChannelConverter
Bases:
IDConverter
Converts to a
StoreChannel
.All lookups are via the local guild. If in a DM context, then the lookup is done by the global cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name.
Added in version 1.7.
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.StageChannelConverter
Bases:
IDConverter
Converts to a
StageChannel
.Added in version 1.7.
All lookups are via the local guild. If in a DM context, then the lookup is done by the global cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.CategoryChannelConverter
Bases:
IDConverter
Converts to a
CategoryChannel
.All lookups are via the local guild. If in a DM context, then the lookup is done by the global cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name
Changed in version 1.5: Raise
ChannelNotFound
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.InviteConverter
Bases:
Converter
Converts to a
Invite
.This is done via an HTTP request using
Bot.fetch_invite()
.Changed in version 1.5: Raise
BadInviteArgument
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.GuildConverter
Bases:
IDConverter
Converts to a
Guild
.The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by name. (There is no disambiguation for Guilds with multiple matching names).
Added in version 1.7.
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.RoleConverter
Bases:
IDConverter
Converts to a
Role
.All lookups are via the local guild. If in a DM context, the converter raises
NoPrivateMessage
exception.The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by mention.
Lookup by name
Changed in version 1.5: Raise
RoleNotFound
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.GameConverter
Bases:
Converter
Converts to
Game
.- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.ColourConverter
Bases:
Converter
Converts to a
Colour
.Changed in version 1.5: Add an alias named ColorConverter
The following formats are accepted:
0x<hex>
#<hex>
0x#<hex>
rgb(<number>, <number>, <number>)
Any of the
classmethod
inColour
The
_
in the name can be optionally replaced with spaces.
Like CSS,
<number>
can be either 0-255 or 0-100% and<hex>
can be either a 6 digit hex number or a 3 digit hex shortcut (e.g. #fff).Changed in version 1.5: Raise
BadColourArgument
instead of genericBadArgument
Changed in version 1.7: Added support for
rgb
function and 3-digit hex shortcuts- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.EmojiConverter
Bases:
IDConverter
Converts to a
Emoji
.All lookups are done for the local guild first, if available. If that lookup fails, then it checks the client’s global cache.
The lookup strategy is as follows (in order):
Lookup by ID.
Lookup by extracting ID from the emoji.
Lookup by name
Changed in version 1.5: Raise
EmojiNotFound
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.PartialEmojiConverter
Bases:
Converter
Converts to a
PartialEmoji
.This is done by extracting the animated flag, name and ID from the emoji.
Changed in version 1.5: Raise
PartialEmojiConversionFailure
instead of genericBadArgument
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- class discord.ext.commands.clean_content(*, fix_channel_mentions=False, use_nicknames=True, escape_markdown=False, remove_markdown=False)
Bases:
Converter
Converts the argument to mention scrubbed version of said content.
This behaves similarly to
clean_content
.- remove_markdown
Whether to also remove special markdown characters. This option is not supported with
escape_markdown
Added in version 1.7.
- Type:
- await convert(ctx, argument)
This function is a coroutine.
The method to override to do conversion logic.
If an error is found while converting, it is recommended to raise a
CommandError
derived exception as it will properly propagate to the error handlers.
- ext.commands.Greedy
A special converter that greedily consumes arguments until it can’t. As a consequence of this behaviour, most input errors are silently discarded, since it is used as an indicator of when to stop parsing.
When a parser error is met the greedy converter stops converting, undoes the internal string parsing routine, and continues parsing regularly.
For example, in the following code:
@commands.command() async def test(ctx, numbers: Greedy[int], reason: str): await ctx.send("numbers: {}, reason: {}".format(numbers, reason))
An invocation of
[p]test 1 2 3 4 5 6 hello
would passnumbers
with[1, 2, 3, 4, 5, 6]
andreason
withhello
.For more information, check Special Converters.
Exceptions
- exception discord.ext.commands.CommandError(message=None, *args)
Bases:
DiscordException
The base exception type for all command related errors.
This inherits from
discord.DiscordException
.This exception and exceptions inherited from it are handled in a special way as they are caught and passed into a special event from
Bot
,on_command_error()
.
- exception discord.ext.commands.ConversionError(converter, original)
Bases:
CommandError
Exception raised when a Converter class raises non-CommandError.
This inherits from
CommandError
.
- exception discord.ext.commands.MissingRequiredArgument(param)
Bases:
UserInputError
Exception raised when parsing a command and a parameter that is required is not encountered.
This inherits from
UserInputError
- exception discord.ext.commands.ArgumentParsingError(message=None, *args)
Bases:
UserInputError
An exception raised when the parser fails to parse a user’s input.
This inherits from
UserInputError
.There are child classes that implement more granular parsing errors for i18n purposes.
- exception discord.ext.commands.UnexpectedQuoteError(quote)
Bases:
ArgumentParsingError
An exception raised when the parser encounters a quote mark inside a non-quoted string.
This inherits from
ArgumentParsingError
.
- exception discord.ext.commands.InvalidEndOfQuotedStringError(char)
Bases:
ArgumentParsingError
An exception raised when a space is expected after the closing quote in a string but a different character is found.
This inherits from
ArgumentParsingError
.
- exception discord.ext.commands.ExpectedClosingQuoteError(close_quote)
Bases:
ArgumentParsingError
An exception raised when a quote character is expected but not found.
This inherits from
ArgumentParsingError
.
- exception discord.ext.commands.BadArgument(message=None, *args)
Bases:
UserInputError
Exception raised when a parsing or conversion failure is encountered on an argument to pass into a command.
This inherits from
UserInputError
- exception discord.ext.commands.BadUnionArgument(param, converters, errors)
Bases:
UserInputError
Exception raised when a
typing.Union
converter fails for all its associated types.This inherits from
UserInputError
- errors
A list of errors that were caught from failing the conversion.
- Type:
List[
CommandError
]
- exception discord.ext.commands.PrivateMessageOnly(message=None)
Bases:
CheckFailure
Exception raised when an operation does not work outside of private message contexts.
This inherits from
CheckFailure
- exception discord.ext.commands.NoPrivateMessage(message=None)
Bases:
CheckFailure
Exception raised when an operation does not work in private message contexts.
This inherits from
CheckFailure
- exception discord.ext.commands.CheckFailure(message=None, *args)
Bases:
CommandError
Exception raised when the predicates in
Command.checks
have failed.This inherits from
CommandError
- exception discord.ext.commands.CheckAnyFailure(checks, errors)
Bases:
CheckFailure
Exception raised when all predicates in
check_any()
fail.This inherits from
CheckFailure
.Added in version 1.3.
- errors
A list of errors that were caught during execution.
- Type:
List[
CheckFailure
]
- exception discord.ext.commands.CommandNotFound(message=None, *args)
Bases:
CommandError
Exception raised when a command is attempted to be invoked but no command under that name is found.
This is not raised for invalid subcommands, rather just the initial main command that is attempted to be invoked.
This inherits from
CommandError
.
- exception discord.ext.commands.DisabledCommand(message=None, *args)
Bases:
CommandError
Exception raised when the command being invoked is disabled.
This inherits from
CommandError
- exception discord.ext.commands.CommandInvokeError(e)
Bases:
CommandError
Exception raised when the command being invoked raised an exception.
This inherits from
CommandError
- exception discord.ext.commands.TooManyArguments(message=None, *args)
Bases:
UserInputError
Exception raised when the command was passed too many arguments and its
Command.ignore_extra
attribute was not set toTrue
.This inherits from
UserInputError
- exception discord.ext.commands.UserInputError(message=None, *args)
Bases:
CommandError
The base exception type for errors that involve errors regarding user input.
This inherits from
CommandError
.
- exception discord.ext.commands.CommandOnCooldown(cooldown, retry_after)
Bases:
CommandError
Exception raised when the command being invoked is on cooldown.
This inherits from
CommandError
- cooldown
A class with attributes
rate
,per
, andtype
similar to thecooldown()
decorator.- Type:
Cooldown
- exception discord.ext.commands.MaxConcurrencyReached(number, per)
Bases:
CommandError
Exception raised when the command being invoked has reached its maximum concurrency.
This inherits from
CommandError
.- per
The bucket type passed to the
max_concurrency()
decorator.- Type:
- exception discord.ext.commands.NotOwner(message=None, *args)
Bases:
CheckFailure
Exception raised when the message author is not the owner of the bot.
This inherits from
CheckFailure
- exception discord.ext.commands.MessageNotFound(argument)
Bases:
BadArgument
Exception raised when the message provided was not found in the channel.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.MemberNotFound(argument)
Bases:
BadArgument
Exception raised when the member provided was not found in the bot’s cache.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.GuildNotFound(argument)
Bases:
BadArgument
Exception raised when the guild provided was not found in the bot’s cache.
This inherits from
BadArgument
Added in version 1.7.
- exception discord.ext.commands.UserNotFound(argument)
Bases:
BadArgument
Exception raised when the user provided was not found in the bot’s cache.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.ChannelNotFound(argument)
Bases:
BadArgument
Exception raised when the bot can not find the channel.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.ChannelNotReadable(argument)
Bases:
BadArgument
Exception raised when the bot does not have permission to read messages in the channel.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.BadColourArgument(argument)
Bases:
BadArgument
Exception raised when the colour is not valid.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.RoleNotFound(argument)
Bases:
BadArgument
Exception raised when the bot can not find the role.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.BadInviteArgument
Bases:
BadArgument
Exception raised when the invite is invalid or expired.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.EmojiNotFound(argument)
Bases:
BadArgument
Exception raised when the bot can not find the emoji.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.PartialEmojiConversionFailure(argument)
Bases:
BadArgument
Exception raised when the emoji provided does not match the correct format.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.BadBoolArgument(argument)
Bases:
BadArgument
Exception raised when a boolean argument was not convertable.
This inherits from
BadArgument
Added in version 1.5.
- exception discord.ext.commands.MissingPermissions(missing_perms, *args)
Bases:
CheckFailure
Exception raised when the command invoker lacks permissions to run a command.
This inherits from
CheckFailure
- exception discord.ext.commands.BotMissingPermissions(missing_perms, *args)
Bases:
CheckFailure
Exception raised when the bot’s member lacks permissions to run a command.
This inherits from
CheckFailure
- exception discord.ext.commands.MissingRole(missing_role)
Bases:
CheckFailure
Exception raised when the command invoker lacks a role to run a command.
This inherits from
CheckFailure
Added in version 1.1.
- missing_role
The required role that is missing. This is the parameter passed to
has_role()
.
- exception discord.ext.commands.BotMissingRole(missing_role)
Bases:
CheckFailure
Exception raised when the bot’s member lacks a role to run a command.
This inherits from
CheckFailure
Added in version 1.1.
- missing_role
The required role that is missing. This is the parameter passed to
has_role()
.
- exception discord.ext.commands.MissingAnyRole(missing_roles)
Bases:
CheckFailure
Exception raised when the command invoker lacks any of the roles specified to run a command.
This inherits from
CheckFailure
Added in version 1.1.
- missing_roles
The roles that the invoker is missing. These are the parameters passed to
has_any_role()
.
- exception discord.ext.commands.BotMissingAnyRole(missing_roles)
Bases:
CheckFailure
Exception raised when the bot’s member lacks any of the roles specified to run a command.
This inherits from
CheckFailure
Added in version 1.1.
- missing_roles
The roles that the bot’s member is missing. These are the parameters passed to
has_any_role()
.
- exception discord.ext.commands.NSFWChannelRequired(channel)
Bases:
CheckFailure
Exception raised when a channel does not have the required NSFW setting.
This inherits from
CheckFailure
.Added in version 1.1.
- Parameters:
channel (
discord.abc.GuildChannel
) – The channel that does not have NSFW enabled.
- exception discord.ext.commands.ExtensionError(message=None, *args, name)
Bases:
DiscordException
Base exception for extension related errors.
This inherits from
DiscordException
.
- exception discord.ext.commands.ExtensionAlreadyLoaded(name)
Bases:
ExtensionError
An exception raised when an extension has already been loaded.
This inherits from
ExtensionError