Вообще зашивать роли в бота это плохая идея, поэтому следующий код прикладываю в дидактических целях и призываю его не использовать.
Для проверки ролей в 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, а для более тонкой настройки на сервере зайди в настройки - интеграция и там можно поправить права под каждую команду. В отличии от варианта с ролями это не требует обновлений бота.