@Telmor

Как принять аргумент в команду после её использования в discord.py?

У меня есть код (ниже), и я хочу чтобы человек писать команду (допустим !test1) без аргументов. И после нажатия кнопки бот предлагал ему ввести id или упоминание человека (отдельным сообщением). И приняв этот id он делал с этим человеком те же действия если я бы написал команду: !test1 .

Код:
@bot.command()
async def test1(ctx):
    emb = discord.Embed(title='Принятие', descriptione='Здесь принимается id учасника')
    emb.set_thumbnail(url=ctx.author.avatar_url)
    msg = await ctx.send(embed = emb, 
        components = [
            Button(style = ButtonStyle.gray, label='Выдать Роль'),
            Button(style = ButtonStyle.gray, label='Убрать Роль')
        ])
    responce = await bot.wait_for('button_click', check=lambda message: message.author == ctx.author)
    if responce.component.label == 'Выдать Роль':
        emb = discord.Embed(title='Принятие', descriptione='Здесь принимается id роли')
        emb.set_thumbnail(url=ctx.author.avatar_url)
    if responce.component.label == 'Убрать Роль':
        return

Можете помочь с моим вопросом на примере моего или другого кода?
  • Вопрос задан
  • 861 просмотр
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Это непрактично.

Тебе нужно для каждого пользователя хранить команду, которую он сейчас выполняет, хранить шаг (номер аргумента), на котором он сейчас находится, и хранить ранее введённые данные.

И тогда при получении сообщения:
1. проверять, не является ли сообщение командой, если является - обрабатывать отдельно.
2. определить, какой шаг обработки какой команды сейчас активен для этого пользователя
3. интерпретировать введённое сообщение соответственно.
Ответ написан
Так же, как вы получаете действие с кнопки:
message = await bot.wait_for('message', check=lambda message: message.author == ctx.author and message.channel == ctx.channel) # получаем сообщение от автора команды в исходном канале
role = await commands.RoleConverter().convert(ctx, message.content)  # получаем роль через конвертер
await ctx.send(role.name)  # показываем имя роли в чате
7jNXvr1.png
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы