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

Discord.js Reaction Roles开发:点击表情未分配身份组故障求助

Discord Reaction Roles功能不生效解决方案

核心问题排查

  • 你使用的是Unicode原生表情👮,不属于服务器自定义表情,不存在emoji.id属性,判断条件永远不触发,需要改为判断reaction.emoji.name
  • 你填写的频道ID、角色ID位数异常(Discord各类ID均为18位,你填写的是19位,属于复制错误),需要核对实际的ID值
  • 机器人需要在服务器内拥有「管理角色」权限,且机器人自身的身份组排序要高于你要分配的身份组,否则无法完成角色添加操作
  • messageReactionAdd事件没有第三个channel参数,多余参数可删除
  • 建议添加异常捕获逻辑,方便后续排查报错

修正后代码

const { Client, Intents } = require('discord.js');
const bot = new Client( { 
    intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MEMBERS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
    Intents.FLAGS.DIRECT_MESSAGE_REACTIONS,
],
partials: ["MESSAGE", "CHANNEL", "REACTION"]
});

// 其余业务逻辑省略
else if(parts[0].toLowerCase() == "t!role") {
    let sendMessage = await message.channel.send('React with 👮to get the role')
    sendMessage.react('👮')
}

bot.on('messageReactionAdd', async (reaction, user) => {
    if(reaction.message.partial) await reaction.message.fetch();
    if(reaction.partial) await reaction.fetch();

    if(user.bot) return;
    if(!reaction.message.guild) return;

    // 替换为你自己的18位正确频道ID
    if(reaction.message.channel.id === '替换为实际频道ID') {
        // 原生表情判断name属性
        if(reaction.emoji.name === '👮') {
            try {
                const member = await reaction.message.guild.members.fetch(user.id);
                // 替换为你自己的18位正确角色ID
                await member.roles.add('替换为实际角色ID');
            } catch (err) {
                console.error('角色添加失败:', err);
            }
        }
    }
})

内容的提问来源于stack exchange,提问作者I need Help

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:24:05