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 thedpytestbackend to update any necessary state and trigger any necessary fake messages to the client.- __init__(loop: Optional[asyncio.events.AbstractEventLoop] = None) → None¶
Initialize self. See help(type(self)) for accurate signature.
- 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 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_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 edit_message(channel_id: int, message_id: int, **fields: Any) → Dict[str, Union[str, int, bool, Dict[str, JsonVal], List[JsonVal]]]¶
- 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 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 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 remove_role(guild_id: int, user_id: int, role_id: int, *, reason: Optional[str] = None) → None¶
- async delete_channel_permissions(channel_id: int, target_id: int, *, reason: Optional[str] = None) → None¶
- 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