見出し画像

【Discord Bot】簡単なDiscordのBotの作り方(基本)2021年5月最新

こんにちは、すずねーうです。noteでは初の投稿となります。

さて、皆さんは、DiscordでBotというものを見たことがあるでしょうか。

画像1

このようなものです。(これは著名な「MEE6」というBotです)
コレの他にも、Discordには様々なBotが存在しています。
さて、このようなBotは、あなたでも作れるって知っていましたか?
今回は、このBotの作り方をご紹介していきます。

(昔ExtEOiさんの記事を見たんだけど、もうdiscord.jsはv12が出ていますし、今のglitchは使い勝手がかなり悪いので自分の雑記用に作っています。)

お役に立てれば幸いです。

前提条件・Botアカウント作成

まず、Discordのアカウントは持っていますか?持っていなければ作成してください
その後に、Botアカウントを作成します。
ます、 https://discord.com/developers/applications に行き、「New Applications」を押します。そして、作りたいBotの名前を入れて*「Create」を押します。
*「Teams」というところがある人は、そのまま(Personal)にしてください。

画像2

画像3

すると、このような画面になります。

画像4

ここの「App Icon」というところで、Botに設定したいアイコンを設定できます。何も設定しなかった場合はDiscordのデフォルトアイコンとなります。

できたら、左のタブ内の「Bot」を押してください。このような画面になります。

画像5

「Add Bot」をおして、その後のダイアログ*では「Yes, do it!」を押します。

画像6

*Botを作ったらBotは壊せないという意味。

そうしたらこの画面が出てきます。(アイコンはさっき設定したものになります)

画像7

ここを下にスクロールすると、「TOKEN」というものがあります。これは後ほど使いますが、流出するとBOTが乗っ取られるので、流出させないようにご注意ください。(Regenerateを押すと再生成されます)

画像8

もっとスクロールすると、「Authorization Flow」というものがあります。その中の「Public BOT」は、Botを赤の他人に入れられるようにするかどうかです。サーバーの専属Botにする場合はオフ、万能Botとして夜に広めたい場合はオンにします。
「Requires OAuth2 Code Grant」はオフにしてください。

画像9

さらに下にスクロールすると、「Privileged Gateway Intents」に2つの項目がありますが、両方オンにしてください。

画像10

できたら、下の「Save Changes」で保存してください。

画像11

できたら、左のタブから「OAuth2」を選択します。

そのあと、スクロールして、「OAuth2 URL Generator」のところで、

画像12

「bot」を選んで「Copy」を押します。

画像13

コピーしたURLに行き、BOTを指示に沿って招待します。

画像14

画像15

そうしたら、さっき選んだサーバーにオフラインのBotが追加されているかと思います。

画像16

ここまできたら、プログラミングをしていきます。(さっきのDeveloper portalのタブは取っておいて!)

Botのプログラミング

まず、Replitにアカウントを作成してください。Facebook、Github、およびGoogleのアカウントでも作成できます。
(「Start Coding」でアカウント作成画面に飛べます)

画像17

画像18

(サインアップした時に動画のようなものやニュースが出てきた場合は、右上の×マークで消してください。)

メールアドレスで登録した場合のみ、メールの確認メールが届いているので、承認してください。

画像19

メールアドレスの確認ができたら、左上の「New Repl」を押します。

画像20

ここで、手順が分かれます。
もし、「楽にやりたい」なら、次の「GitHubからインポートする場合」を選んでください。もし、「確実に作りたい」なら、「コードをコピーする場合」を選んでください。

GitHubからインポートする場合

こっちを選んだ方は、ここから進めてください。

そうしたら、右上の「Import From GitHub」を押して、

​mafiserver/bot-base

と入力して、「Import from github」を押します。

画像21

画像22

そうしたら、右上にボックスが出てくると思うので、それぞれ「Node.js」「npm start」と書いてあるのを確認して、「Done」を押します。(なっていなかったら各自変更してください)

画像23

なにか出てきたら「Got it」を押してください。(出てこない場合もあります)

画像24

そうしたら、さっきのDeveloper Portalに戻り、「Bot」タブを選択して、「TOKEN」をコピーしてください。

画像25

そうしたら、Replitに戻り、南京錠のマークを押します。

画像26

そのあと、「Got it」「Skip this step」「Skip this step」「Got it」と押していき、(ない場合もあります)「DISCORD_BOT_TOKEN」のところの鉛筆マークを押します。

画像27

そうしたら、さっきコピーしたTOKENを張り付け、「Save」します。

画像28

GitHubインポートバージョンはここまでなので、「プログラムを実行」セクションへ進んでください。

コードをコピーする場合

ここからは、インポートせずにコードをコピーして作っていく方法について教えます。

「New Repl」を押したら、言語を「Node.js」にしてください。(名前は何でもいいです)そのあと、「Create Repl」を押してください。

画像46

なにか出てきたら「Got it」を押してください。(出てこない場合もあります)

画像24


そのあと、「index.js」の名前を、「server.js」に変更してください。

画像47

画像48

できたら、その右の「Not sureなんとか」というところに、次のコードを貼り付けてください。

const http = require("http");
const querystring = require("querystring");
const discord = require("discord.js");
const client = new discord.Client();
const prefix = process.env.prefix;
try {
 // GAS(Google Apps Script)からの受信(botの常時起動)
 http.createServer(function(req, res){
  res.write("OK");
  res.end();
 }).listen(8080);
 client.on("ready", message => {
   console.log("Bot準備完了~");
   client.user.setActivity(process.env.activity, { type: process.env.acttype }); 
 });
client.on("message", async message => {
 if (message.author.id == client.user.id || message.author.bot) return;
 if (message.mentions.has(client.user)) {
     message.reply("呼びましたか?");
   }
 if (!message.content.startsWith(prefix)) return; //ボットのプレフィックスからメッセージが始まっているか確認
 const args = message.content.slice(prefix.length).trim().split(/ +/g);
 const command = args.shift().toLowerCase();
 if (command === "help") { //コマンド名
   message.channel.send({
       embed: {
         title: "ヘルプ",
         description: "全てのコマンドの初めに`" + prefix + "`をつける必要があります。",
         fields: [
           {
             name: "ヘルプ",
             value: "`help`"
           }
         ]
       }
     });
 }
});
 if (process.env.DISCORD_BOT_TOKEN == undefined) {
   console.log("DISCORD_BOT_TOKENが設定されていません。");
   process.exit(0);
 }
 client.login(process.env.DISCORD_BOT_TOKEN);
} catch (e) {
 console.log(e);
}

その後、「package.json」というファイルを作成し、

画像49

次のコードを貼り付けてください。

{
 "//1": "Mafi Chat Server Groupsが作成しました",
 "//2": "基本のBotリポジトリです",
 "//3": "discord.js v12を使用しています",
 "name": "bot-base",
 "version": "1.4.0",
 "description": "DiscordのBotのベースです。",
 "main": "server.js",
 "scripts": {
   "start": "node server.js"
 },
 "dependencies": {
   "express": "^4.17.1",
   "discord.js": "^12.5.1",
   "querystring": "^0.2.1"
 },
 "engines": {
   "node": "12.x"
 },
 "repository": {
   "url": "https://github.com/mafiserver/bot-base"
 },
 "license": "MIT",
 "keywords": [
   "node",
   "discord",
   "bot"
 ]
}

そのあと、「.replit」ファイル(どっとれぷるいっと)を作成し、

language="nodejs"
run="npm start"

と書いてください。

そうしたら、さっきのDeveloper Portalに戻り、「Bot」タブを選択して、「TOKEN」をコピーしてください。

画像25

そうしたら、Replitに戻り、南京錠のマークを押します。

画像26

そのあと、「Got it」「Skip this step」「Skip this step」「Got it」と押していき、(ない場合もあります)「Key」を押して、

DISCORD_BOT_TOKEN

と入れて、「Value」にさっきコピーしたTOKENを入れてください。

画像53

そうしたら、次に、keyに「prefix」、valueに「b!」として追加、keyに「activity」、valueに「ゲーム」、として追加、keyに「acttype」、valueに「PLAYING」と入れて追加してください。

うまくいればこのようになります。

画像54

そのあと、右下の「Shell」を押して、

画像55

そこに

npm install

と入れて、Enterしてください。

画像56

結構時間がかかります。
最後に、

画像57

のようなものがでてきたら、これでコードを貼り付ける場合は終わりです。次のセクション(プログラムの実行)に進んでください。

プログラムの実行

ここまで出来たら、「Run」を押してみてください。

画像29

ここでRunすると、右にコンソールが開きます。
(もし、「>--npm install」と出て、止まってしまった場合は、一度「Stop」してから、もう一度「Run」してみてください。)
うまくいけばこのようになるはずです。

画像30

Discord側を見てみると、ボットがオンラインになって、「ゲームをプレイ中」と表示されるはずです。

画像31

(もうお気づきかもしれませんが、さっきの南京錠のところで、「activity」の値を変えると、ここの「ゲーム」も変わります。)
※プログラムを変えた際は、必ず「Stop」してからもう一度「Run」しないと反映されません!

画像32

画像33

何度もRunをしているのに、「Your program is already running」と表示されるときは、Consoleをクリックし、「Ctrl+C」を押すことで治る可能性があります。

現時点では、このBotにメンションすると返事が返ってきたり、「b!help」でヘルプを表示することができます。

画像34

また、このさいしょの「b!」は、やはり南京錠のところの「prefix」で変えられます。

Botの常時起動

さて、無事にBotを起動できましたが、このままにしておくと勝手にBotが落ちてしまうので、Google Apps Scriptというサービスで呼び起こします。

Googleのアカウントは各自取得してください。(今あるもので構いません)

まずは、 https://script.google.com/home/projects/15I0oU8hrBEJjacPR_AoSDt-Eyr5HbZNOcb6XXp03fij2QBDzkzmStIXi にアクセスしてください。(もし何か出てきた場合は、「ダッシュボードを表示」を押してください。)

右上の「コピーを作成」を押してください。

画像35

そうしたら、別のタブにて「Copy of 常時起動スクリプト」が出てくるので、「コード.gs」を選択してください。

画像36

そうしたら、Replitに戻り、画像に書いてあるURLをコピーしてください。

画像37

そうしたら、Apps Scriptでそれを画像のところに張り付けてください

画像38

そうしたら上のフロッピーディスクのマークで保存し、「実行」を押してください。
そうしたら「承認が必要です」が出てくるので、「権限を確認」を押してください。

画像39

詳細→安全ではないページに移動

画像40

→許可

画像41

実行できれば成功となります。

画像42

あと一息です!

続いて、トリガーを設定します。
左の時計マークを押してください。

画像43

左下の「トリガーを作成」を押した後、

画像44

それぞれ「分ベースのタイマー」「5分ごと」にしたあと、保存してください。

画像45

これで完了となります!お疲れさまでした!

次回はこれを使って機能を発達させていきます。

ではさよなら~
あっ、スキも押していってくださいね~
食べ物がランダムで出ますよ(((なんだそれは

また、マガジンに登録したり、私をフォローしてくれたらプログラミング言語がランダムで出ますよ()

この記事が気に入ったらサポートをしてみませんか?