LoginSignup
5
1

Discord.jsで愛くるしいペンギンBotを作ってみた

Last updated at Posted at 2024-02-19

はじめに

Discord.jsを使って、
言葉に反応して返信してくれる簡単なBotを作ってみました。

本編

Discord.jsとは

DiscordでBotを作れるAPIがあり、それを使用するためのライブラリ

現在のバージョン:14.14.1

こんな感じ

「何か言って」のフレーズに返信してくれます。

image.png

事前準備

Node.jsをインストール

DiscordのAPI登録からBot作成まで

以下の記事などを参考に、
こちらの画面からBotを作ってチャンネルに追加しました。

権限については、今回は必要最小限として

スクリーンショット 2024-02-19 22.24.24.png

あとは、こちらのintentの設定も必要になったかなと思います

image.png

実装していく

ライブラリをいくつか追加

トークンを.envに定義できるように dotenv を追加

npm install dotenv

Discordのbotを実装するためdiscord.jsを追加

npm install discord.js

コード実装

.env
DISCOAD_TOKEN=
index.js
import { config } from 'dotenv';
import { Client, Events, GatewayIntentBits } from 'discord.js';
import { penguinResponse } from './function.js';

// .envを読み込む
config();

const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent]});
const messages = [
    'ペンギンだって飛べるもん。',
    'ペンギン、Suicaでモデルデビューしたんだ。',
    'ペンギン、今日も元気に生きてるよ。',
    'ペンギンのお家、昨日シロアリが出たんだ。',
    'ペンギン、イオンのお客様感謝デーには毎回参加するよ。',
];

client.once(Events.ClientReady, client => {
    console.log(`接続を開始`);
});

/**
 * メッセージ新規投稿時のイベント
 */
client.on(Events.MessageCreate, async msg => {
    switch (msg.content) {
        case "何か言って":
            // ランダムでメッセージを返す
            let message = messages[Math.floor(Math.random() * messages.length)];
            await msg.reply(penguinResponse(message));
            break;
    }
});

client.login(process.env.DISCOAD_TOKEN);

立ち上げてみる

下記のコマンドを実行すると
node index.js

$ node index.js 
接続を開始

となり、実行中の間はBotがオンライン状態となり、
チャンネルに投稿されたワードを検知するようになります。

常駐化させる

このままだとローカルでnode index.jsを実行して立ち上げている間だけ反応するので
PCをずっと立ち上げっぱなしでないと常駐はできません。

つまり、この愛くるしいペンギンちゃんは定時になると帰ってしまいます

そこで、帰らせないために
借りているレンタルサーバにgit cloneで設置を行い、常駐化ツールを導入して
常に立ち上がるようにしました。

まずはforeverをグローバルで追加します。

npm install -g forever

最後にforeverを使って、Botのプロセスを常駐起動させます。

forever start ./index.js 

これで常にペンギンちゃんが常時稼働になりました!
めでたし、めでたし...(?) :clap:

おわりに

ペンギンちゃんにはいろいろ教えつつ育成しているので
今ではオリジナルのセリフを覚えてくれたりするようになりました!
discord.jsは意外と動かすまでサクサク行けるので
ぜひお試しください!

感謝

コミュニティ的なものもあるようです。
いろいろ参考にさせていただきました!

ほぼこちらの記事を参考にさせていただきました!

5
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
5
1