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

Discord Reaction Role无法分配角色,求助代码排查

Discord Reaction Role 故障排查与修复

你的代码存在几个关键问题导致messageReactionAdd事件无法正常工作,以下是问题分析和修复方案:

问题分析

  • 缺少网关意图声明:Discord.js v13+要求显式启用必要的网关意图,否则messageReactionAdd、messageCreate等事件无法触发。
  • 未定义变量错误:在messageReactionAdd回调中,你使用了未定义的message变量,应该通过reaction.message访问消息关联的服务器。
  • 表情比较逻辑错误:你将表情名称字符串与emojis.cache.find()返回的Emoji对象做比较,这会导致条件永远不成立,直接比较表情名称即可。
  • 成员获取不可靠:依赖members.cache.find()可能因成员不在缓存中失败,改用members.fetch()能稳定获取成员。

修复后的代码

const Discord = require('discord.js');
// 声明所需的网关意图
const client = new Discord.Client({
  intents: [
    Discord.Intents.FLAGS.GUILDS,
    Discord.Intents.FLAGS.GUILD_MESSAGES,
    Discord.Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
    Discord.Intents.FLAGS.GUILD_MEMBERS
  ]
});
const { token } = require('./config.json');

client.on("ready", () => {
    console.log("Bot opérationnel");
});

client.on('messageCreate', message => {
    if (message.content === '!roles') {
        const reactionEmoji = message.guild.emojis.cache.find(emoji => emoji.name === 'FR');
        message.react(reactionEmoji);
    }
});

client.on("messageReactionAdd", async (reaction, user) => {
    if (user.bot) return;
    console.log("Réaction ajoutée");

    // 确保消息属于服务器(排除DM消息)
    if (!reaction.message.guild) return;
    
    if (reaction.message.id === "1036663050276704346") {
        console.log(reaction.message.id);
        // 直接比较表情名称
        if (reaction.emoji.name === 'FR') {
            try {
                // 用fetch确保获取到成员
                const member = await reaction.message.guild.members.fetch(user.id);
                await member.roles.add("1036583426620399647");
                console.log(`Role attribué avec succès pour ${member.displayName}`);
            } catch (err) {
                console.log(`Le role n'a pas pu etre attribué : ${err}`);
            }
        }
    }
});

client.login(token);

额外注意事项

  • 确保你的机器人在Discord开发者门户中启用了服务器成员意图和消息内容意图(在Bot选项卡的Privileged Gateway Intents下)。
  • 使用async/await替代then/catch让异步代码更易读和维护。

内容的提问来源于stack exchange,提问作者Warrencky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:55:18