【ブルプロ】BLUE PROTOCOL の昼夜切り替え通知 bot を作ってみた

## はじめに
BLUE PROTOCOL（以下、ブルプロ）の昼夜切り替えタイミングを通知してくれる Discord Bot（BURUPURO-TIMER） を作成しました。作ろうと思った経緯はブルプロをやっている方なら分かると思います。ブルプロには昼限定や夜限定湧きのネームドボスが存在します。そして、昼夜は 25 分で切り替わります。しかし、ミッション中や、自由探索に入っていると今、昼なのか夜なのか分からないのです。また、他の作業をやりながら、夜湧きネームドのためにブルプロを起動するという方もいると思います（私が現にそうでした）。そのために、昼夜切り替えタイミングを通知してくれる Bot を作成しました。

https://github.com/Pumi1a/BURUPURO-TIMER

## 注意点
機能改善要望やバグなどは、`/send_message_to_developer`コマンドを利用して下さい。X（旧 Twitter）は基本見てないので気づきません。現時点で把握しているバグについては最後の方で記載しています。上手く動作しない時は `/reset_server` コマンドを実行して再設定してみて下さい。
なお、利用しているホスティングサービスは "Railway" になります。性能はメモリが 8GB、CPU が 8 コアになります。そこまで負荷のかかる Bot ではないと思いますが、もしかしたら安定しなくなるかもしれません。"Railway" については以下記事にまとめています。

https://qiita.com/Pumila/items/29f26fb349d5592046ae

## 導入方法
**注意：Bot の導入はサーバの管理者権限を持っている方しか出来ません。**
[こちら](https://discord.com/api/oauth2/authorize?client_id=1127823303369834578&permissions=3072&scope=bot%20applications.commands)からクリックしてログイン後、導入したいサーバを選択して[はい]、続いて認証を押下して下さい。ロボットかどうかの確認画面でチェックして導入完了です。
必要なくなったら、サーバ負荷軽減のために追放して頂けると助かります。

## 使い方
**注意：5 分おきにサーバ情報の更新を行っていますが、スラッシュコマンドの実行のタイミングによっては、期待通りの挙動を示さないことがあります。** 例えば、通知先のチャンネル変更したのに、デフォルトの通知先に通知される、通知をオフにしたのに通知されるなどです。これらに関してはプログラムの仕様上の問題なのでご了承下さい。
**また、基準時間を設定しないと Bot による投稿はされません。**
**Bot を再デプロイしたときには再度設定をお願いします。データベースの用意が面倒なので、サーバごとの設定はデータベースに保存していません。ご了承下さい（要望が多ければデータベースの導入を検討します）。**

### 各スラッシュコマンドの説明
Bot の各スラッシュコマンドについて説明していきます。スラッシュコマンド実行時に以下のようなエラーが出たときはもう一度コマンドを試してみて下さい。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/ad29da08-18cc-0377-f841-a0c0b9fa2655.png)

#### 通知先のチャンネルを変更する
通知先のチャンネルを変更することができます。デフォルトはシステムメッセージのチャンネルになっています。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/set_channel` を選択して下さい。
2. 通知をさせたいチャンネル名を入力し、実行して下さい。候補として挙がっているものから選択しても構いません。
3. Bot に投稿権限がないチャンネル、もしくはテキストチャンネルではないチャンネルを選択した場合、以下のような警告が出ます。`Warning: No permission to post in the channel {new_channel.name}.`, `{new_channel.name} is not a text channel.`。
3. Bot から `Set channel to {new_channel_name}.` とメッセージが来ます。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/935ca7eb-0d9e-f222-600e-b67538ad1402.png)

#### 通知を開始する
昼夜のタイミングを通知させるか設定することができます。デフォルト値は `False` です。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/set_posting` を選択して下さい。
2. 選択肢として、[True, False] が挙がると思います。通知させたい時は、`True` を、通知を停止する時は `False` を選択して下さい。
3. Bot から `Set posting to {new_value}.` とメッセージが来ます。
![screenshot2024-01-19 08.42.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/33d04e75-3f90-bf2b-2da4-863fd5fbfb36.png)

#### 昼夜のどちらかを通知、または両方を通知する
昼夜のどちらかだけ通知をさせたいという方もいますよね（夜限のネームドは夜だけ通知させればいいわけですし）。そこで、昼夜両方を通知させるか、昼夜のどちらかだけ通知させるかを設定することができます。デフォルト値は両方通知するようになっています。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/set_state` を選択して下さい。
2. 選択肢として、[Day, Night, Both] が挙がると思います。夜だけ通知させたい方は、`Night` を、昼だけ通知させたい方は `Day` を選択して実行して下さい。やっぱり両方通知させたくなったら、 `Both` を選択して下さい。
3. Bot から `State set to: {state}` とメッセージが来ます。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/ddcd4da3-2486-7e55-2cad-58b22a1ac6ce.png)

#### 通知するタイミングを昼/夜の何分前に変更する
昼/夜の通知方法を「あと何分で昼/夜になります」と変更することができます。デフォルト値は 0 です。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/notify_in_advance` を選択して下さい。
2. 次にどれくらい前に通知させたいかを、分単位で入力し実行して下さい。
3. Bot から `Will now notify {minutes_before} minutes in advance.` とメッセージが来ます。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/b6d3089b-17d2-da45-29e8-a064da134e43.png)

#### 通知を昼/夜になったタイミングと何分前の両方投稿する
前項にて昼/夜の何分前に通知するように設定した際に、昼/夜になったタイミングの通知も投稿させることできます。デフォルト値は `False` です。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/set_dual_notification` を選択して下さい。
2. 選択肢として、[True, False] が挙がると思います。両方通知させたい時は、`True` を、通知させたくない時は `False` を選択して下さい。
3. Bot から `Set dual_notification to {new_value}.` とメッセージが来ます。

#### レイドの時間を通知する
レイドになったタイミングを通知することができます。デフォルト値は `False` です。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/set_raid_posting` を選択して下さい。
2. 選択肢として、[True, False] が挙がると思います。通知をする時は、`True` を、通知を停止する時は `False` を選択して下さい。
3. Bot から `Set raid_posting to {new_value}.` とメッセージが来ます。

#### レイドを通知するタイミングを何分前に変更する
レイドの通知方法を、「あと何分でレイドが開始します」と変更することができます。デフォルト値は 0 です。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/notify_in_advance_for_raid` を選択して下さい。
2. 次にどれくらい前に通知させたいかを、分単位で入力し実行して下さい。
3. Bot から `Will now notify {minutes_before} minutes in advance for raid.` とメッセージが来ます。

#### 定期投稿を削除する
Bot の昼/夜の通知を遡り、削除することができます。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から`/clear_posts` を選択して実行して下さい。
2. 次にどれくらいまで遡り削除するか入力し実行して下さい。上限は 500 ですが、APIが制限される可能性があるので、できれば小さな数値を入力して下さい。
3. Bot から `Deleting bot's periodic posts...` とメッセージが来ます。
4. 削除が完了すると削除した投稿数に応じて、Bot から `Deleted {deleted_count} bot's periodic posts.` とメッセージが来ます。
5. 項目 3 と 4 のメッセージについては、自動的に削除されます。

#### サーバの設定を表示する
サーバの現在の設定を表示することができます。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/check_config` を選択して実行して下さい。
2. Bot から以下のようなメッセージが来ます。

#### 開発者へ機能改善要望やバグなどを報告する
私に対して機能改善要望やバグなどを報告することができます。X（旧 Twitter）は基本見ていないので、こちらを利用して頂けると助かります。当然ですが、イタズラ目的での利用が多数見られるようであれば、Bot の使用制限ペナルティを科します。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から `/send_message_to_develope` を選択して実行して下さい。
2. 報告したい内容を入力し実行して下さい。
3. Bot から `Message sent to the bot's developer.` とメッセージが来ます。

#### 設定を初期値にリセットする
各種設定を初期値にリセットすることができます。上手く投稿がされない時などに使用してみて下さい。
1. "/" を入力して、ブルプロタイマーのアイコンをクリックし、コマンド一覧から、`/reset_server` を選択して実行して下さい。
2. Bot から `Server configuration has been reset. Default post channel set to {channel.name}. Please input your settings.` とメッセージが来ます。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/53e9d72e-0ac3-9a23-ccf0-4996e17a3f02.png)

## 現時点で把握しているバグ

## 現時点での実装予定の機能

## 最後に
ブルプロ楽しいーーーー！！！オロチの「生命の奔流」全然出ねええええええええ（くそがぁーーーーー）。オロチ 11 体厳選しましたよ…そのために、50 分間隔でタイマーをかけながら、他の作業をしていたのですが、これ Bot で自動化できるんじゃねと思い作成しました。ぜひ使ってみて下さい。
サーバの維持費用のために、この Bot を気に入ってくれた方はご寄付して頂けると助かります。
ご意見、ご感想、ご要望、エラー報告などは[Twitter](https://twitter.com/Pumi1a) まで。