如何解决node.js中的“消息内容必须是非空字符串”[关闭]

Posted

技术标签:

【中文标题】如何解决node.js中的“消息内容必须是非空字符串”[关闭]【英文标题】:How to solve "Message content must be a non-empty string" in node.js [closed] 【发布时间】:2022-01-05 02:38:01 【问题描述】:

这是我的代码,

const  Client, Intents  = require('discord.js');
const mineflayer = require("mineflayer");
const client = new Client( intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] );

let sending = false
let chatData = []

let prefix = ".";
var settings = 
    username: "StilShem_tvink",
    host: "mstnw.net",
;

const bot = mineflayer.createBot(settings);

bot.on('kicked', (reason, loggedIn) => console.log(reason, loggedIn));
bot.on('error', err => console.log(err));

client.on("ready", async =>
    console.log("Discord bot is online!")
)

bot.on("login", async =>
    console.log("Minecraft bot is online!")
)

bot.on("message", message => 
    if(sending == true) 
        chatData.push(`$message`)
    
)

client.on("messageCreate", async msg => 
    let args = msg.content.split(" ").slice(1)

    if(msg.content.startsWith(".chat")) 
        let toSend = args.join(" ");
        if(!toSend) return msg.reply("No args")

        bot.chat(toSend)
        sending = true
        msg.channel.send(`$msg.author.tag just sent $toSend`)

        setTimeout(() => 
            sending = false
            msg.channel.send(chatData.join("\n"))
            chatData = []
        , 750)
    
)

此代码适用于不和谐的 minecraft mineflayer。这段代码给了我错误。

C:\Users\ArtemiiYT\node_modules\discord.js\src\util\Util.js:414 if (!allowEmpty && data.length === 0) throw new error(errorMessage); ^

RangeError [MESSAGE_CONTENT_TYPE]:消息内容必须为非空 细绳。 在 Function.verifyString (C:\Users\ArtemiiYT\node_modules\discord.js\src\util\Util.js:414:49) 在 MessagePayload.makeContent (C:\Users\ArtemiiYT\node_modules\discord.js\src\structures\MessagePayload.js:113:22) 在 MessagePayload.resolveData (C:\Users\ArtemiiYT\node_modules\discord.js\src\structures\MessagePayload.js:128:26) 在 TextChannel.send (C:\Users\ArtemiiYT\node_modules\discord.js\src\structures\interfaces\TextBasedChannel.js:168:61) 在 Timeout._onTimeout (C:\Users\ArtemiiYT\Desktop\Всё\AFK bot\AFKBOTDS\bot.js:46:25) 在 listOnTimeout(节点:内部/计时器:557:17) 在 processTimers (node:internal/timers:500:7) [Symbol(code)]: 'MESSAGE_CONTENT_TYPE'

Node.js v17.1.0

【问题讨论】:

欢迎。请选择一个能真实描述您的问题的标题,以便其他有相同问题的人可以搜索到。 【参考方案1】:

我没有继续运行代码,但我认为chatData 数组是空的。因此,当您尝试将其中的所有元素 .join("\n") 放在一起时,您只会得到一个空字符串,该字符串会被 discord 拒绝并且您会收到错误消息。 所以你可能想先检查数组中是否有任何东西。

如果您在这里查看代码,只需将其添加到间隔函数中:

if(chatData.length < 1) 
  // maybe inform the user there is no new chat message?
  return;

【讨论】:

以上是关于如何解决node.js中的“消息内容必须是非空字符串”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 中的特定持续时间后强制解决承诺? [复制]

如何解决 Bootstrap node.js 应用程序中的错误“无法设置未定义的属性 'emulateTransitionEnd'”?

如何通过部署 Node.js AWS Beanstalk 解决 /tmp/.config 中的权限问题?

如何在 node.js 中解决可变数量的承诺

Node.js中的模块化,npm包管理器

如何解码 Java 生成的 Node.js 中的 jwt 令牌?