【问题标题】:Get the user who triggered the on_raw_reaction_remove(payload)获取触发 on_raw_reaction_remove(payload) 的用户
【发布时间】:2021-07-30 21:02:51
【问题描述】:

我正在使用async def on_raw_reaction_remove(payload) 来跟踪用户何时删除了反应。 如何获取触发事件的用户?在我的代码中,我的机器人通过在某些情况下删除反应来触发此事件 - 但是当这种情况发生时user = await client.fetch_user(user_id) 总是等于对删除的反应做出反应的用户而不是删除它的机器人(我需要获取机器人当机器人删除某人的反应时作为用户,所以我可以说 if user == bot: return 我也试过了

message = await channel.fetch_message(payload.message_id)
guild = message.guild
member = await guild.fetch_member(payload.user_id)

但它是相同的.. 成员始终指向已删除反应的所有者,而不是删除反应的机器人... 使用 on_raw_reaction_remove 时,我怎样才能得到消除反应的人?

(如果相关 - 我在 discord 的开发者门户中启用了意图并更新了我的代码

intents = discord.Intents.all()
client = discord.Client(intents=intents)

感谢您的帮助,我已经在这方面浪费了很多时间:皱眉:(不和谐 api 的新手)

【问题讨论】:

  • 这其实不是discords API提供的,所以没办法做到这一点。
  • @Chuaat 没有直接的方法,但我的回答中有一种方法

标签: python discord discord.py


【解决方案1】:

答案是——discord python API 中没有任何东西可以告诉你是谁删除了反应。

对于我的情况,我通过一种解决方法解决了这个问题 - 我只需要跟踪我的机器人是否删除了一个带有变量的反应 - 我正在使用一个全局变量来跟踪我的机器人何时删除了一个反应,然后稍后再检查是否变量是TrueFalse 并做出相应的响应并重新设置变量。

谢谢

【讨论】:

    【解决方案2】:

    在这种情况下我所做的是:

    guild = discord.utils.find(lambda g: g.id == payload.guild_id, bot.guilds)
    member = discord.utils.find(lambda m: m.id == payload.user_id, guild.members)
    

    您现在只需将其构建到您的代码中

    【讨论】:

    • 正如 OP 在他的问题中所说,这将返回谁添加了被删除的反应的 id。
    • 这应该返回一个成员而不是一个 ID,如果这返回一个 ID,我建议重新安装或类似的东西,因为它不可能返回一个 ID 而不是一个成员
    • 不幸的是,我也尝试过..成员与用户相同。 (被删除的反应的所有者):(
    • 只是一个建议@masky007;如果你做得对,这 100% 有效,如果你得到了添加它的用户的有效负载,那么你做错了什么。或者,如果您尝试根据消息(您在问题中提到的内容)获取公会,您得到的结果将会发生。如果您可以使用on_raw_reaction_remove 函数中最重要的代码编辑您的问题,也许会很好
    • 嗯@FlexGames 我会再次测试它,稍后会报告。谢谢
    猜你喜欢
    • 2021-01-16
    • 2022-11-09
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多