ekonda / kutana

The library for developing systems for messengers and social networks
MIT License
72 stars 17 forks source link

[Вопрос] Реализация проверки триггера определенного декоратора во всех плагинах. #60

Closed daeeros closed 3 years ago

daeeros commented 3 years ago

Возник такой вопрос, каким образом можно реализовать проверку - когда хотя бы один из декораторов on_commands во всех плагинах стригерился. Но, при этом проверять это в декораторе у которого приоритет выше всех и срабатывает он в первую очередь, в нашем случае on_messages(priority=10). Подскажите правильный ход реализации данной конструкции. Спасибо :3

michaelkryukov commented 3 years ago

В первую очередь нужно понять, какой смысл в этом, зачем это необходимо. После этого уже можно будет обсуждать возможные способы выполнения вашей задачи. Пока звучит не очень выполнимо

daeeros commented 3 years ago

Мне требуется реализовать систему блокировки пользователя, но проверять блокировку тогда когда стригерилась одна из команд во всех плагинах, нужно понять как это реализовать, был вариант сделать список один из всех команд и проверять оттуда, но не сильный костыль это?

michaelkryukov commented 3 years ago

Для системы блокировки можно просто проверять наличие префикса (он доступен в конфигурации приложения) в сообщении. Это легче реализовать и поддерживать.

Альтернативно можно попытаться достать из инициированного глобального роутера комманд. Там будет примерно такой код, чтобы получить обработчики для данного апдейта с контекстом self._handlers.get(self._get_keys(update, ctx)). Этот вариант, как и ручную сборку всех команд, сложно поддерживать, поэтому я бы порекомендовал именно способ из первого абзаца.

Если он не подходит, есть ещё другой вариант - добавить декоратор, который будет выполнять необходимые проверки, и вручную добавить его на все обработчики в плагинах.