К содержимому

События

Помимо того, что в своих расширения вы можете обрабатывать уже имеющиеся события, вы можете создавать и обрабатывать собственными события.

Работа с событиями достаточно простая, для начала вы определяете событие, подключаете к нему обработчик и наконец вызываете его, чтобы оно улетело в обработчик.

По умолчанию события представляют собой класс-наследник от hikari.Event. Для вашего удобства Шиори предоставляет ChioEvent и DBEvent с подстановкой необходимых полей.

События создаются в библиотеке, чтобы все расширения могли создавать обработчик для них.

Чтобы вызвать событие, обратитесь к event_manager у объекта GatewayClient.

Вот как это можно сделать из базы данных:

self._db.client.app.event_manager.dispatch(LevelUpEvent(self._db, user))

В dispatch вам нужно передать событие, которое вы собираетесь вызвать.

Для того чтобы реагировать на события, вам нужно повесить на него обработчик. Обработчики можно вешать как через плагин, так и через клиент.

Вот обработчик для ранее созданного события.

@plugin.listen(LevelUpEvent)
async def on_level_up(event: LevelUpEvent) -> None:

Если вам нужно использовать DI:

@plugin.listen(LevelUpEvent)
@plugin.inject_dependencies
async def on_level_up(
event: LevelUpEvent,
config: LevelsConfig = arc.inject(),
at: ActiveTable = arc.inject(),
) -> None: