← Все вопросы

Слэш-команды в discord.py не появляются в Discord после sync — что не так?

Задан 27 месяцев назад1.3к просмотров2 ответа
7

Сделал слэш-команду, вызываю await tree.sync(), бот запускается без ошибок, но при вводе / в Discord моих команд нет. Что я упускаю?

2 ответа

12
✓ Принятый ответ — помог автору

Самые частые причины, по порядку проверки:

  1. Нет scope applications.commands в приглашении. Если ты звал бота только со scope bot, слэш-команд не будет. Пересоздай ссылку в OAuth2 → URL Generator с галочками bot + applications.commands и заново авторизуй бота на сервере.
  2. Глобальная синхронизация медленная. 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)
  1. Команда объявлена после sync или ты забыл декоратор @tree.command.

Начни с пункта 1 — отсутствие applications.commands это причина №1.

4

Лайфхак: не зови tree.sync() при каждом запуске бота на проде — у Discord есть лимиты на регистрацию команд. Синхронизируй вручную (например по отдельной команде только для себя), когда реально поменял набор команд.

Ваш ответ

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