✅ Система разрешений на команды
PBModular включает в себя гибкую систему разрешений, позволяющую контролировать, какие пользователи могут выполнять определенные команды или запускать определенные обработчики. Это включает в себя как определяемые разработчиком настройки по умолчанию, так и переопределение пользователем (владельцем бота).
Роли и Идентификаторы пользователей
Разрешения могут быть предоставлены на основании:
- Роли: Предопределенные категории пользователей.
owner:Владелец бота, определяемый параметромconfig.owner(может быть именем пользователя или идентификатором пользователя). Владелец неявно имеет доступ ко всем командам, независимо от ограничений.chat_owner:Создатель/владелец чата, в котором используется команда (применяется только в группах/каналах).chat_admins:Администраторы чата, в котором используется команда (применяется только в группах/каналах).all:Любой пользователь (фактически означает отсутствие ограничений на основе роли). Используется в основном для переопределения владельца бота, по умолчанию.- Самостоятельные роли: Владелец бота потенциально может определять и назначать пользователям пользовательские роли через основной модуль или управление базой данных, которые затем могут быть использованы в настройках прав. (Подробнее об этом читайте в функциях основного модуля).
- Специфические пользователи:.
@username:Позволяет конкретному пользователю, идентифицированному по егоимени пользователя.- Идентификатор пользователя: Потенциально разрешает определенный ID пользователя (проверьте детали реализации в
__check_role).
Установка разрешений по умолчанию (@allowed_for)
Как разработчик модуля, вы можете установить разрешения по умолчанию, необходимые для использования обработчика, используя декоратор @allowed_for из base.module. Этот декоратор должен быть размещен перед декораторами обработчиков (@command, @callback_query, @message).
- Он принимает один идентификатор роли/пользователя в виде строки или список разрешенных ролей/идентификаторов.
- Если пользователь удовлетворяет любому из условий (соответствует роли в списке, является владельцем бота и т.д.), ему разрешается доступ.
- Если
@allowed_forне используется в обработчике, то по умолчанию он будет доступен всем пользователям (если только владелец бота не переопределит его для определенных команд).
Примеры:
# Внутри вашего класса BaseModule или ModuleExtension
from base.module import command, callback_query, allowed_for
from pyrogram import filters
# Команда только для администраторов чата и владельца бота
@allowed_for("chat_admins")
@command("kick", filters=filters.group)
async def kick_cmd(self, client: Client, message: Message):
"""Удаляет пользователя из группы."""
# ... реализация ...
# Команда, доступная администраторам чата ИЛИ определенному пользователю @someHelperBot
@allowed_for(["chat_admins", "@someHelperBot"])
@command("warn", filters.group)
async def warn_cmd(self, client: Client, message: Message):
"""Предупреждает пользователя."""
# ... реализация ...
# Запрос обратного вызова только для владельца(ов) бота
@allowed_for("owner")
@callback_query(filters.regex("^admin_action:"))
async def admin_callback(self, client: Client, cb: CallbackQuery):
"""Обрабатывает важные действия администратора с помощью callback."""
# ... реализация ...
# Команда без особых ограничений (по умолчанию доступна для "всех")
@command("ping")
async def ping_cmd(self, _, message: Message):
"""Простая команда ping."""
# ... реализация ...Переопределения владельца бота
Владелец бота обычно имеет команды (предоставляемые основным модулем) для управления разрешениями:
/allow_cmd <команда> <роль_или_пользователь>:Предоставляет разрешение на определенную команду роли или пользователю./disallow_cmd <команда> <роль_или_пользователь>:отменяет разрешение.- Эти переопределения обычно хранятся в основной базе данных бота (таблица
db.CommandPermission) и имеют приоритет над значениями по умолчанию, установленными@allowed_forдля команд.
TIP
В настоящее время переопределение владельца бота через
/allow_cmdобычно применяется только к обработчикам, зарегистрированным с помощью@command. Разрешения, установленные через@allowed_forдля обработчиков@callback_queryили@message, как правило, не могут быть переопределены через команды бота и остаются фиксированными настройками разработчика.Владелец бота всегда обходит проверку разрешений
Используйте @allowed_for с умом, чтобы защитить важные команды, сохраняя при этом доступ к общим функциям. Полагайтесь на документацию и страницы справки, чтобы информировать пользователей о доступности команд.