Если бот теряет права после изменения ролей, причина часто в иерархии ролей Discord, правах конкретного канала, кэше участника или неполных intents. Бот может иметь роль, но все равно не иметь права выполнить действие.
Сначала нужно проверить не только роль бота, но и ее положение выше управляемых ролей, права канала и реальные permissions в момент команды.
Коротко: что делать
- Проверить позицию роли бота в иерархии
- Проверить права на конкретном канале
- Проверить, какие permissions видит бот в runtime
- Проверить intents и кеш участников
- Посмотреть ошибку Discord API при отказе
Основные причины
Discord проверяет права не только по наличию роли. Важны канал, иерархия, owner/admin, overwrites и действия над другими ролями.
- Роль бота ниже роли, которой он пытается управлять
- Channel overwrites запрещают действие
- Бот не получает обновления ролей из-за intents или кеша
- Команда проверяет старые права пользователя
- После изменения ролей не обновилась внутренняя конфигурация бота
Пошаговая диагностика
Диагностика должна показать фактические permissions в момент выполнения команды, а не только настройки в интерфейсе Discord.
- Логировать guild, channel, member и permissions при команде
- Проверить Discord API error code
- Сравнить права на разных каналах
- Проверить Gateway Intents в Developer Portal
- Проверить, обновляется ли кеш после role update
Как исправить проблему
Исправление может быть в настройках сервера Discord и в коде бота одновременно.
- Поднять роль бота выше управляемых ролей
- Исправить channel overwrites
- Включить нужные intents и обновление кеша
- Пересчитывать права перед выполнением команды
- Добавить понятное сообщение, если прав не хватает
Безопасный план решения
Сначала проверьте права на тестовом канале и тестовой роли. Не давайте боту Administrator, если достаточно точечных permissions.
Чего не стоит делать
- Не выдавать Administrator без необходимости
- Не хранить права пользователя навсегда в кеше
- Не проверять только роль, игнорируя права канала
- Не скрывать Discord API errors
Что подготовить перед исправлением
- ID сервера и канала
- Какая команда не работает
- Права роли бота
- Логи ошибки или код бота
FAQ
Почему бот админ, но команда не работает?
Даже при широких правах могут мешать иерархия ролей, channel overwrites или ошибка в коде проверки.
Нужен ли privileged intent?
Если бот работает с участниками и ролями, часто нужны соответствующие intents.
Как проверить права программно?
Нужно смотреть resolved permissions для участника и канала в момент выполнения команды.
Когда стоит обратиться за помощью
Помощь нужна, если бот обслуживает модерацию, заявки, роли доступа или платное сообщество, где ошибки прав мешают работе.
Итог
Начните с иерархии ролей и permissions в канале. Если нужно исправить Discord-бота, intents и обработку ролей, можно написать в Telegram @rabotator_support.