You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:43:41