@Slaffek

Как сделать, чтобы действия были при определённой роли?

Как сделать, чтобы действия были выполнены ботом при определённой роли?
То есть, у меня есть роль "Владелец", и нужно, чтобы только я должен был навешивать варны. Объясните всё построчно, я не понимаю, очень долго пытаюсь решить вроде лёгкую проблему.
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Вообще зашивать роли в бота это плохая идея, поэтому следующий код прикладываю в дидактических целях и призываю его не использовать.

Для проверки ролей в checks есть два декоратора checks.has_role и checks.has_any_role

Применяются следующим образом
@client.command()
@app_commands.checks.has_any_role('Library Devs', 'Moderators', 492212595072434186)
async def cool(interaction: discord.Interaction):
    await interaction.response.send_message('Сообщение увидит только человек с соответствующей ролью')

Не забудьте обработать ошибки MissingRole и MissingAnyRole чтобы выдавать корректные сообщения об отсутствии прав.

Почему я считаю что это решение плохое: роли склонны меняться.
Если это крупный мультисерверный бот, с какими-то кастомными настройками ролей, обычно настройки дополнительно хранятся в БД и роли проверяются по ней в самой команде.

В общем же виде лучше отталкиваться не от ролей, а от прав, проверка делается через checks.has_permissions, а для более тонкой настройки на сервере зайди в настройки - интеграция и там можно поправить права под каждую команду. В отличии от варианта с ролями это не требует обновлений бота.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы