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");
在开始之前,我想说我已经看到与我有同样问题的页面。但出于某种原因,我无法弄清楚我的问题出在哪里。 我对编程还很陌生,如果我在程序中犯了任何重大错误,我深表歉意。我将解释我的问题:每次我 运行 游戏实际运行的代码,但过了一会儿,我的终端中会出现一条长文本,上面写着:"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");