分页-Discord.py重写

时间:2020-03-26 23:18:17

标签: discord.py discord.py-rewrite

我一直试图做出一个显示一些信息的命令,然后,当我对一个表情做出反应时,它应该显示另一组信息。

我尝试使用this的某些部分,特别是第335至393行中的部分 使它工作。但是,它什么也没做。甚至没有错误消息。

这是我现在使用的代码。

        def check_react(reaction, user):
        if reaction.message.id != msg.id:
            return False
        if user != ctx.message.author:
            return False
        return True
    res, user = await bot.wait_for('reaction_add', check=check_react, timeout=None,)
    if user != ctx.message.author:
        print('if user != ctx.message.author:')
    elif '⬅️' in str(res.emoji):
        page -=1
        print(page)
        embed = discord.Embed(title='generic title', description='generic description', color=0x52fffc)
        await msg.edit(embed=embed)
    elif '➡️' in str(res.emoji):
        page +=1
        print(page)
        embed = discord.Embed(title='generic title 2', description='generic description 2', color=0x52fffc)
        await msg.edit(embed=embed)

它似乎停在了

await bot.wait_for('reaction_add',..)

那是为什么?以及如何使代码正常工作?多数民众赞成在一个齿轮。如有需要,我会提供更多代码。

2 个答案:

答案 0 :(得分:2)

更好和更容易的方法是使用DiscordUtils

这里是一个例子:

@commands.command()
async def paginate(self, ctx):
    embed1 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 1")
    embed2 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 2")
    embed3 = discord.Embed(color=ctx.author.color).add_field(name="Example", value="Page 3")
    paginator = DiscordUtils.Pagination.CustomEmbedPaginator(ctx, remove_reactions=True)
    paginator.add_reaction('⏮️', "first")
    paginator.add_reaction('⏪', "back")
    paginator.add_reaction('?', "lock")
    paginator.add_reaction('⏩', "next")
    paginator.add_reaction('⏭️', "last")
    embeds = [embed1, embed2, embed3]
    await paginator.run(embeds)

答案 1 :(得分:0)

忘记了这一点,我终于明白了。这是我的操作方式:

首先,我将页面的所有内容放入列表中。每个条目都是一页。

然后,我定义一个将用作检查的函数。这将把响应侦听器限制为已发送的实际嵌入,并阻止除命令调用程序之外的任何人响应。抱歉,出现任何格式错误。

def check(reaction, user):
   return reaction.message.id == msg.id and user == ctx.author #msg.id is the id of the embed sent by the bot.

page = 0

while True: #can be changed to a variable to let it work a certain amount of times.
   try:
       reaction, _ = await bot.wait_for('reaction_add', timeout= 20.0, check=check)
       if reaction.emoji == 'emote of choice here' and page > 0:
           page -= 1
           embed = discord.Embed(title='Title Here', description=pages[page]
           await msg.edit(embed=embed)
       if reaction.emoji == 'emote of choice here' and page < len(pages) -1:
           page += 1
           embed = discord.Embed(title='Title Here', description= pages[page]
           await msg.edit(embed=embed)
   except asyncio.TimeoutError:
      #do stuff here, could be pass or a message saying the timeout has been reached or something similar.