4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Discordでチャイムボットを作ってみた(初心者)

Posted at

概要

 テレワークが始まって2週目になりますが、オフィスで鳴っていたチャイムが自宅で鳴らないので時間感覚が狂うとの意見が多数あがってきました。ちょうど部門内でDiscordを常用していたので、チャイムを鳴らしてくれるボットを作ってみました。
 テレワークになったことで時間の区切り目を意識しいないと忘れがちになるので、チャイムは大事だなと改めて感じる出来事でした。

前提条件

  • Discordのアカウントが開設済みであること
  • サーバの管理者であること
  • dockerおよびdocker-composeがインストールされていること
  • こちらのサンプルコードで実行すること
    プログラムの仕様は、ボイスチャネルに人がいれば、ボットが順にチャイムを鳴らしていきます
    ボット(人も同様)が同時に複数チャネルに参加できないので、このような仕様になっています...
  • ライブラリはdiscord.jsを使用しています

1. DiscordのBotを作成

Discord Developer Portalで新規アプリケーションを作成します
image.png

アプリケーションに適当な名前を付けた後は、Botを作成します
image.png

アクセス用TOKENを控えときましょう
PUBLIC BOTは無効化することをお勧めします
image.png

OAuth2用にBotのアクセス権限を選択し、URLを「Copy」します
当サンプルコードでは「Stream」権限のみでOKです
※当記事公開後にこのBotは削除しますので、client_idはそのままになっています
image.png

コピーしたURLを新しいタブで開くと、ボットを参加させるサーバを選択します
image.png

追加したサーバに以下の様にメッセージが表示されたらOKです
image.png

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をコールしています

アプリの仕様

  • ボットがサーバに接続できたら、人がいるボイスチャネルをリスト化する
  • それらのチャネルを順にチャイムを鳴らす
  • すべて鳴らし終えたらログアウトする

※定時刻にチャイムを鳴らせればよいので、常駐はしていない

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?