hikari.impl.event_manager
#
Event handling logic for more info.
EventManagerImpl
#
EventManagerImpl(
entity_factory: EntityFactory,
event_factory: EventFactory,
intents: Intents,
/,
*,
auto_chunk_members: bool = True,
cache: Optional[MutableCache] = None,
)
Bases: EventManagerBase
Provides event handling logic for Discord events.
consume_raw_event
#
consume_raw_event(
event_name: str, shard: GatewayShard, payload: JSONObject
) -> None
Consume a raw event.
PARAMETER | DESCRIPTION |
---|---|
event_name |
The case-insensitive name of the event being triggered.
TYPE:
|
shard |
Object of the shard that received this event.
TYPE:
|
payload |
Payload of the event being triggered.
TYPE:
|
RAISES | DESCRIPTION |
---|---|
LookupError
|
If there is no consumer for the event. |
dispatch
#
Dispatch an event.
PARAMETER | DESCRIPTION |
---|---|
event |
The event to dispatch.
TYPE:
|
Examples:
We can dispatch custom events by first defining a class that
derives from hikari.events.base_events.Event
.
import attrs
from hikari.traits import RESTAware
from hikari.events.base_events import Event
from hikari.users import User
from hikari.snowflakes import Snowflake
@attrs.define()
class EveryoneMentionedEvent(Event):
app: RESTAware = attrs.field()
author: User = attrs.field()
'''The user who mentioned everyone.'''
content: str = attrs.field()
'''The message that was sent.'''
message_id: Snowflake = attrs.field()
'''The message ID.'''
channel_id: Snowflake = attrs.field()
'''The channel ID.'''
We can then dispatch our event as we see fit.
from hikari.events.messages import MessageCreateEvent
@bot.listen(MessageCreateEvent)
async def on_message(event):
if "@everyone" in event.content or "@here" in event.content:
event = EveryoneMentionedEvent(
author=event.author,
content=event.content,
message_id=event.id,
channel_id=event.channel_id,
)
bot.dispatch(event)
This event can be listened to elsewhere by subscribing to it with
hikari.api.event_manager.EventManager.subscribe
.
@bot.listen(EveryoneMentionedEvent)
async def on_everyone_mentioned(event):
print(event.user, "just pinged everyone in", event.channel_id)
RETURNS | DESCRIPTION |
---|---|
Future[Any]
|
A future that can be optionally awaited. If awaited, the future will complete once all corresponding event listeners have been invoked. If not awaited, this will schedule the dispatch of the events in the background for later. |
See Also
Listen : hikari.api.event_manager.EventManager.listen
.
Stream : hikari.api.event_manager.EventManager.stream
.
Subscribe : hikari.api.event_manager.EventManager.subscribe
.
Unsubscribe : hikari.api.event_manager.EventManager.unsubscribe
.
Wait_for: hikari.api.event_manager.EventManager.wait_for
.
get_listeners
#
get_listeners(
event_type: Type[EventT], /, *, polymorphic: bool = True
) -> Collection[CallbackT[EventT]]
Get the listeners for a given event type, if there are any.
PARAMETER | DESCRIPTION |
---|---|
event_type |
The event type to look for.
TYPE:
|
polymorphic |
If
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Collection[Callable[[T], Coroutine[Any, Any, None]]]
|
A copy of the collection of listeners for the event. Will return an empty collection if nothing is registered. |
listen
#
Generate a decorator to subscribe a callback to an event type.
This is a second-order decorator.
PARAMETER | DESCRIPTION |
---|---|
*event_types |
The event types to subscribe to. The implementation may allow this
to be undefined. If this is the case, the event type will be inferred
instead from the type hints on the function signature.
|
RETURNS | DESCRIPTION |
---|---|
Callable[[T], T]
|
A decorator for a coroutine function that passes it to
|
See Also
Dispatch : hikari.api.event_manager.EventManager.dispatch
.
Stream : hikari.api.event_manager.EventManager.stream
.
Subscribe : hikari.api.event_manager.EventManager.subscribe
.
Unsubscribe : hikari.api.event_manager.EventManager.unsubscribe
.
Wait_for : hikari.api.event_manager.EventManager.wait_for
.
on_channel_create
async
#
on_channel_create(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#channel-create for more info.
on_channel_delete
async
#
on_channel_delete(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#channel-delete for more info.
on_channel_pins_update
async
#
on_channel_pins_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#channel-pins-update for more info.
on_channel_update
async
#
on_channel_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#channel-update for more info.
on_guild_audit_log_entry_create
async
#
on_guild_audit_log_entry_create(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-audit-log-entry-create for more info.
on_guild_ban_add
async
#
on_guild_ban_add(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-ban-add for more info.
on_guild_ban_remove
async
#
on_guild_ban_remove(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-ban-remove for more info.
on_guild_create
async
#
on_guild_create(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-create for more info.
on_guild_delete
async
#
on_guild_delete(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-delete for more info.
on_guild_emojis_update
async
#
on_guild_emojis_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-emojis-update for more info.
on_guild_integrations_update
async
#
on_guild_integrations_update(_: GatewayShard, __: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-integrations-update for more info.
on_guild_member_add
async
#
on_guild_member_add(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-member-add for more info.
on_guild_member_remove
async
#
on_guild_member_remove(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-member-remove for more info.
on_guild_member_update
async
#
on_guild_member_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-member-update for more info.
on_guild_members_chunk
async
#
on_guild_members_chunk(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-members-chunk for more info.
on_guild_role_create
async
#
on_guild_role_create(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-role-create for more info.
on_guild_role_delete
async
#
on_guild_role_delete(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-role-delete for more info.
on_guild_role_update
async
#
on_guild_role_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-role-update for more info.
on_guild_scheduled_event_create
async
#
on_guild_scheduled_event_create(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-create for more info.
on_guild_scheduled_event_delete
async
#
on_guild_scheduled_event_delete(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-delete for more info.
on_guild_scheduled_event_update
async
#
on_guild_scheduled_event_update(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-update for more info.
on_guild_scheduled_event_user_add
async
#
on_guild_scheduled_event_user_add(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-user-add for more info.
on_guild_scheduled_event_user_remove
async
#
on_guild_scheduled_event_user_remove(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-scheduled-event-user-remove for more info.
on_guild_stickers_update
async
#
on_guild_stickers_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-stickers-update for more info.
on_guild_update
async
#
on_guild_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#guild-update for more info.
on_interaction_create
async
#
on_interaction_create(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#interaction-create for more info.
on_invite_create
async
#
on_invite_create(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#invite-create for more info.
on_invite_delete
async
#
on_invite_delete(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#invite-delete for more info.
on_message_create
async
#
on_message_create(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-create for more info.
on_message_delete
async
#
on_message_delete(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-delete for more info.
on_message_delete_bulk
async
#
on_message_delete_bulk(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-delete-bulk for more info.
on_message_reaction_add
async
#
on_message_reaction_add(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-reaction-add for more info.
on_message_reaction_remove
async
#
on_message_reaction_remove(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove for more info.
on_message_reaction_remove_all
async
#
on_message_reaction_remove_all(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-all for more info.
on_message_reaction_remove_emoji
async
#
on_message_reaction_remove_emoji(
shard: GatewayShard, payload: JSONObject
) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-reaction-remove-emoji for more info.
on_message_update
async
#
on_message_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#message-update for more info.
on_presence_update
async
#
on_presence_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#presence-update for more info.
on_ready
async
#
on_ready(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#ready for more info.
on_resumed
async
#
on_resumed(shard: GatewayShard, _: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#resumed for more info.
on_thread_create
async
#
on_thread_create(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#thread-create for more info.
on_thread_delete
async
#
on_thread_delete(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#thread-delete for more info.
on_thread_list_sync
async
#
on_thread_list_sync(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#thread-list-sync for more info.
on_thread_members_update
async
#
on_thread_members_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#thread-members-update for more info.
on_thread_update
async
#
on_thread_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#thread-update for more info.
on_typing_start
async
#
on_typing_start(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#typing-start for more info.
on_user_update
async
#
on_user_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#user-update for more info.
on_voice_server_update
async
#
on_voice_server_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#voice-server-update for more info.
on_voice_state_update
async
#
on_voice_state_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#voice-state-update for more info.
on_webhooks_update
async
#
on_webhooks_update(shard: GatewayShard, payload: JSONObject) -> None
See https://discord.com/developers/docs/topics/gateway-events#webhooks-update for more info.
stream
#
stream(
event_type: Type[EventT],
/,
timeout: Union[float, int, None],
limit: Optional[int] = None,
) -> EventStream[EventT]
Return a stream iterator for the given event and sub-events.
Warning
If you use [await stream.open()][] to start the stream then you must also close it with [await stream.close()][] otherwise it may queue events in memory indefinitely.
PARAMETER | DESCRIPTION |
---|---|
event_type |
The event type to listen for. This will listen for subclasses of this type additionally. |
timeout |
How long this streamer should wait for the next event before
ending the iteration. If |
limit |
The limit for how many events this should queue at one time before
dropping extra incoming events, leave this as |
RETURNS | DESCRIPTION |
---|---|
EventStream[Event]
|
The async iterator to handle streamed events. This must be started
with |
Examples:
with bot.stream(events.ReactionAddEvent, timeout=30).filter(("message_id", message.id)) as stream:
async for user_id in stream.map("user_id").limit(50):
...
or using open()
and close()
stream = bot.stream(events.ReactionAddEvent, timeout=30).filter(("message_id", message.id))
stream.open()
async for user_id in stream.map("user_id").limit(50)
...
stream.close()
See Also
Dispatch : hikari.api.event_manager.EventManager.dispatch
.
Listen : hikari.api.event_manager.EventManager.listen
.
Subscribe : hikari.api.event_manager.EventManager.subscribe
.
Unsubscribe : hikari.api.event_manager.EventManager.unsubscribe
.
Wait_for : hikari.api.event_manager.EventManager.wait_for
.
subscribe
#
Subscribe a given callback to a given event type.
PARAMETER | DESCRIPTION |
---|---|
event_type |
The event type to listen for. This will also listen for any
subclasses of the given type.
TYPE:
|
callback |
Must be a coroutine function to invoke. This should consume an instance of the given event, or an instance of a valid subclass if one exists. Any result is discarded.
TYPE:
|
Examples:
The following demonstrates subscribing a callback to message creation events.
from hikari.events.messages import MessageCreateEvent
async def on_message(event):
...
bot.subscribe(MessageCreateEvent, on_message)
See Also
Dispatch : hikari.api.event_manager.EventManager.dispatch
.
Listen : hikari.api.event_manager.EventManager.listen
.
Stream : hikari.api.event_manager.EventManager.stream
.
Unsubscribe : hikari.api.event_manager.EventManager.unsubscribe
.
Wait_for : hikari.api.event_manager.EventManager.wait_for
.
unsubscribe
#
Unsubscribe a given callback from a given event type, if present.
PARAMETER | DESCRIPTION |
---|---|
event_type |
The event type to unsubscribe from. This must be the same exact
type as was originally subscribed with to be removed correctly.
TYPE:
|
callback |
The callback to unsubscribe.
TYPE:
|
Examples:
The following demonstrates unsubscribing a callback from a message creation event.
from hikari.events.messages import MessageCreateEvent
async def on_message(event):
...
bot.unsubscribe(MessageCreateEvent, on_message)
See Also
Dispatch : hikari.api.event_manager.EventManager.dispatch
.
Listen : hikari.api.event_manager.EventManager.listen
.
Stream : hikari.api.event_manager.EventManager.stream
.
Subscribe : hikari.api.event_manager.EventManager.subscribe
.
Wait_for : hikari.api.event_manager.EventManager.wait_for
.
wait_for
async
#
wait_for(
event_type: Type[EventT],
/,
timeout: Union[float, int, None],
predicate: Optional[PredicateT[EventT]] = None,
) -> EventT
Wait for a given event to occur once, then return the event.
Warning
Async predicates are not supported.
PARAMETER | DESCRIPTION |
---|---|
event_type |
The event type to listen for. This will listen for subclasses of this type additionally. |
predicate |
A function taking the event as the single parameter.
This should return
TYPE:
|
timeout |
The amount of time to wait before raising an |
RETURNS | DESCRIPTION |
---|---|
Event
|
The event that was provided. |
RAISES | DESCRIPTION |
---|---|
TimeoutError
|
See Also
Dispatch : hikari.api.event_manager.EventManager.dispatch
.
Listen : hikari.api.event_manager.EventManager.listen
.
Stream : hikari.api.event_manager.EventManager.stream
.
Subscribe : hikari.api.event_manager.EventManager.subscribe
.
Unsubscribe : hikari.api.event_manager.EventManager.unsubscribe
.