Как принять строку в качестве аргумента? (discord.py переписать)

Я пытаюсь создать команду 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)
   
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
2 122
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы смотрели на другие вопросы, касающиеся получения сообщений от бота разногласий?

редактировать: обновленный ответ с учетом обновления вопроса

Не командная строка, аргументы из команды отправлены в Discord. (Вопрос обновлен для ясности.)

Tomodachi94 17.12.2020 09:44

Хорошо, из того, что я понимаю, вам нужна программа, которая будет что-то делать, когда кто-то пингует ее в раздоре, верно? Я предполагаю что-то вроде @bot play_music Dancing Queen. Не могли бы вы уточнить свой первоначальный вопрос?

Joaquim Esteves 17.12.2020 09:52

У меня есть базовый бот, мои попытки вытащить строку из сообщения как переменную не увенчались успехом. уточню подробнее

Tomodachi94 17.12.2020 10:11

Я видел ваше обновление вопроса. Ни в одном из них нет ответа на мой вопрос.

Tomodachi94 17.12.2020 10:49

Это буквально первое, что бросается в глаза при чтении введения в команды, вот ссылка

Также вот пример

@bot.command()
async def foo(ctx, arg):
    await ctx.send(arg)

# To invoke
# !foo hello
# >>> hello

Он возвращает ошибку. «SyntaxError: неверный синтаксис».

Tomodachi94 17.12.2020 10:47
Ответ принят как подходящий

Если вы хотите передать позиционный параметр, вы можете сделать это следующим образом:

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):

Время будет целым числом, а сообщение будет строкой.

Другие вопросы по теме