質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

解決済

discord.jsでルーレットbotを作りたい

azi1208
azi1208

総合スコア1

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

3回答

0評価

0クリップ

3271閲覧

投稿2021/08/08 15:49

前提・実現したいこと

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。