根据用户对消息的反应显示另一页信息 (discord.py)

时间:2021-02-02 04:36:48

标签: python arrays discord.py

我有一个机器人,它有一个命令“!ShowInventory”,它会显示玩家的库存,机器人会对库存消息做出反应

msg = await ctx.send(toSend)
await msg.add_reaction("⬅️")
await msg.add_reaction("➡️")

要获得 toSend...

第 1 步:将数组 player.Inventory 拆分为几个较小的数组,如下所示

y = list(chunks(player.Inventory, 4))


def chunks(l, n):
    n = max(1, n)
    return (l[i:i+n] for i in range(0, len(l), n))

输出看起来像这样

Array = [array[items, moreitems, moreitems, moreitems,], array[etc, etc, etc, etc]]

注意:player.Inventory 是一个单独的类 (Inventory = []) 中的数组 (player)

第 2 步: 现在我的新数组看起来像 y = [array[items, moreitems, moreitems, moreitems,], array[etc, etc, etc, etc]],我从这样的子数组中获取项目

for x in list(y[pageNumber - 1]):
        toSend += x + "\n"

(-1 因为第一页存储在索引 0 而不是索引 1)

所以现在 toSend 是一个看起来像的字符串

Items
Items
Items
etc

问题:我想知道我该怎么做

  1. 检查用户何时对消息做出反应
  2. 根据他们的反应表情做一些事情

例如:如果他们用“⬅️”做出反应,机器人将发送一条包含前几页项目的新消息,如果他们用“➡️”做出反应,它将发送一条包含下一页项目的新消息。我也希望这是一个循环,以便用户可以重复这个反应过程以进入上一页/下一页

这是一个冗长的问题,如果您需要任何说明,请随时提出。

1 个答案:

答案 0 :(得分:1)

使用 wait_for

msg = await ctx.send(toSend)
await msg.add_reaction("⬅️")
await msg.add_reaction("➡️")

reaction, user = await bot.wait_for("reaction_add", check=lambda r, u: r.message.id == msg.id)
if str(reaction.emoji) == "⬅️":
    # previous page
elif str(reaction.emoji) == "➡️":
    # next page