← Все вопросы

Как сделать слэш-команды (/command) в discord.py?

Задан 13 месяцев назад539 просмотров2 ответа
9

Хочу команды, которые показываются в Discord при вводе /, как у нормальных ботов, а не через !. Слышал это называется слэш-команды и app_commands. Как сделать самую простую?

2 ответа

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

Слэш-команды делаются через app_commands и дерево команд, которое надо синхронизировать с Discord:

import discord
from discord import app_commands

intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)

@tree.command(name='привет', description='Поздороваться')
async def привет(interaction: discord.Interaction):
    await interaction.response.send_message('Привет!')

@client.event
async def on_ready():
    await tree.sync()  # регистрируем команды у Discord
    print('Готов')

client.run('ТОКЕН')

Ключевые моменты:

  • При создании ссылки-приглашения нужен scope applications.commands, иначе слэш-команд не будет.
  • На отвечаешь через interaction.response.send_message(...), а не channel.send.
  • После tree.sync() команды могут появиться не мгновенно (глобальные — до часа). Для теста синхронизируй на конкретный сервер через guild=... — там почти сразу.
5

Плюс слэш-команд: им не нужен Message Content Intent, Discord сам передаёт аргументы. Это удобнее и «правильнее» по нынешним правилам Discord, для крупных ботов префиксные команды вообще отмирают.

Ваш ответ

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