@DF0rig
clay

Я хочу написать команду, которая принимает аргументы после команды, а после вывела их. Как это реализовать?

К примеру я пишу c!test без аргументов. После этого бот пишет "Введите текст" новым сообщением. Далее я пишу к примеру "1 2 3", и после этого бот выводит сообщение "Вы ввели 1, 2, 3".
Сразу же извините если чего то не понимаю, только начинаю изучать discord.py :D
@bot.command()
async def test(ctx):
	emb = discord.Embed(title='Введите текст')
	await ctx.author.send(embed=emb)
	def check(m):
        return m.author == ctx.message.author and m.guild is None
	while True:
        text = await bot.wait_for('message', check=check)
	emb = discord.Embed(title = 'Вы ввели ' + text)
	await ctx.author.send(embed=emb)
  • Вопрос задан
  • 103 просмотра
Решения вопроса 2
  1. Уберите while True - бесконечные циклы в асинхронном коде зачастую плохая идея (кроме пары отдельных случаев)
  2. Функция wait_for возвращает аргументы события (для on_message - это единственный аргумент message).

@bot.command()
async def test(ctx):
    emb = discord.Embed(title='Введите текст')
    await ctx.author.send(embed=emb)
    def check(m):
        return m.author == ctx.message.author and m.guild is None
    message = await bot.wait_for('message', check=check) # 1
    emb = discord.Embed(title = 'Вы ввели ' + message.content) #2
    await ctx.author.send(embed=emb)
Ответ написан
Комментировать
@DF0rig Автор вопроса
clay
Если нужен вариант попроще, можете использовать более кратки вариант:
msg_content= await bot.wait_for('message', check=lambda message: message.author == ctx.author)
msg = msg_content.content


Однако вы можете так же использовать вариант Максим Невзоров
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы