message.reaction.count 不和谐 py

message.reaction.count Discord py

我正在尝试制作一个简单的机器人,它只会对带附件的消息做出反应。然后在一定时间后,如果它有 2 个或更多反应,它会对消息进行 link 并将其发送到审核频道。

@client.event
async def on_message(message):
  if message.channel.id == 828579458167996420:
    if message.attachments or "http" in message.content:
      msgID = message.id
      await message.add_reaction("<:uut:828580756384120912>")
      await asyncio.sleep(200)
      x = int
      if message.reactions.count(x) >= 3:
        link = 'https://discord.com/channels/11223345678900/828579458167996420/' + str(msgID)
        channel = client.get_channel(892065611876823100)
        x = x - 1
        await channel.send("this post " + str(link) + "is liked " + str(x) + "times." )

机器人对我想要的消息做出反应,但它post在审核频道中没有任何反应

我是初学者,代码乱七八糟:\

如果您没有收到任何类型的错误,问题就出在这里,永远不会触发 if 语句:

x = int
if message.reactions.count(x) >= 3:

message.reactions 将 return 一个列表,您的语句将计算 x 在该列表中的次数(始终为零)。
您想要做的只是获取该列表的总长度,如下所示:

if len(message.reactions) >= 3:

还有其他小改进提示:您可以通过 message.jump_url

获取消息的 URL

编辑:

抱歉,要获得反应计数,您实际上需要做的是搜索要计数的表情符号,或者快捷方式是只获得该列表中的第一个反应,因为您的机器人 应该 是第一个对该消息做出反应的人:

#this will return a list of reactions that match the emoji you want
emoji = [x for x in message.reactions if str(x.emoji) == ''] #replace the emoji with the one you want
print(emoji[0].count) #counts the first (and only) emoji in the new list

“捷径”版,只获取第一反应数:

print(message.reactions[0].count)