1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

こんにちは、なりかくんです。
今回は、discord.jsでじゃんけんをするというめちゃくちゃ初歩的なものを作ろうと思います。

勝ち負けの判断

勝ち負けの判断は計算で求める方法もありますが、今回は普通にifで処理したいと思います。

if (janken_r === janken_p) {
    result = "あいこです";
} else if (janken_p === 0 && janken_r === 1) {
    result = "あなたの 勝ち です";
} else if (janken_p === 1 && janken_r === 2) {
    result = "あなたの 勝ち です";
} else if (janken_p === 2 && janken_r === 0) {
    result = "あなたの 勝ち です";
} else {
    result = "あなたの 負け です";
}

コードの全体

今回のコードの全体はこのようになります。

janken.js
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');

module.exports = {
	data: new SlashCommandBuilder()
		.setName('janken')
		.setDescription('じゃんけんコマンド'),
	async execute(interaction) {
		const filter = response => {
			return interaction.user.id == response.author.id;
		};
		let janken = ['グー','チョキ','パー',];
		let janken_r = Math.floor( Math.random() * 3);
		interaction.reply({ content: "じゃんけん... (g, c, p)", fetchReply: true })
			.then(() => {
				interaction.channel.awaitMessages({ filter, max: 1, time: 30000, errors: ['time'] })
					.then(collected => {
						let janken_pC = collected.first().content;
						let janken_p = 5;
						switch (janken_pC) {
							case "g":
								janken_p = 0;
								break;
							case "c":
								janken_p = 1;
								break;
							case "p":
								janken_p = 2;
								break;
						}
						let result = "";
						if (janken_r === janken_p) {
							result = "あいこです";
						} else if (janken_p === 0 && janken_r === 1) {
							result = "あなたの 勝ち です";
						} else if (janken_p === 1 && janken_r === 2) {
							result = "あなたの 勝ち です";
						} else if (janken_p === 2 && janken_r === 0) {
							result = "あなたの 勝ち です";
						} else {
							result = "あなたの 負け です";
						}
						interaction.followUp(`あなたは ${janken[janken_p]} を出して、Botは ${janken[janken_r]} を出しました。\n${result}`);
					})
					.catch(collected => {
						interaction.followUp(`じゃんけんの返事が来なかったみたいだね...`);
					});
			});
	},
};

以下のawaitMessages()を使うとチャンネルで送られてくるメッセージを待機して取得することが出来ます。

channel.awaitMessages()

interaction.followUp()は、Bot自身が送信したメッセージにリプライするような形で返信するようになります。

interaction.followUp(`あいうえお`);

実際に動かしてみる

実際に動かしてみるとこのようになります。しっかり動いてますね。
image.png

最後に

ぜひ皆さんも最初はじゃんけんゲームでも作ってみましょう!
以上です、最後までお読みいただきありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?