Backend

Module for ‘server-side’ state during testing. This module should contain methods for altering said server-side state, which then are responsible for triggering a parse_* call in the configured client state to inform the bot of the change.

This setup matches discord’s actual setup, where an HTTP call triggers a change on the server, which is then sent back to the bot as an event which is parsed and dispatched.

class BackendState(messages: Dict[int, List[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]]], state: discord.ext.test.state.FakeState)

The dpytest backend, with all the state it needs to hold to be able to pretend to be discord. Generally only used internally, but exposed through get_state()

property messages

Alias for field number 0

property state

Alias for field number 1

__slots__ = ()
class FakeRequest(status: int, reason: str)

A fake web response, for use with discord HTTPExceptions

property status

Alias for field number 0

property reason

Alias for field number 1

__slots__ = ()
class FakeHttp(loop: Optional[asyncio.events.AbstractEventLoop] = None)

A mock implementation of an HTTPClient. Instead of actually sending requests to discord, it triggers a runner callback and calls the dpytest backend to update any necessary state and trigger any necessary fake messages to the client.

fileno: ClassVar[int] = 0
__init__(loop: Optional[asyncio.events.AbstractEventLoop] = None)None

Initialize self. See help(type(self)) for accurate signature.

state: discord.ext.test.state.FakeState
async request(*args: Any, **kwargs: Any)NoReturn

Overloaded to raise a NotImplemented error informing the user that the requested operation isn’t yet supported by dpytest. To fix this, the method call that triggered this error should be overloaded below to instead trigger a callback and call the appropriate backend function.

Parameters
  • args – Arguments provided to the request

  • kwargs – Keyword arguments provided to the request

async create_channel(guild_id: int, channel_type: discord.ChannelType, *, reason: Optional[str] = None, **options: Any)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async delete_channel(channel_id: int, *, reason: Optional[str] = None)None
async get_channel(channel_id: int)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async start_private_message(user_id: int)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async send_message(channel_id: int, content: str, *, tts: bool = False, embed: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None, nonce: Optional[int] = None, allowed_mentions: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None, message_reference: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async send_typing(channel_id: int)None
async send_files(channel_id: int, *, files: Iterable[discord.File], content: Optional[str] = None, tts: bool = False, embed: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None, nonce: Optional[int] = None, allowed_mentions: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None, message_reference: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async delete_message(channel_id: int, message_id: int, *, reason: Optional[str] = None)None
async edit_message(channel_id: int, message_id: int, **fields: Any)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async add_reaction(channel_id: int, message_id: int, emoji: str)None
async remove_reaction(channel_id: int, message_id: int, emoji: str, member_id: int)None
async remove_own_reaction(channel_id: int, message_id: int, emoji: str)None
async get_message(channel_id: int, message_id: int)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async logs_from(channel_id: int, limit: int, before: Optional[int] = None, after: Optional[int] = None, around: Optional[int] = None)List[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]]
async kick(user_id: int, guild_id: int, reason: Optional[str] = None)None
async ban(user_id: int, guild_id: int, delete_message_days: int = 1, reason: Optional[str] = None)None
async change_my_nickname(guild_id: int, nickname: str, *, reason: Optional[str] = None)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async edit_member(guild_id: int, user_id: int, *, reason: Optional[str] = None, **fields: Any)None
async get_member(guild_id: int, member_id: int)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async edit_role(guild_id: int, role_id: int, *, reason: Optional[str] = None, **fields: Any)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async delete_role(guild_id: int, role_id: int, *, reason: Optional[str] = None)None
async create_role(guild_id: int, *, reason: Optional[str] = None, **fields: Any)Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async move_role_position(guild_id: int, positions: List[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]], *, reason: Optional[str] = None)None
async add_role(guild_id: int, user_id: int, role_id: int, *, reason: Optional[str] = None)None
async remove_role(guild_id: int, user_id: int, role_id: int, *, reason: Optional[str] = None)None
async application_info()Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]
async delete_channel_permissions(channel_id: int, target_id: int, *, reason: Optional[str] = None)None
async edit_channel_permissions(channel_id: int, target_id: int, allow_value: int, deny_value: int, perm_type: str, *, reason: Optional[str] = None)None
async get_from_cdn(url: str)bytes
get_state()discord.ext.test.state.FakeState

Get the current backend state, or raise an error if it hasn’t been configured

Returns

Current backend state

make_guild(name: str, members: Optional[List[discord.Member]] = None, channels: Optional[List[Union[discord.TextChannel, discord.CategoryChannel, discord.abc.GuildChannel, discord.abc.PrivateChannel]]] = None, roles: Optional[List[discord.Role]] = None, owner: bool = False, id_num: int = - 1)discord.Guild
update_guild(guild: discord.Guild, roles: Optional[List[discord.Role]] = None)discord.Guild
make_role(name: str, guild: discord.Guild, id_num: int = - 1, colour: int = 0, permissions: int = 104324161, hoist: bool = False, mentionable: bool = False)discord.Role
update_role(role: discord.Role, colour: Optional[int] = None, color: Optional[int] = None, permissions: Optional[int] = None, hoist: Optional[bool] = None, mentionable: Optional[bool] = None, name: Optional[str] = None)discord.Role
delete_role(role: discord.Role)None
make_text_channel(name: str, guild: discord.Guild, position: int = - 1, id_num: int = - 1, permission_overwrites: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None, parent_id: Optional[int] = None)discord.TextChannel
make_category_channel(name: str, guild: discord.Guild, position: int = - 1, id_num: int = - 1, permission_overwrites: Optional[Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]] = None)discord.CategoryChannel
delete_channel(channel: Union[discord.TextChannel, discord.CategoryChannel, discord.abc.GuildChannel, discord.abc.PrivateChannel])None
update_text_channel(channel: discord.channel.TextChannel, target: Union[discord.user.User, discord.role.Role], override: Optional[discord.permissions.PermissionOverwrite] = <object object>)None
make_user(username: str, discrim: Union[str, int], avatar: Optional[str] = None, id_num: int = - 1)discord.User
make_member(user: Union[discord.user.BaseUser, discord.abc.User], guild: discord.Guild, nick: Optional[str] = None, roles: Optional[List[discord.Role]] = None)discord.Member
update_member(member: discord.Member, nick: Optional[str] = None, roles: Optional[List[discord.Role]] = None)discord.Member
delete_member(member: discord.Member)None
make_message(content: str, author: Union[discord.user.BaseUser, discord.abc.User], channel: Union[discord.TextChannel, discord.CategoryChannel, discord.abc.GuildChannel, discord.abc.PrivateChannel], tts: bool = False, embeds: Optional[List[discord.Embed]] = None, attachments: Optional[List[discord.Attachment]] = None, nonce: Optional[int] = None, id_num: int = - 1)discord.Message
find_user_mentions(content: Optional[str], guild: Optional[discord.Guild])List[discord.Member]
find_role_mentions(content: Optional[str], guild: Optional[discord.Guild])List[int]
find_channel_mentions(content: Optional[str], guild: Optional[discord.Guild])List[Union[discord.TextChannel, discord.CategoryChannel, discord.abc.GuildChannel, discord.abc.PrivateChannel]]
delete_message(message: discord.Message)None
make_attachment(filename: pathlib.Path, name: Optional[str] = None, id_num: int = - 1)discord.Attachment
add_reaction(message: discord.Message, user: discord.User, emoji: str)None
remove_reaction(message: discord.Message, user: discord.user.BaseUser, emoji: str)None
configure(client: discord.Client)None
configure(client: Optional[discord.Client], *, use_dummy: bool = False)None
main()None