Discord.js v13运行选择菜单测试命令报Cannot read property 'send' of undefined求助
报错原因与排查方案
该TypeError: Cannot read property 'send' of undefined报错本质是执行message.channel.send代码时,message.channel的值为undefined,按以下步骤逐一排查即可:
- 第一步:校验命令执行函数的参数传递顺序
你当前定义的execute函数参数顺序为execute(client, message, args, Discord),如果你的命令调度handler在调用execute时的传参顺序和你定义的顺序不匹配,比如把message放在了第二个之后的参数位,会导致你代码里拿到的message变量实际不是消息对象,自然不存在channel属性。
排查方法:在execute函数第一行添加console.log(message),打印输出后确认是否为正常的Discord消息对象,如果输出结果为undefined或者参数数组,直接调整execute的参数顺序和handler的传参顺序一致即可。 - 第二步:确认命令触发场景是否拿到了正确的对象
如果你该命令是注册的斜杠命令(Slash Command),触发时拿到的是Interaction交互对象而非Message对象,若你错误地把交互对象当成message传入execute函数,也会出现属性不存在的问题。斜杠命令发送消息需调用interaction.reply()或者interaction.channel.send(),需要先确认你拿到的对象类型再调用对应方法。 - 第三步:检查机器人的频道访问权限
如果触发命令的消息来自机器人没有VIEW_CHANNEL权限的私密频道、受限制的分类频道,Discord.js返回的message对象会缺失channel属性,给机器人授予对应频道的查看权限、发送消息权限即可解决。
附带优化点:你代码中使用的
MessageEmbed没有在头部解构引入,要么补充解构const { Message, Client, MessageActionRow, MessageSelectMenu, MessageEmbed } = require('discord.js'),要么确认你传入的Discord参数确实是discord.js模块对象,避免后续出现MessageEmbed未定义的报错。
内容的提问来源于stack exchange,提问作者Lokry
相关产品推荐
相关产品推荐

