Globally accessable context for discord.py events.
Project description
discord.ext.context
A globally accessible context object for discord.py events.
Able to be used in both base clients and the commands extension.
Installation
pip install discord.ext.context
Requirements
- Python 3.7+
- discord.py 1.6+
Register a Discord bot/client
Subclass the context.ContextClient base class, ensuring that it's first in inheritance order.
import discord
from discord.ext import context
class Client(context.ContextClient, discord.Client):
...
Using EventContext
Import context.ctx from anywhere, and it'll have its attributes set based on the event that your call stack originates from.
import discord
from discord.ext.context import ctx
async def log_reaction():
await ctx.channel.send(f"{ctx.user} reacted with {ctx.emoji}")
client = discord.Client()
@client.event
async def on_raw_reaction_add():
await log_reaction()
Exceptions
ContextNotSet
Accessing a context value before it's set will have this exception raised. To have a fallback value used instead, use the contextmanager with ctx.default():.
Attributes
ctx.message: discord.PartialMessage
Should always be a PartialMessage. If a Message instance is needed, an up to date copy can be retrieved with PartialMessage.fetch().
ctx.emoji: discord.Emoji or discord.PartialEmoji
Often representing a reaction interacted with by a user; useful for user interactions that use reaction-based sessions.
ctx.channel: discord.abc.Messageable
Will always be a text channel or user-type object that's possible to send messages to. Does not include voice channels.
ctx.user: discord.Member or discord.User
If setting a discord.User instance and the user shares only a single guild with the client, it'll replace it with the discord.Member instance.
ctx.guild: discord.Guild
Will only be set on guild-specific events.
ctx.cmd_ctx: discord.ext.commands.Context
Will only be set on the command event, with other EventContext values being set using it.
ctx.event: str
The name of the event type this context originates from.
ctx.client: discord.Client
The instance of the discord.py client being hooked into.
ctx.bot: discord.Client
Alias for ctx.client.
Methods
ctx.set(*, message=None, emoji=None, user=None, channel=None, guild=None)
Sets the values for the current context to be used across future call stacks. Won't impact asynchronous calls from other events.
@ctx.register_hook(event)
Decorator for registering an event to be handled by the decorated function. Will override existing hooks if a duplicate exists.
ctx.default(all_default, *, message=_NoValue, emoji=_NoValue, user=_NoValue, channel=_NoValue, guild=_NoValue, cmd_ext=_NoValue)
Context manager for registering default values to be used if a value isn't set. On leaving the context manager's scope, ctx will revert to original state.
Use all_default to set all the available ctx.values to the one value. This can be useful for allowing None to be returned for nonset contexts.
Examples
with ctx.default(None):
if ctx.channel:
await ctx.channel.send("Yes")
with ctx.default(channel=fallback_channel, user=None):
if ctx.user:
await ctx.channel.send(f"{ctx.user.display_name}")
If ctx.channel or ctx.user is not yet set, it'll be assigned the fallback arguments. This includes being able to set a value to None instead of raising ContextNotSet.
It can also be used as a decorator for a function.
@ctx.default(channel=fallback_channel, user=None)
async def show_name():
if ctx.user:
await ctx.channel.send(f"{ctx.user.display_name}")
ctx.ephemeral(*, message=_NoValue, emoji=_NoValue, user=_NoValue, channel=_NoValue, guild=_NoValue, cmd_ext=_NoValue)
Context manager for overriding context values. On leaving the context manager's scope, ctx will revert to original state.
Examples
with ctx.ephemeral(channel=log_channel, user=None):
if ctx.user:
await ctx.channel.send(f"{ctx.user.display_name} did a thing.")
If ctx.channel or ctx.user is not yet set, it'll be assigned the fallback arguments. This includes being able to set a value to None instead of raising ContextNotSet.
It can also be used as a decorator for a function.
@ctx.ephemeral(channel=log_channel, user=None)
async def show_name():
if ctx.user:
await ctx.channel.send(f"{ctx.user.display_name} did a thing.")
Events
By default, the following events are hooked by EventContext:
Messages
messagemessage_deletemessage_editraw_message_deleteraw_message_edit
Reactions
reaction_addreaction_removeraw_reaction_addraw_reaction_removereaction_clearreaction_clear_emojiraw_reaction_clearraw_reaction_clear_emoji
Channels
typingguild_channel_updateguild_channel_createguild_channel_deleteguild_channel_pins_updatewebhooks_update
Guilds
guild_updateguild_joinguild_removeguild_integrations_updateguild_emojis_updateguild_availableguild_unavailable
Members
member_updatemember_joinmember_removemember_ban_hookmember_unban_hook
Roles
guild_role_update_hookguild_role_create_hookguild_role_delete_hook
Commands
command
You can add more event hooks or replace the default ones with the decorator:
@EventContext.register_hook(event_name)
def event_hook(*args, **kwargs):
...
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file discord.ext.context-0.1.8.tar.gz.
File metadata
- Download URL: discord.ext.context-0.1.8.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.7 CPython/3.9.7 Linux/5.14.2-arch1-2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
515b5a7b292f336651e202e6baabc462698daedbe547a3f404fa256f9b38d7fe
|
|
| MD5 |
eab4296eb41ad4eda7199c3e9add8063
|
|
| BLAKE2b-256 |
cbf89c1648215971bf96227688a2174a93679247bd47c7d3a6e5369386272b99
|
File details
Details for the file discord.ext.context-0.1.8-py3-none-any.whl.
File metadata
- Download URL: discord.ext.context-0.1.8-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.7 CPython/3.9.7 Linux/5.14.2-arch1-2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2c2243be868466d43381161d54b3a01aea3c9fe4dc4df27b67457ac51574063
|
|
| MD5 |
4a0b00e7ade941cdbda80d81cc3b1b1f
|
|
| BLAKE2b-256 |
75a5801b212dbed5e34886d4f2f016bde97b915eee1f2ffc18fe55bd8990d05b
|