前提・実現したいこと
Discord.jsでのbot作成に挑戦中のプログラミング初心者です。
チャット上で「ルーレット」と入力されたら、指定人数分(今回は4人)の入力を受け付け、
その後、入力された値をランダムに出力するbotを作成したいと思っております。
想定している手順としては以下の通りです。
①ユーザが「ルーレット」と入力
②botが「何かやりたいことを入力してください」と出力
③ユーザ1が任意の値(1)を入力
④ユーザ2が任意の値(2)を入力
⑤ユーザ3が任意の値(3)を入力
⑥ユーザ4が任意の値(4)を入力
⑦botが入力された任意の値(1)~(4)までをランダムにどれか一つ出力
発生している問題・エラーメッセージ
・「何かやりたいことを入力してください」と出力した後、ユーザの入力を待たず、どんどん次の処理を実行してしまいます。
メッセージ送信: 何かやりたいことを入力してください{} メッセージ送信: undefined{} DiscordAPIError: Cannot send an empty message at /rbd/pnpm-volume/57782d40-a5d5-4f3c-ace6-91915818b576/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/57782d40-a5d5-4f3c-ace6-91915818b576/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/842725590116204547/messages', code: 50006, method: 'POST' }
該当のソースコード
const http = require('http'); const querystring = require('querystring'); const discord = require('discord.js'); const client = new discord.Client(); http.createServer(function(req, res){ if (req.method == 'POST'){ var data = ""; req.on('data', function(chunk){ data += chunk; }); req.on('end', function(){ if(!data){ res.end("No post data"); return; } var dataObject = querystring.parse(data); console.log("post:" + dataObject.type); if(dataObject.type == "wake"){ console.log("Woke up in post"); res.end(); return; } res.end(); }); } else if (req.method == 'GET'){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Discord Bot is active now\n'); } }).listen(3000); client.on('ready', async message =>{ console.log('Bot準備完了~'); client.user.setPresence({ activity: { name: 'げーむ' } }); }); //ルーレット処理 client.on('message', async message =>{ if (message.author.id == client.user.id || message.author.bot){ return; } if (message.content.match(/ルーレット/)){ let text = "何かやりたいことを入力してください"; sendMsg(message.channel.id, text); let arr = []; client.on('message', async message =>{ arr.push(message); }); client.on('message', async message =>{ arr.push(message); }); client.on('message', async message =>{ arr.push(message); }); client.on('message', async message =>{ arr.push(message); }); let random = Math.floor(Math.random() * arr.length); let result = arr[random]; message.reply(result) return; } }); if(process.env.DISCORD_BOT_TOKEN == undefined){ console.log('DISCORD_BOT_TOKENが設定されていません。'); process.exit(0); } client.login( process.env.DISCORD_BOT_TOKEN ); function sendReply(message, text){ message.reply(text) .then(console.log("リプライ送信: " + text)) .catch(console.error); } function sendMsg(channelId, text, option={}){ client.channels.get(channelId).send(text, option) .then(console.log("メッセージ送信: " + text + JSON.stringify(option))) .catch(console.error); }
補足情報(FW/ツールのバージョンなど)
開発環境;Glitch
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/18 13:01 編集