尝试通过命令设置变量,运行args判断代码时持续触发空消息发送报错
报错原因与修正方案
代码中存在的三处直接触发报错的问题
- 变量名定义与引用不匹配:代码里定义了存储命令触发前缀的变量
comand = "!setvariable",但判断消息是否匹配命令时,引用了完全没有声明过的komut313,这本身就会触发未定义变量的语法错误 - args的类型判断逻辑完全失效:对字符串执行
.trim().split(' ')后得到的是数组,不是字符串。当用户只发送纯命令、没有附加任何参数时,split操作会返回仅包含一个空字符串的数组[''],这个值和空字符串''做全等判断永远不成立,程序会直接走else分支把整个数组传入发送消息的方法 - Discord.js的消息发送接口不接受空内容:当传入的数组解析后没有有效文本时,接口就会抛出「无法发送空消息」的报错
可正常运行的修正代码
const command = "!setvariable" if (message.content.startsWith(command)){ const member = message.member if (member.hasPermission("ADMINISTRATOR")){ // 截取命令后的内容做首尾空格清理,先判断内容是否为空,不要过早拆分成数组 const args = message.content.slice(command.length).trim() console.log(args) if (args === ''){ message.channel.send("string is empty") }else{ message.channel.send(args) } } }
后续使用注意事项
- 如果后续需要拆分独立参数做其他逻辑,可以在确认args非空之后,再执行
.split(' ')把字符串拆成参数数组,避免空内容场景下生成全空的数组 - 不要直接把split生成的原始数组传入
channel.send(),Discord.js会自动把数组元素拼接为文本内容,遇到空元素就会触发空消息发送的报错
内容的提问来源于stack exchange,提问作者kids alt account
相关产品推荐
相关产品推荐

