Skip to main content

Дополнения

Вопросы, касающиеся disnake.ext.commands, disnake.ext.tasks и disnake.ui, относятся к этому разделу.

Примечание

Это содержание было взято непосредственно из документации и наследуется от discord.py . Скорее всего, в будущем оно будет переписано.

Почему событие on_message делает мои текстовые команды не рабочими?

Создание события on_message запрещает выполнение любых команд. Чтобы исправить это, добавьте строку bot.process_commands(message) в конце вашего on_message. Например:

@bot.event
async def on_message(message):
# Выполняйте здесь свои вещи

await bot.process_commands(message)

В качестве альтернативы вы можете поместить свою логику on_message в прослушиватель. В этой настройке вы не должны вручную вызывать bot.process_commands(). Это также позволяет вам выполнять несколько действий асинхронно в ответ на сообщение. Пример:

@bot.listen("on_message")
async def whatever_you_want_to_call_it(message):
await do_stuff_here()
# Не обрабатывайте здесь команды

Почему мои аргументы требуют кавычек?

В простой команде, определенной как:

@bot.command()
async def echo(ctx, message: str):
await ctx.send(message)

Вызов его через ?echo a b c приведет только к получению первого аргумента и игнорированию остальных. Чтобы исправить это, вы должны либо вызвать его через ?echo "a b c", либо изменить сигнатуру, чтобы иметь поведение на "consumerest". Пример:

@bot.command()
async def echo(ctx, *, message: str):
await ctx.send(message)

Это позволит вам использовать ?echo a b c без необходимости использования кавычек.

Как мне получить исходное message?

Объект Context содержит атрибут message дял получения исходного сообщения.

Пример:

@bot.command()
async def length(ctx):
await ctx.send(f"Длина вашего сообщения - {len(ctx.message.content)} символов.")

Как мне создать текстовую подкоманду?

Используйте декоратор group(). Он преобразует команду в Group, который позволит вам добавлять команды в эту группу, работающие как "подкоманды". Эти группы также могут быть произвольно вложены.

Пример:

@bot.group()
async def git(ctx):
if ctx.invoked_subcommand is None:
await ctx.send("Вызвана недопустимая команда git...")


@git.command()
async def push(ctx, remote: str, branch: str):
await ctx.send(f"Фиксирование в {remote} {branch}.")

Это может быть вызвано как ?git push origin master.

Какие компоненты я могу использовать с модальными окнами?

Единственным компонентом, который в настоящее время можно использовать с модальными окнами, является TextInput. На данный момент API не имеет интеграции для каких-либо других входных данных.

Модальные окна поддерживают автозаполнение?

Модальные окна (или текстовый ввод) не поддерживают автозаполнение. Это ограничение Discord.