Discord反应角色机器人报TypeError: Cannot read properties of undefined (reading 'guild')如何修复
问题根因
你触发报错的核心原因是index.js中调用指令执行方法时存在语法错误,导致reactionrole.js的execute函数接收到的第一个message参数为undefined,访问undefined的guild属性自然会抛出你遇到的类型错误。
修复步骤
- 1 修复参数传递语法错误
找到index.js中调用execute的代码行:
将client.commands.get("reactionrole").execute(message. args, Discord, client);message和args之间的.改为参数分隔符,,修改后为:client.commands.get("reactionrole").execute(message, args, Discord, client); - 2 修复Discord.js v13适配错误
v13版本已废弃message事件,替换为messageCreate,将index.js中的事件监听声明修改为:client.on("messageCreate", message => { - 3 修复客户端初始化参数错误
你当前把intents和partials拆成了两个独立对象传给Client,不符合参数规范,同时需要补充反应事件对应的权限意图,修改初始化代码为:const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MESSAGE_REACTIONS"], partials: ["MESSAGE", "CHANNEL", "REACTION"] }) - 4 修复Embed构造语法错误
找到reactionrole.js中构造Embed的代码,setTitle和setDescription之间缺失了点号,修改为:let embed = new Discord.MessageEmbed() .setColor("#e42643") .setTitle("Selection des matière") .setDescription("Choisis tes matières en cliquant sur la reaction qui correspond\n\n" - 5 可选优化:不要在
execute函数内重复注册messageReactionAdd和messageReactionRemove事件,否则每次执行!reactionrole命令都会新增一次事件监听,导致后续重复执行加/删角色逻辑,建议将这两个事件监听移到index.js全局注册。
内容的提问来源于stack exchange,提问作者deoxys
相关产品推荐
相关产品推荐

