反应分页按钮前进和后退python

发布于 2021-01-29 18:19:57

我正在尝试在3个不同的图像之间来回切换按钮,但该按钮在上一个图像中没有回来,只是前进到下一个图像,有人可以帮我吗?

    if message.content.startswith('!image'):

        msg1 = await Bot.send_file(message.channel, 'image1.png')

        toReact = ('⏩')
        for reaction in toReact:
            await Bot.add_reaction(msg1, reaction)
        def checkReaction(reaction, user):
            e = str(reaction.emoji)
            return e.startswith('⏩')
        res = await Bot.wait_for_reaction(message=msg1, user=message.author, timeout=30, check=checkReaction)

        if res is None:
            await Bot.delete_message(msg1)

        elif '⏩' in str(res.reaction.emoji):
            await Bot.delete_message(msg1)
            msg2 = await Bot.send_file(message.channel, 'image2.png')

            toReact = ['⏪', '⏩']
            for reaction in toReact:
                await Bot.add_reaction(msg2, reaction)
            def checkReaction2(reaction, user):
                e = str(reaction.emoji)
                return e.startswith('⏪','⏩')
            res2 = await Bot.wait_for_reaction(message=msg2, user=message.author, timeout=30, check=checkReaction2)

            if res2 is None:
                await Bot.delete_message(msg2)

            elif '⏩' in str(res.reaction.emoji):
                await Bot.delete_message(mensagem2)
                await Bot.send_file(message.channel, 'image3.png')
关注者
0
被浏览
83
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是我想出的。

    基本上,我们有一个循环,可根据所需反应检查每个反应,然后删除旧消息并发送新消息(如果我们看到了所寻找的反应之一)。

    from discord.ext import commands
    
    bot = commands.Bot(command_prefix='!')
    
    left = '⏪'
    right = '⏩'
    
    messages = ("1", "2", "3")
    
    def predicate(message, l, r):
        def check(reaction, user):
            if reaction.message.id != message.id or user == bot.user:
                return False
            if l and reaction.emoji == left:
                return True
            if r and reaction.emoji == right:
                return True
            return False
    
        return check
    
    
    @bot.command(pass_context=True)
    async def series(ctx):
        index = 0
        while True:
            msg = await bot.say(messages[index])
            l = index != 0
            r = index != len(messages) - 1
            if l:
                await bot.add_reaction(msg, left) 
            if r:
                await bot.add_reaction(msg, right)
            # bot.wait_for_reaction
            react, user = await bot.wait_for_reaction(check=predicate(msg, l, r))
            if react.emoji == left:
                index -= 1
            elif react.emoji == right:
                index += 1
            await bot.delete_message(msg)
    
    bot.run("TOKEN")
    

    有人要求提供一种用于编辑消息的版本,而不是发送新消息,我也将其更新为最新版本:

    @bot.command(pass_context=True)
    async def series(ctx):
        index = 0
        msg = None
        action = ctx.send
        while True:
            res = await action(content=messages[index])
            if res is not None:
                msg = res
            l = index != 0
            r = index != len(messages) - 1
            if l:
                await msg.add_reaction(left) 
            if r:
                await msg.add_reaction(right)
            react, user = await bot.wait_for('reaction_add', check=predicate(msg, l, r))
            if react.emoji == left:
                index -= 1
            elif react.emoji == right:
                index += 1
            action = msg.edit
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看