← Все вопросы
Как сделать слэш-команды (/command) в discord.py?
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, для крупных ботов префиксные команды вообще отмирают.
Ваш ответ
Войдите, чтобы ответить на вопрос.