前提・実現したいこと
DiscordのbotをJavaScript(server.js)で作ろうとしています。
具体的には、
botがランダムな計算問題を出題する
↓
回答者が正解すれば再度ランダムな計算問題を出題する
の動きをするように設計したいです。
発生している問題・エラーメッセージ
if文の中で計算問題の答え(var ans_convertと定義)を出しておき、回答者のdiscord上の回答と一致したら次の問題に行くようにしたいのですが、下記のようなエラーが発生し、Discord上ではどんな入力でも正解となってしまいます。
(sendMsg(ans_convert)しようとしたときに、ans_convertが未定義だよというエラー)
DiscordAPIError: Cannot send an empty message at /rbd/pnpm-volume/52872b23-6ab3-4b15-be7a-8668464d4907/node_modules/.registry.npmjs.org/discord.js/11.6.4/node_modules/discord.js/src/client/rest/RequestHandlers/Sequential.js:85:15 at /rbd/pnpm-volume/52872b23-6ab3-4b15-be7a-8668464d4907/node_modules/.registry.npmjs.org/snekfetch/3.6.4/node_modules/snekfetch/src/index.js:215:21 at processTicksAndRejections (internal/process/task_queues.js:88:5) { name: 'DiscordAPIError', message: 'Cannot send an empty message', path: '/api/v7/channels/769246390768369697/messages', code: 50006, method: 'POST' }
該当のソースコード
汚いコードで申し訳ありませんが…
JavaScript
1//discordBotのseerver.jsの必要部分のみ抜粋 2var nowQuiz = 0; 3var ans = 0; 4var ans_convert = 0; 5if (message.content.match(/クイズ/)){ 6 nowQuiz++; 7 sendMsg(message.channel.id, 'クイズをするよ'); 8 sendMsg(message.channel.id, '参加者は ' + message.author.username); 9 sendMsg(message.channel.id, "割り算は整数部分だけ答えればOK!"); 10 11 var num1 = Math.floor( Math.random() * 100 ); 12 var num2 = Math.floor( Math.random() * 100 ); 13 var operator = ['+', '-', '×', '÷'] 14 var chooseOperator = Math.floor( Math.random() * 4 ); 15 16 sendMsg(message.channel.id, nowQuiz + "問目: " + num1 + operand[chooseOperator] + num2 + ' = ?'); 17 18 if(chooseOperator == 0){//足し算 19 var ans = num1 + num2; 20 }else if(chooseOperator == 1){//引き算 21 var ans = num1 - num2; 22 }else if(chooseOperator == 2){//掛け算 23 var ans = num1 * num2; 24 }else if(chooseOperator == 3){//割り算 25 var ans = Math.floor(num1 / num2); //整数部分のみ 26 } 27 var ans_convert = RegExp(ans); //正規表現で使用できるように変換 28 return; 29 } 30 31 //このif文でans_convertが引き継がれない 32 //どんな回答でもif文を通り、OK!と表示されてしまう 33 if (nowQuiz==1 && message.content.match(ans_convert)){ 34 sendMsg(message.channel.id, "OK!"); 35 nowQuiz++; //2問目 36 sendMsg(message.channel.id, ans_convert); //ここで上記のエラー発生 37 38 //以下、同様の処理 39 40 return; 41 }
試したこと
nowQuizの値はif文を超えて引継ぎが出来ているようです。
(if (nowQuiz==1 && message.content.match(ans_convert))文内でsendMsg(nowQuiz)を実行するとちゃんと正しい値が返ってきます)
補足情報(FW/ツールのバージョンなど)
package.jsonの中身を記載します
{
"//1": "describes your app and its dependencies",
"//2": "https://docs.npmjs.com/files/package.json",
"//3": "updating this file will download and update your packages",
"name": "hello-express",
"version": "0.0.1",
"description": "A simple Node app built on Express, instantly up and running.",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.17.1",
"discord.js": "^11.6.4",
"querystring": "^0.2.0"
},
"engines": {
"node": "12.x"
},
"repository": {
"url": "https://glitch.com/edit/#!/hello-express"
},
"license": "MIT",
"keywords": [
"node",
"glitch",
"express"
]
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/07 17:44 編集
2021/01/08 05:20
2021/01/08 05:20
2021/01/08 05:22