@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)
  • Вопрос задан
  • 102 просмотра
Решения вопроса 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


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

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

Войти через центр авторизации
Похожие вопросы
28 апр. 2024, в 21:29
3000 руб./за проект
28 апр. 2024, в 20:09
9000 руб./за проект
28 апр. 2024, в 19:54
2000 руб./за проект