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

如何解决Node.js中discord.js报错"Message content must be a non-empty string"

错误根因

报错触发自代码第46行的msg.channel.send(chatData.join("\n"))语句:当你执行.chat指令后,750毫秒内Minecraft服务端没有返回任何聊天内容的情况下,chatData会是空数组,执行join("\n")后得到的是空字符串,而你使用的discord.js版本禁止发送内容为空的消息,因此抛出RangeError [MESSAGE_CONTENT_TYPE]错误。

修复方法

你可以任选以下任意一种方案修改代码:

  • 方案1:发送前先校验消息内容非空,空内容选择跳过发送或者返回默认提示
    将原代码中的setTimeout回调部分替换为:
setTimeout(() => {
    sending = false
    if (chatData.length) {
        msg.channel.send(chatData.join("\n"))
    } else {
        // 不需要提示的话可以直接删掉这行,不做任何操作即可
        msg.channel.send("*指定时间内未收到游戏内返回消息*")
    }
    chatData = []
}, 750)
  • 方案2:给发送内容增加兜底值,避免出现空字符串
setTimeout(() => {
    sending = false
    // 空数组join后为假值,会自动使用后面的兜底内容
    msg.channel.send(chatData.join("\n") || "*无游戏内消息返回*")
    chatData = []
}, 750)
可选优化建议

你当前的逻辑仅在用户发送.chat指令后的750毫秒内收集游戏消息,容易漏发游戏内的主动推送消息。如果需要实现完整的双向消息同步,可以去掉sending状态限制,只要收到Minecraft侧的消息就直接转发到Discord指定频道:

// 替换原有的bot.on("message")监听逻辑
bot.on("message", message => {
    const formattedMsg = `${message}`.trim()
    if (formattedMsg) {
        // 替换为你需要转发的Discord频道ID
        const targetChannel = client.channels.cache.get("替换为你的频道ID")
        targetChannel?.send(formattedMsg)
    }
})

内容的提问来源于stack exchange,提问作者StilShem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:05