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
相关产品推荐
相关产品推荐

