Стоп корутин после реакции на сообщение - PullRequest
1 голос
/ 22 января 2020

Я создаю диск-бот, который отправляет дм, и пользователь должен реагировать на сообщение, чтобы взаимодействовать с ботом.

Прежде всего вы вызываете команду бота с префиксом и именем команды. После этого бот будет отмечен пользователем в сообщении. Бот попросит вас отреагировать с помощью эмодзи, после чего он выполнит некоторые вещи. Проблема в том, что я не знаю, как остановить бот от выполнения этой вещи после первой реакции. Допустим, пользователь реагирует с помощью: thumbsup: -> бот делает что-то, но если вы затем отреагируете с помощью: thumbsdown: (или удалите: thumbsup: и затем отреагируете снова), он продолжит делать это, я этого не хочу произойдет.

@client.command()
async def yesorno(ctx, member: discord.Member, *, content):
    mens = ctx.message.mentions
    mens.append(ctx.author)
    if len(mens) != 2:
        await ctx.send('One user only')
    else:
        # await ctx.author.send(content)
        await member.send(content + ', react either with ?, or ?')

    @client.event
    async def on_reaction_add(reaction, user):
        channel = reaction.message.channel
        if channel == user.dm_channel:
            if str(reaction.emoji) == '?':
                await ctx.send(user.mention + ' accepted')
                return
            elif str(reaction.emoji) == '?':
                await ctx.send(user.mention + ' declined')
                return
    return
...