Help us understand the problem. What is going on with this article?

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

環境

  • macOS Mojave 10.14.3

事前準備

Homebrew のインストール

https://qiita.com/naente_dev/items/1195ff834c65be4be5a6

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 のインストール

https://discord.js.org/

$ 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 を利用した永続起動

https://qiita.com/InkoHX/items/590b5f15426a6e813e92

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

補足

$ git push heroku origin --force

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

$ git push heroku master --force

Heroku タイムゾーンの設定

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

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

https://qiita.com/ikemura23/items/52ab8a5d260c7ee4d42b

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

Heroku コマンド抜粋

$ heroku ps

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

$ ps:scale worker=0

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

$ ps:scale worker=1

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした