События
Помимо того, что в своих расширения вы можете обрабатывать уже имеющиеся события, вы можете создавать и обрабатывать собственными события.
Работа с событиями достаточно простая, для начала вы определяете событие, подключаете к нему обработчик и наконец вызываете его, чтобы оно улетело в обработчик.
Определение
Заголовок раздела «Определение»По умолчанию события представляют собой класс-наследник от 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_dependenciesasync def on_level_up( event: LevelUpEvent, config: LevelsConfig = arc.inject(), at: ActiveTable = arc.inject(),) -> None: