LoginSignup
15
16

More than 3 years have passed since last update.

discord.js で Bot を作成して Heroku で永続稼働させる

Last updated at Posted at 2019-10-21

環境

  • macOS Mojave 10.14.3

事前準備

Homebrew のインストール

nodebrew および Node.js のインストール

https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09
こちらの記事を参考に導入しました。

Discord Bot の登録

Discord Developer Portal ページにアクセスします。
FireShot Capture 028 - Discord Developer Portal — My Applications - discordapp.com.png
New Application ボタンをクリックします。
FireShot Capture 029 - Discord Developer Portal — My Applications - discordapp.com.png
NAME 欄に任意のアプリケーション名を入力して Create ボタンをクリックします。
FireShot Capture 030 - Discord Developer Portal — My Applications - discordapp.com.png
アプリケーションの作成に成功すると General Information ページにリダイレクトされます。
左側の SETTINGS メニューから Bot を選択します。
FireShot Capture 031 - Discord Developer Portal — My Applications - discordapp.com.png
Add Bot をクリックします。
FireShot Capture 032 - Discord Developer Portal — My Applications - discordapp.com.png
Yes, do it! をクリックします。
FireShot Capture 033 - Discord Developer Portal — My Applications - discordapp.com.png
Bot が追加されました。

TOKEN 欄の Copy ボタンをクリックして、Bot のトークンをコピーします。
開発時に使用するので、どこかに控えておきます。

続いて、左側の SETTINGS メニューから OAuth2 を選択します。
FireShot Capture 034 - Discord Developer Portal — My Applications - discordapp.com.png
OAuth2 URL Generator - SCOPE 欄にある bot のチェックボックスを選択すると
オーソライズ URL が表示されるのでコピーして、アクセスします。
FireShot Capture 035 - アカウントへのアクセスを許可します - discordapp.com.png
Bot を追加したいサーバーを選択して 認証 ボタンをクリックします。

Bot を追加できるのは自身が管理者権限を所持しているサーバーに限定されます。
権限の無いサーバーは一覧に表示されません。
スクリーンショット 2019-10-20 11.28.34.png
スクリーンショット 2019-10-20 11.29.15.png
サーバーに Bot が追加されましたが、この時点ではまだオフラインです。

開発

例として MyDiscordBot というディレクトリを作成して、その中で開発を進めていきます。

$ mkdir MyDiscordBot
$ cd MyDiscordBot/

discord.js のインストール

$ npm install discord.js
略
+ discord.js@11.5.1
added 7 packages from 6 contributors and audited 7 packages in 2.183s
found 0 vulnerabilities

成功するとカレントディレクトリ内に
discord.js および依存ライブラリを含む node-modules ディレクトリと
package-lock.json ファイルが作成されます。

コーディング

MyDiscordBot ディレクトリの直下へ index.js を作成します。

以下、公式リファレンスに記載されている ping と発言すると Pong! とリプライしてくれる Bot の
コードとなります。
(トークン部分のみ定数化しました)

MyDiscordBot/index.js
const Discord = require('discord.js');
const client = new Discord.Client();
const BOT_TOKEN = '***********************************************************';

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', msg => {
    if (msg.content === 'ping') {
        msg.reply('Pong!');
    }
});

client.login(BOT_TOKEN);

BOT_TOKEN には Discord Developer Portal ページで取得した Bot のトークンを
設定してください。

Node.js ローカルサーバーで Bot を起動

$ node index.js
Logged in as Application Name#0000!

スクリーンショット 2019-10-20 12.54.29.png
Bot がオンラインになりました。

スクリーンショット 2019-10-20 12.57.51.png
ping と発言すると Pong! とリプライしてくれます。

デプロイ

このままでは自身の端末で Bot を起動している時のみしか利用できない為、
今回は Heroku にデプロイしてみます。

Heroku を利用した永続起動

こちらの記事を参考に Heroku への登録〜デプロイまでを実施しました。

補足

$ git push heroku origin --force

デプロイしようの箇所に記載されている上記のコマンドではプッシュできなかった為、
下記コマンドで対応しました。

$ git push heroku master --force

Heroku タイムゾーンの設定

Heroku のデフォルトタイムゾーンは UTC(協定世界時)ですので
日本時間と 9時間の遅れがあります。

タイマー処理など時刻に関する処理を実装する予定があれば JST(日本標準時)に変更しておきましょう。

こちらの記事を参考に設定させていただきました。

Heroku コマンド抜粋

$ heroku ps

dyno 無料分の残時間や使用時間、Web/Worker の稼働状態を確認できます。

$ ps:scale worker=0

Worker dyno のスケール数を 0 にできます。

$ ps:scale worker=1

Worker dyno のスケール数を 1 にできます。

15
16
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
15
16