Я пытаюсь создать команду discord.py, которая принимает строку в качестве позиционного аргумента.
Как принять строку из сообщения Discord (и, соответственно, логические и целые числа) в качестве аргумента?
# -- snip --
@bot.command()
async def echo(ctx):
"""
Example command to return the input of this command.
"""
# argument name should be called `arg`
await ctx.respond(arg)






Вы смотрели на другие вопросы, касающиеся получения сообщений от бота разногласий?
редактировать: обновленный ответ с учетом обновления вопроса
Хорошо, из того, что я понимаю, вам нужна программа, которая будет что-то делать, когда кто-то пингует ее в раздоре, верно? Я предполагаю что-то вроде @bot play_music Dancing Queen. Не могли бы вы уточнить свой первоначальный вопрос?
У меня есть базовый бот, мои попытки вытащить строку из сообщения как переменную не увенчались успехом. уточню подробнее
Я видел ваше обновление вопроса. Ни в одном из них нет ответа на мой вопрос.
Это буквально первое, что бросается в глаза при чтении введения в команды, вот ссылка
Также вот пример
@bot.command()
async def foo(ctx, arg):
await ctx.send(arg)
# To invoke
# !foo hello
# >>> hello
Он возвращает ошибку. «SyntaxError: неверный синтаксис».
Если вы хотите передать позиционный параметр, вы можете сделать это следующим образом:
async def test(ctx, arg):
await ctx.send(arg)
Затем пользователь может указать аргумент при вызове команды:
$test foo, который имеет выход foo
когда вы хотите передать аргумент с пробелом между ними, вы можете либо просто указать аргумент: $test "foo bar", который имеет вывод foo bar, либо изменить свою команду для обработки неопределенного количества параметров:
@bot.command()
async def test(ctx, *args)
Для работы с целыми числами и логическими значениями вы можете использовать некоторые маленькие хитрости Python. чтобы преобразовать строку, в которой есть только целые числа, вы можете просто преобразовать строку в целое число с помощью int() - если строка должна быть преобразована в логическое значение, вы можете работать со сравнением, например:
s = "Foo"
#<User puts in a value for s>#
s == "Foo" #Returns a boolean value (True if the string matches, False if it does not)
Это довольно просто Если вы хотите принять аргумент без пробелов,
@bot.command()
async def combinestring(ctx, arg: str):
#your code
Если вы хотите принять аргумент с пробелами,
@bot.command()
async def combinestring(ctx, *, arg):
#your code
Сделанный.
Примером может быть что-то вроде команды напоминания. Для этого вы можете сделать следующее:
@client.command()
async def reminder(ctx, time: int, *, message: str):
Время будет целым числом, а сообщение будет строкой.
Не командная строка, аргументы из команды отправлены в Discord. (Вопрос обновлен для ясности.)