【问题标题】:message.reaction.count Discord pymessage.reaction.count 不和谐 py
【发布时间】:2021-11-20 00:13:57
【问题描述】:

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

@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." )

机器人会对我想要的消息做出反应,但它不会在审核频道中发布任何内容

我是初学者,对于乱七八糟的代码请见谅:\

【问题讨论】:

    标签: discord.py message


    【解决方案1】:

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

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

    message.reactions 将返回一个列表,您的语句将计算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)
    

    【讨论】:

    • omg message.jump_url 就是这样一个改进!不幸的是,我的脚本仍然有问题,因为 len(message.reaction) 只给出了不同表情符号的数量。我需要的是对机器人添加的相同表情做出反应的人数
    • 啊,是的,对不起,这完全是我的错,因为我没有正确理解你的问题,我已经在上面编辑了我的答案。希望这会有所帮助!
    • 如果 message.reactions[0].count 运行良好,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2021-06-28
    • 2021-09-09
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多