How to fix : "DiscordAPIError: Cannot send an empty message"

How to fix : "DiscordAPIError: Cannot send an empty message"

在开始之前,我想说我已经看到与我有同样问题的页面。但出于某种原因,我无法弄清楚我的问题出在哪里。 我对编程还很陌生,如果我在程序中犯了任何重大错误,我深表歉意。我将解释我的问题:每次我 运行 游戏实际运行的代码,但过了一会儿,我的终端中会出现一条长文本,上面写着:"DiscordAPIError: Cannot send an empty message"。我知道它可能与 message.delete 代码有关,但我无法修复它。

const botconfig = require("./botconfig.json");
const Discord = require("discord.js");
const bot = new Discord.Client({disableEveryone: true});


let word;
let letter;
let lWord = [];
let charLength;
let txt = [];
let outputTxt;
let misscount;
let misses = 0;
let succes;


bot.on("ready", async () => {
    console.log(`${bot.user.username} is online!`);
    bot.user.setActivity("Hangman with y'all");
});


bot.on("message", async message => { 
    if(message.author.bot) return;
    if(message.channel.type === "dm") return;

    let prefix = botconfig.prefix;
    let messageArray = message.content.split(" ");
    let cmd = messageArray[0];


    if(cmd === `${prefix}word`){                                        
        word = messageArray[1];
        message.delete(100);
        console.log("\x1b[33m", "Word has been set to: " + word);
        console.log("\x1b[0m");
        startGame();
    }


    else if(cmd === `${prefix}reset`){
        console.log("\x1b[34m", "Player has reset the game");
        console.log("\x1b[0m");
        reset();
    }


    else if(cmd === `${prefix}letter`){
        letter = messageArray[1];
        console.log("\x1b[36m", "Entered letter was: " + letter);
        console.log("\x1b[0m")
        tryletter();
    }


    function startGame(){
        lWord = word.split("");
        charLength = lWord.length;

        for(i = 0; i<charLength; i++) { 
            txt[i] = "?"
          }

        outputTxt = txt.join(" ");
        txtOutput();
    }


    function txtOutput(){
        return message.channel.send(outputTxt);
    }


    function tryletter() {
        misscount = 0;

        for(i = 0; i<charLength; i++) {    
            if(letter === lWord[i]) {
              txt[i] = letter;
              misscount = 0;
            }  
            else {
              misscount++;
            }
            if(misscount === charLength) {
              misscount = 0;
              misses++;
              lostCheck();
              if(misses > 0 && misses < 8) { 
              return message.channel.send("You have made " + misses + "/8 mistakes!");
              }
            }
        }

        winCheck();
        outputTxt = txt.join(" ");
        if(misses < 8){
        return message.channel.send(outputTxt);
        }
}


    function winCheck() {
        succes = 0;

        for(i=0; i<charLength; i++) {
            if(txt[i] === lWord[i]) {
              succes++
            }
            else {
              succes = 0;
            }
          }

          if(succes === charLength) {
            succes = 0;
            for(i=0; i<charLength; i++) {
                if(txt[i] === lWord[i]) {
                succes++
                }   
                else {
                succes = 0;
                }
            } 

            if(succes === charLength && charLength > 0) {
                succes = 0;
                message.channel.send("You have won, the word was " + word + "!");
                console.log("\x1b[32m", "Player has guessed the word");
                console.log("\x1b[0m");
                reset();
            }
         }
    }


    function lostCheck() {
        if(misses === 8){
            message.channel.send("You lost, the word was " + word + "!");
            console.log("\x1b[31m", "Player lost the game");
            console.log("\x1b[0m");
            reset();
        }
    }


    function reset() {
        word = "";
        letter = "";
        lWord = [];
        charLength = 0;
        txt = [];
        outputTxt = "";
        misscount = 0;
        misses = 0;
        succes = 0;
        console.log("\x1b[35m", "Game has been reset");
        console.log("\x1b[0m");
        return message.channel.send("Game has been reset!");
    }

});


bot.login(botconfig.token);

这可能是因为您尝试在 outputTxt 为空(''' ')时发送消息:Discord 只能在至少有一个非space-样的性格。

您必须决定在该字符串为空时显示什么。假设如果 outputTxt 为空,您希望机器人发送 'None':在这种情况下,您应该编辑 txtOutput()tryletter() 以这种方式发送消息

return message.channel.send(outputTxt || "None");

|| 意味着如果第一个变量是 undefined 它将使用秒:这是一个有用的 shorthand 形式。

// Extended form
if (outputTxt) return message.channel.send(outputTxt);
else return message.channel.send("None");

// Shorter form with ternary operator
return message.channel.send(outputTxt ? outputTxt : "None");

// Since we're only checking if that exists or not, you can write it directly as below
return message.channel.send(outputTxt || "None");