Discord.js如何移除指定用户对消息的反应?
如何移除特定用户对Discord消息的反应?
嘿,我来帮你搞定这个问题!你的代码有几个关键细节需要调整,我一步步给你梳理清楚:
问题1:使用了已废弃的方法
你注释里提到现在应该用messages.fetch,但代码里还是写了message.channel.fetchMessage(MessageID)——这是Discord.js v11的旧语法,v12及之后的版本已经把这个方法改成了message.channel.messages.fetch(MessageID),这是第一个需要修正的点。
问题2:移除反应的调用逻辑错误
m.reactions.remove(UserID) 这种写法不符合Discord.js的API规范,ReactionsManager.remove() 方法不能直接传入用户ID。要移除特定用户的反应,你需要先定位到目标反应(如果是特定表情),或者直接操作用户在该消息上的反应集合。
正确的实现方案
根据你的需求,分两种常见场景给出代码:
场景1:移除用户对这条消息的所有反应
// 适配Discord.js v12+版本 message.channel.messages.fetch(MessageID) .then(targetMessage => { // 移除指定用户在该消息上的全部反应 targetMessage.reactions.removeAll({ user: UserID }) .catch(err => console.error('移除反应失败:', err)); }) .catch(err => console.error('获取目标消息失败:', err));
场景2:移除用户对这条消息的特定表情的反应
比如要移除😀表情的反应:
const targetEmoji = '😀'; // 可以是普通表情字符串、自定义表情ID或者Emoji对象 message.channel.messages.fetch(MessageID) .then(targetMessage => { // 从消息的反应缓存中找到目标表情对应的反应对象 const targetReaction = targetMessage.reactions.cache.find(reaction => reaction.emoji.name === targetEmoji); if (targetReaction) { // 移除指定用户的该表情反应 targetReaction.users.remove(UserID) .catch(err => console.error('移除特定表情反应失败:', err)); } else { console.log('未找到目标表情的反应记录'); } }) .catch(err => console.error('获取目标消息失败:', err));
额外注意事项
- 你的机器人需要拥有Manage Messages权限,否则无法执行移除反应的操作;
- 确保
MessageID和UserID都是有效的字符串格式,不要遗漏引号; - 如果使用Discord.js v14版本,上述代码逻辑依然兼容,仅部分方法的参数细节可能有微调,核心流程不变。
内容的提问来源于stack exchange,提问作者Epic Speedy
相关产品推荐
相关产品推荐

