← Все вопросы
Слэш-команды в discord.py не появляются в Discord после sync — что не так?
7
Сделал слэш-команду, вызываю await tree.sync(), бот запускается без ошибок, но при вводе / в Discord моих команд нет. Что я упускаю?
2 ответа
12
✓ Принятый ответ — помог автору
Самые частые причины, по порядку проверки:
- Нет scope applications.commands в приглашении. Если ты звал бота только со scope
bot, слэш-команд не будет. Пересоздай ссылку в OAuth2 → URL Generator с галочками bot + applications.commands и заново авторизуй бота на сервере. - Глобальная синхронизация медленная.
tree.sync()без аргументов регистрирует команды глобально — они могут появляться до часа. Для теста синхронизируй на конкретный сервер, там почти мгновенно:
MY_GUILD = discord.Object(id=ТВОЙ_ID_СЕРВЕРА)
@client.event
async def on_ready():
client.tree.copy_global_to(guild=MY_GUILD)
await client.tree.sync(guild=MY_GUILD)
- Команда объявлена после sync или ты забыл декоратор
@tree.command.
Начни с пункта 1 — отсутствие applications.commands это причина №1.
4
Лайфхак: не зови tree.sync() при каждом запуске бота на проде — у Discord есть лимиты на регистрацию команд. Синхронизируй вручную (например по отдельной команде только для себя), когда реально поменял набор команд.
Ваш ответ
Войдите, чтобы ответить на вопрос.