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

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

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

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

Q&A

1回答

4901閲覧

Discord.js でbotを作り、簡単な数当てゲームを実装したい

nachois

総合スコア0

Discord

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

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

2グッド

0クリップ

投稿2020/05/11 03:29

編集2020/05/11 05:15

前提・実現したいこと

Discord.jsでのbot作成に挑戦中のプログラミング初心者です。
Glitch.comを利用していて、「!ヌメロン」という発言に反応して
以下のようなルールの「数当てゲーム(Hit&Blow もしくは ヌメロン)」が実行されるようにしようとしました。

①プレイヤー1が3桁の数字を親(bot)に伝える
②プレイヤー2が3桁の数字を親(bot)に伝える

その後、ターン制でお互いに3桁の数字を言い合い
宣言した値が、答えの値と
桁も数字も一致している数→eat
桁は一致してないが数字はあっている→bite

で、3eatなら勝ち
というルールです。


プレイヤー①「123」
プレイヤー②「001」

プレイヤー①「135」
bot「1eat,0bite」

発生している問題

「ヌメロン」と発言しても反応しない。
エラーは発生していません。

※以下のような簡単なプログラムでは反応があります。

if(message.content===('おっす')){
message.channel.send( 'おっす' );
}

該当のソースコード

JavaScript

1 //ヌメロン 2client.on('message', message => 3{ 4 if(message.content===( '!ヌメロン' )){ 5 message.channel.send( '参加希望者は「1」か「2」と入力してください。' ); 6 7 8 9const ansNum = new Array(3); 10const ansNum2 = new Array(3); 11const ID =new Array(2); 12 13client.on('message', message => 14{ 15 16 //数字入力待ち 17 if(message.content===('1')){ 18 ID[0]=message.author; 19 message.channel.send('1番目の人の入力待ち。2番希望者はもう少し待ってね。'); 20 message.author.send('3桁の数字を入力してください。'); 21 22 client.on('message', message => 23 { if(message.author.bot) return; 24 25 26 if(message.author===ID[0]){ 27 for(;;){ 28 if(0<=message.content.charAt[0]<=9 && 0<=message.content.charAt[1]<=9 && 0<=message.content.charAt[2]<=9 ){ 29 for(var i=0;i<=2;i++){ 30 ansNum[i]=message.content.charAt[i]; 31 } 32 break; 33 } 34 } 35 36 } 37 message.channel.send('お待たせ。2番希望者は「2」と入力してね。'); 38 } 39 ) 40 41} 42}) 43 44 //もう一人 45 client.on('message', message => 46{ 47 if(message.content===('2')){ 48 if(message.author.bot) return; 49 if(message.author!=ID[0]){ 50 ID[1]=message.author; 51 message.author.send('3桁の数字を入力してください。'); 52 53 client.on('message', message => 54 { 55 if(message.author===ID[1]){ 56 for(;;){ 57 if(0<=message.content.charAt[0]<=9 && 0<=message.content.charAt[1]<=9 && 0<=message.content.charAt[2]<=9 ){ 58 for(var i=0;i<=2;i++){ 59 ansNum2[i]=message.content.charAt[i]; 60 } 61 break; 62 } 63 } 64 } 65 }) 66 67 } 68 } 69 }) 70 71 72let isFinish = false; 73const pat = /^\d{3}$/ 74var teban =1; 75while(!isFinish) { 76 // ゲームループ処理 77 teban++; 78 message.channel.send((teban%2+1) + '番の人は予想数字を入力してね。'); 79 client.on('message', message =>{ 80 let eat = 0; 81 let bite = 0; 82 83 //eat,biteのカウント 84 85 //2番目の人の手番 86 if(message.author===ID[teban%2] && message.author===ID[1]){ 87 for(var j=0;j<=2;j++){ 88 if(message.author.charAt[j]===ansNum[j]){ 89 eat++; 90 } 91 else if(message.author.charAt[j]===ansNum[(j+1)%3]){ 92 bite++; 93 } 94 else if(message.author.charAt[j]===ansNum[(j+1)%3]){ 95 bite++; 96 } 97 } 98 } 99 100 //1番目の人の手番 101 102 if(message.author===ID[teban%2] && message.author===ID[0]){ 103 for(var j=0;j<=2;j++){ 104 if(message.author.charAt[j]===ansNum2[j]){ 105 eat++; 106 } 107 else if(message.author.charAt[j]===ansNum2[(j+1)%3]){ 108 bite++; 109 } 110 else if(message.author.charAt[j]===ansNum2[(j+1)%3]){ 111 bite++; 112 } 113 } 114 } 115 116 117 message.channel.send(eat+'eat,'+bite+('bite')); 118 if (eat === 3) { 119 message.channel.send('正解!君の勝ち'); 120 isFinish = true; 121 } 122} 123 124) 125} 126 127 128} 129 130} 131) 132

試したこと

JavaScript

1 2 if(message.content===( '!ヌメロン' )){ 3 message.channel.send( '参加希望者は「1」か「2」と入力してください。' ); 4 5return;

と、return;を付けたしたら、上記の部分の機能だけは実行できた。

Omochii, Waki285👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

下のコードが動かないという件については5行目と6行目に

return;
}

を足せばうごきます。

投稿2020/11/07 04:35

編集2020/11/07 04:48
octo-uro

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問