概要
テレワークが始まって2週目になりますが、オフィスで鳴っていたチャイムが自宅で鳴らないので時間感覚が狂うとの意見が多数あがってきました。ちょうど部門内でDiscordを常用していたので、チャイムを鳴らしてくれるボットを作ってみました。
テレワークになったことで時間の区切り目を意識しいないと忘れがちになるので、チャイムは大事だなと改めて感じる出来事でした。
前提条件
- Discordのアカウントが開設済みであること
- サーバの管理者であること
- dockerおよびdocker-composeがインストールされていること
-
こちらのサンプルコードで実行すること
プログラムの仕様は、ボイスチャネルに人がいれば、ボットが順にチャイムを鳴らしていきます
ボット(人も同様)が同時に複数チャネルに参加できないので、このような仕様になっています... - ライブラリはdiscord.jsを使用しています
1. DiscordのBotを作成
Discord Developer Portalで新規アプリケーションを作成します
アプリケーションに適当な名前を付けた後は、Botを作成します
アクセス用TOKENを控えときましょう
PUBLIC BOTは無効化することをお勧めします
OAuth2用にBotのアクセス権限を選択し、URLを「Copy」します
当サンプルコードでは「Stream」権限のみでOKです
※当記事公開後にこのBotは削除しますので、client_idはそのままになっています
コピーしたURLを新しいタブで開くと、ボットを参加させるサーバを選択します
2. プログラムをスケジュール実行
サンプルコードを取得し、docker-compose.ymlの以下の変数を修正します
- TOKEN_ID・・・前述で控えたアクセスTOKEN
- MUSIC_FILE・・・チャイムの音楽ファイルを差し替える場合は、そのファイルパスを記載
- INTERVAL_TIME・・・ボットがチャネルからチャネルに移る際の待ち時間(最低2秒)
※この待ち時間がないと正常に動作しません!
※初回ビルドに時間がかかるため、スケジューリング前に必ず動作確認してください
cronでdocker-compose up -d
指定するのみ!
Docker環境がない場合以下
- Node.jsをインストール
- サンプルコードのapp配下で
npm install
- TOKEN_ID、MUSIC_FILE、INTERVAL_TIMEを環境変数化するか、app.js内のそれらのコードを直書きする
- cronで
npm start
指定する
開発
- 当リポジトリではVS CodeのRemote Containerをサポートしています
- discord.jsでdiscord apiをコールしています
アプリの仕様
- ボットがサーバに接続できたら、人がいるボイスチャネルをリスト化する
- それらのチャネルを順にチャイムを鳴らす
- すべて鳴らし終えたらログアウトする
※定時刻にチャイムを鳴らせればよいので、常駐はしていない