discord.py Как создавать глобальные Slash-команды?
Я пытался найти нормальный ответ на вопрос в интернете, но так ничего и не понял. На данный момент у меня есть вот этот код для команд:
# ...
@bot.tree.command(
name='help',
description='Команда для помощи по боту'
)
@app_commands.describe(command='Указывает, по какой конкретной команде нужна помощь')
async def cmd_help(interaction, command: str = ''):
await cmd_handlers['help'](interaction, interaction.command.name, [command], True)
# ----------------------------------------------------------------------------------------
@bot.tree.command(
name='restart',
description='Команда для перезапуска бота',
guild=discord.Object(id=1096677139450966036)
)
async def cmd_restart(interaction):
await cmd_handlers['restart'](interaction, interaction.command.name, [], True)
# ----------------------------------------------------------------------------------------
@bot.tree.command(
name='приветствовать',
description='Команда для того, чтобы поприветствовать кому-нибудь'
)
@app_commands.describe(target='Устанавливает цель для приветствия')
async def cmd_hello(interaction, target: str):
await cmd_handlers['приветствовать'](interaction, interaction.command.name, [target], True)
# ...
Словарь cmd_handlers включает в себя:
from commands import help, restart, hello
cmd_handlers = {
'help': help.handler,
'restart': restart.handler,
'приветствовать': hello.handler
}
Однако, важно не это, а то, что единственное, что появляется, - команда /restart, остальное же не появляется:

Как раз для этой команды указан guild, однако, для остальных команд этот самый guild не нужен. Так как же сделать Slash-команду глобальной? На заметку: я пробовал делать для них guild, и они таинственным образом появлялись в том списке, но стоило мне его убрать, как всё тут же пропало...
Здесь я синхронизирую команды:
@bot.event
async def on_ready():
printE('Синхронизируем Slash-команды...')
synced = await bot.tree.sync(guild=discord.Object(id=1096677139450966036))
printE(f'Синхронизировано {len(synced)} команд!')
printE('Бот запущен!')
Ответы (1 шт):
Мне не следовало указывать guild при синхронизации команд:
@bot.event
async def on_ready():
printE('Синхронизируем Slash-команды...')
synced = await bot.tree.sync('--здесь был удалён параметр guild--')
printE(f'Синхронизировано {len(synced)} команд!')
printE('Бот запущен!')
Итог: невнимательность – всему проблема ?