私は不和ボットを持っていて、mysqlデータベースからのキャラクターに関する情報を(キャラクター名を提供することによって)表示するコマンドに取り組んでいます。正常に動作しますが!characterinfo asdasfefcdce
、のようにデータベースに存在しない名前を指定すると、ボットがクラッシュします。だから私の質問はHow do I prevent it from crashing if I provide a wrong name?
です。うまくいけば、あなたは私の意味を理解しています。
コードは次のとおりです。
const Discord = require('discord.js');
const mysql = require('mysql');
const {stripIndents} = require("common-tags");
const { prefix, token } = require('../config.json');
module.exports.run = async (bot, message, args, connection3) => {
if (message.content == '!characterinfo') {
return message.reply('provide a character name!');
}
const name = args[0];
connection3.query('SELECT * FROM characters WHERE name = ?', [name], function(err, results, rows) {
if (err) throw err;
const embed = new Discord.RichEmbed()
.setColor('RANDOM')
.setTitle('**Character Information**')
.addField('Nickname:', results[0].name)
.addField('Level:', results[0].level)
.setFooter(`test`)
.setTimestamp();
message.channel.send(embed);
});
}
module.exports.help = {
name: "characterinfo",
}
詳細情報を提供する必要がある場合は、お知らせください。
どんな助けでも大歓迎です!
この行では、ボットがクラッシュします。
if (err) throw err;
エラーをスローして後で処理しない場合、これを変更する最も簡単な方法は、throwをconsole.logまたはconsole.errorに置き換えることです。
if (err) console.error(err);
または、スローを維持して、try / catchでコードをラップすることもできます。
try {
connection3.query('SELECT * FROM characters WHERE name = ?', [name], function (err, results, rows) {
if (err) throw err;
const embed = new Discord.RichEmbed()
.setColor('RANDOM')
.setTitle('**Character Information**')
.addField('Nickname:', results[0].name)
.addField('Level:', results[0].level)
.setFooter(`test`)
.setTimestamp();
message.channel.send(embed);
});
} catch(err) {
// Handle the error ...
console.log(err)
}
編集:したがって、エラーは、クエリが結果を見つけられないときにエントリがない結果配列から実際に発生しているため、このソリューションは機能するはずです。
他のことをする前に、「結果」があるかどうかを確認する必要があります。
try {
connection3.query('SELECT * FROM characters WHERE name = ?', [name], function (err, results, rows) {
if (err) throw err;
if (!results[0]) return;
const embed = new Discord.RichEmbed()
.setColor('RANDOM')
.setTitle('**Character Information**')
.addField('Nickname:', results[0].name)
.addField('Level:', results[0].level)
.setFooter(`test`)
.setTimestamp();
message.channel.send(embed);
});
} catch(err) {
// Handle the error ...
console.log(err)
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加