从特定消息中删除特定用户反应 - Discord.js
Posted
技术标签:
【中文标题】从特定消息中删除特定用户反应 - Discord.js【英文标题】:Remove a specific user reaction from a specific message - Discord.js 【发布时间】:2021-05-18 03:35:13 【问题描述】:希望你能帮上忙。这一直让我发疯。我是编程和 JS 的新手,但我正在制作一个不和谐的机器人作为一个爱好项目。如果我没有使用正确的术语,请原谅我,但我认为我的问题实际上应该很简单。
我有一个机器人可以构建带有嵌入的消息。该机器人通过收集器进行侦听,并根据他们的反应将玩家添加到嵌入的字段中。例如,请参见屏幕截图。玩家可以将自己添加到“Farming”“Not Farming”或“Starter”中
Screenshot of bot's post
当我发布初始嵌入时,我会清除频道中的所有置顶消息并置顶此消息,因此带有我状态嵌入的帖子将始终是频道中唯一置顶的帖子。
我想做的是输入一个类似“!placed @user”的命令,并且@提到的用户应该从原始帖子中删除他们的反应。获取消息 ID 和用户 ID 没有问题,但我似乎无法将两者结合起来以消除他们的反应。这是我的代码的摘录:
message.channel.messages.fetchPinned().then(messages =>
console.log(`Received $messages.size messages`);
var testuserid = message.mentions.users.first().id;
messages.forEach(message =>
message.reactions.resolve("????").users.remove(testuserid);
)
)
问题是最后一行message.reactions.resolve
。我已经尝试过使用表情符号字符或代码、硬编码用户 ID 等的各种组合
我似乎总是以类似以下的错误告终:
UnhandledPromiseRejectionWarning:TypeError:无法读取属性 null 的“用户”
message.reactions.removeAll()
确实有效,但会删除包括机器人在内的所有反应。
我从here 获得了此代码,但尝试了许多其他代码组合,包括this one,我似乎根本无法工作(与不在异步函数中有关)。
请告诉我我遗漏了一些简单的东西!
【问题讨论】:
【参考方案1】:我不知道您是否查看过 the docs 的 message.reactions.resolve()
方法,但您尝试使用它的方式并不完全正确(而且不是t 打算如何使用)。 message.reactions.resolve()
只接受两种不同类型的参数:MessageReaction
对象或 Snowflake
(具体消息反应的 ID——注意这里不是指表情符号的 ID 或值,而是具体的反应本身)。
所以基本上,.resolve()
方法应该将 ID 转换为对象。因此,如果您有一条 ID 为 811386028425609247
的消息并且您执行 messages.resolve(811386028425609247)
,它将返回 ID 为的特定消息。 (当然,这是一个带有消息而不是消息反应的示例)。就您而言,这也不是您想要做的。 .resolve()
将用于使用您没有的该反应的 ID 获取单个特定反应。
请注意,我指的是反应本身的 ID,而不是正在反应的表情符号的 ID。如果我要对两条不同的消息使用 ? 做出反应,则两者的 emoji ID 将相同(因为它们是相同的 emoji),但反应 ID 会不同(因为它们是两个独立的反应)。
您真正想要做的是找到对消息做出反应的特定表情,然后删除做出反应的用户。所以你真正要找的是这样的:
message.reactions.cache.find(reaction => reaction.emoji.name == "?").users.remove(testuserid);
这行新代码的作用是查看消息上的反应,找到带有 ? 表情符号的反应,然后从该反应中删除用户。只是为了好玩,我将添加您的旧代码行正在执行的操作:它正在寻找 ID 为“?”的特定反应,这当然不存在,并试图从该不存在的反应中删除用户(因此你得到的错误是:Cannot read property 'users' of null
,因为反应本身不存在,因此null
)。
【讨论】:
以上是关于从特定消息中删除特定用户反应 - Discord.js的主要内容,如果未能解决你的问题,请参考以下文章
如何获取对特定消息做出反应的用户的不和谐 ID discord.js