- Discordでリマインダーを使うBotです(リマインドの定期実行も可能)
- discord.py v2.0のスラッシュコマンドが使えるため、コマンドを覚える必要がなく、それぞれのオプションの意味が表示されます
- 有名なリマインダーBotが定期実行に寄付が必要という記事を見て作ってみました
- 以下の招待リンクからお試しできます
- 招待リンク: https://discord.com/api/oauth2/authorize?client_id=873515660674756639&permissions=2147723280&scope=bot%20applications.commands
- 止まってたりしたらこっそり教えてください(その前に、
/remind-task-check
で直るかもしれません)
- 上記Botの運営でお金がかかるので、PIXIV FANBOXで支援を募ってみることにしました
- とくに支援しなくても全機能使えますが、支援してくださったらサーバーをクラウドにする等できるかもしれません
- 支援がない場合でも可能な限り運営しますが、いつでも停止/一時停止される可能性があります
- ギルドで使用すると、自分がそのギルドで登録したリマインドを表示します
- BotとのDMで使用すると、自分が登録したリマインドを表示します
- オプション
- status
- 実行予定のリマインドリスト(デフォルトと同じ)
- 今後リマインドされるリストを表示します
- キャンセルしたリマインドリスト
- キャンセルされたリマインドリストを表示します
- スキップしたリマインドリスト(v1.0.2で追加)
- スキップされたリマインドリストを表示します
- 終了したリマインドリスト
- リマインドしたリストを表示します
- エラーになったリマインドリスト
- エラーになってしまったリストを表示します
- 実行予定のリマインドリスト(デフォルトと同じ)
- filter
- reply_is_hidden
- 自分のみ
- 実行結果は自分だけ見ることができます
- 全員に見せる
- 実行結果はBotからのリプライとして表示されます
- 自分のみ
- status
-
リマインドを登録します(登録したリマインドが今は表示されます)
- 秘密なリマインドはコレで登録せず、ご自身のカレンダーやTODOへ登録するようにしてください
-
必須のオプション(3つ)
- date(リマインド日時)
- mm/dd形式
- 日数でも登録できる(
0
で当日、1
で1日後) - yyyy/mm/dd形式で年も含めて登録
- mm-dd形式もOK(yyyy-mm-dd形式もOK)
- mmdd形式もOK
- 1-3桁の場合、現在日時+その日数後として登録
0
→当日1
→1日後100
→100日後
- time(リマインド時間)
- 0(現在時間) *v1.0.1から
- hh:mi形式(例→
23:12
) - xxh(xx時間後という意味。例→
10h
) - xxmi(xx分後という意味。例→
10mi
)
- message(メッセージ)
- リマインドするメッセージ
- 改行したい場合は
<br>
、<改行>
、【改行】
、@@@
のどれかを入力してください- 例→
改行テスト<br>改行したよ!
- 例→
- メンションしたい場合、通常のメッセージと同様に、@xxxx形式で入力してください(リマインド時にメンションされます)
- こっそり送りたい場合、
@silent
としてもよいです(v1.0.1で追加)- オプションが欲しい人のために、別途オプションでも
silent
できます(こっそりメッセージの先頭につけるだけですが……)
- オプションが欲しい人のために、別途オプションでも
- スタンプ(Stickers)があればスタンプに変換(v1.0.3で追加)
- :ganbare:みたいにメッセージに紛れ込ませてください(Discordの予測変換的なのでやると、Botにいきませんので注意)
- 最大3つ付与可能(スタンプの順番はテキトーです)
- date(リマインド日時)
-
オプション
- repeat_interval(繰り返し間隔)
- XX分: XXmi
- XX時間: XXh
- X日: Xd
- Xヶ月: Xm
- X年: Xy
- Xは数字(例→
10mi
) - 通知した後、上記で指定しただけ遅らせた年月で通知するリマインドを作成します
- Xは数字(例→
- 特殊なもの
- 平日: 平日
- 月曜日〜金曜日にリマインドされます(祝日は考慮しません)
- 休日: 休日
- 土曜日〜日曜日にリマインドされます
- 曜日: 月水
- 指定した曜日にリマインドされます(
月水金
のように複数指定できます)
- 指定した曜日にリマインドされます(
- 平日: 平日
- repoeat_max_count(繰り返し最大回数)
- 数字を設定
- 例→
2
としたら、1回目の通知の後に繰り返し間隔だけ遅らせたリマインドが作成されます。2回目を通知し、それ以降は通知されません- 具体例:
/remind-make date:2021/3/26 time:21:00 message:@here test!!! repeat_interval:2d repeat_max_count:2
- 2021/3/26 21:00に「@here test!!!」が通知され、2回目として2021/3/28 21:00に「@here test!!!(2)」が通知されます
- 2回目以降は勝手に、メッセージに連番をふります(URLの場合のみ連番をふりません)
- 追加で通知したい場合は別途リマインドを作成してください
- 具体例:
- channel(リマインドするチャンネル)
- #xxxxで指定したチャンネルにリマインドします
- そのままチャンネル名を指定することもできます
- このオプションがない場合、コマンドを実行したチャンネルにリマインドします
- ただし、ボイスチャンネル内のチャンネルで実行した場合は登録できません(DMで登録失敗の旨連絡)
- silent(こっそり送る)
- ふつう
- 通常のメッセージです
- こっそり
- こっそりしたメッセージです。深夜帯や早朝にオススメ
- discord曰く、「メッセージをそっと静かに送信」。受信者に通知の点は表示されます、アラートはありません、とのこと(プッシュ通知やデスクトップ通知されない)
- v1.0.1で追加
- ふつう
- reply_is_hidden
- 自分のみ
- 実行結果は自分だけ見ることができます
- 全員に見せる
- 実行結果はBotからのリプライとして表示されます
- 自分のみ
- repeat_interval(繰り返し間隔)
- リマインドをキャンセルします(v1.0.3で仕様変更あり)
- 必須のオプション(1つ)
- オプション
- reply_is_hidden
- 自分のみ
- 実行結果は自分だけ見ることができます
- 全員に見せる
- 実行結果はBotからのリプライとして表示されます
- 自分のみ
- reply_is_hidden
- ギルド内のみ、かつ、ギルドの管理者権限保持者のみ使用可能
- そのギルドで登録されているリマインドをすべて表示します
- オプション
- status
- 実行予定のリマインドリスト(デフォルトと同じ)
- 今後リマインドされるリストを表示します
- キャンセルしたリマインドリスト
- キャンセルされたリマインドリストを表示します
- スキップしたリマインドリスト(v1.0.2で追加)
- スキップされたリマインドリストを表示します
- 終了したリマインドリスト
- リマインドしたリストを表示します
- エラーになったリマインドリスト
- エラーになってしまったリストを表示します
- 実行予定のリマインドリスト(デフォルトと同じ)
- filter
- reply_is_hidden
- 自分のみ
- 実行結果は自分だけ見ることができます
- 全員に見せる
- 実行結果はBotからのリプライとして表示されます
- 自分のみ
- status
- BotとのDMのみ、かつ、Botのオーナー(DiscordのBotのトークンを生成した人)のみ使用可能
- Botに登録されているリマインドをすべて表示します
- オプション
- status
- 実行予定のリマインドリスト(デフォルトと同じ)
- 今後リマインドされるリストを表示します
- キャンセルしたリマインドリスト
- キャンセルされたリマインドリストを表示します
- スキップしたリマインドリスト(v1.0.2で追加)
- スキップされたリマインドリストを表示します
- 終了したリマインドリスト
- リマインドしたリストを表示します
- エラーになったリマインドリスト
- エラーになってしまったリストを表示します
- 実行予定のリマインドリスト(デフォルトと同じ)
- filter
- reply_is_hidden
- 自分のみ
- 実行結果は自分だけ見ることができます
- 全員に見せる
- 実行結果はBotからのリプライとして表示されます
- 自分のみ
- status
- BotのTaskが正常に動いているかチェックする(止まってたらTaskを開始するはず)
- オプション
- reply_is_hidden
- 自分のみ
- 実行結果は自分だけ見ることができます
- 全員に見せる
- 実行結果はBotからのリプライとして表示されます
- 自分のみ
- reply_is_hidden
- Botのオーナー(DiscordのBotのトークンを生成した人)のみ使用可能
- ステータスが「完了」のリマインドをすべて削除(添付ファイルの容量が厳しいため)
- リマインドスキップします(v1.0.2で追加)
- オプションのリマインド再開日付と時間が両方とも未指定の場合は、1回スキップされます(リマインド再開時間に1miが指定されたものとしてスキップ)
- 必須のオプション(1つ)
- skip_no(スキップするリマインドのNo)
- 数字
- あなたが登録したリマインドのNoである必要があります(他人のリマインドはスキップできません)
- skip_no(スキップするリマインドのNo)
- オプション
- next_date(リマインド再開日付)
- mm/dd形式
- 日数でも登録できる(
0
で当日、1
で1日後) - yyyy/mm/dd形式で年も含めて登録
- mm-dd形式もOK(yyyy-mm-dd形式もOK)
- mmdd形式もOK
- 1-3桁の場合、現在日時+その日数後として登録
0
→当日1
→1日後100
→100日後
- next_time(リマインド再開時間)
- 0(現在時間)
- hh:mi形式(例→
23:12
) - xxh(xx時間後という意味。例→
10h
) - xxmi(xx分後という意味。例→
10mi
)- ここの指定で時間が繰り上がる場合、おかしな挙動になるため注意してください(v1.0.2)
- 例: 4/10 23:00が次回リマインドの時、2hを指定すると4/10 1:00となってしまう
- reply_is_hidden
- 自分のみ
- 実行結果は自分だけ見ることができます
- 全員に見せる
- 実行結果はBotからのリプライとして表示されます
- 自分のみ
- next_date(リマインド再開日付)
- あなたのDiscordのトークンを記載(トークンは厳重に管理し、公開されないよう配慮すること!)
- 例: DISCORD_TOKEN="fdj2iur928u42q4u239858290"
- ログレベル(DEBUG/INFO/WARNING/ERROR)
- 例: LOG_LEVEL="INFO"
- 復号されたファイルを残すかどうか(TRUEの時のみ残す。デフォルトでは復号されたファイルは削除される)
- 例: KEEP_DECRYPTED_FILE=FALSE
- Herokuで動かすかどうか
- Herokuの場合、ファイルが削除されるので、discordの添付ファイルを使って保管を試みる(ファイルが削除されていたら、読み込む)
- 例: IS_HEROKU=FALSE
- Repl.itで動かすかどうか
- Repl.itの場合、sqlite3の保管が怪しいので、discordの添付ファイルを使って保管を試みる
- 例: IS_REPLIT=TRUE
- Bot自身が添付したファイルのみ読み込むように制限するかどうか
- Bot以外(他のBotや人間)が添付したファイルのみを読み込むようになります
- 例: RESTRICT_ATTACHMENT_FILE=TRUE
- 優先してファイルを添付するギルド(1件のみ指定してください)
- 権限の問題で、Botがファイル保管に失敗することがあるため、失敗時に添付するギルドを指定できる
- 例: PRIORITY_GUILD=99999999999
- リマインダーのデータを保存するチャンネル名を指定できます(未指定の場合remind_control_channel)
- 他のギルドもその名前のチャンネルが保存先に使われるので気をつけてください
- テスト中に複数のリマインダーBot動かしてて困ったので作成した環境変数です(基本開発に使うもの)
- 例: REMIND_CONTROL_CHANNEL_NAME=リマインドチャンネル
- あなたのBotの
APPLICATION ID
を指定する(スラッシュコマンドを使う上で設定が必須となります)。v1.0.0で追加- 開発者ポータルの該当Botの
General Information
の上部にある、APPLICATION ID
- 開発者ポータルの該当Botの
- あなたのBotのテストする際はテスト用のギルドですぐに使用したいものと思われます(グローバルコマンドは適用まで時間がかかってしまう)
- その場合、この環境変数にテスト用ギルドのIDを設定することで、すぐにスラッシュコマンドが試せます(ギルドコマンドとして設定する)。v1.0.0で追加
- 設定が複数存在する場合、「;」を挟む必要がある
- 1件の場合: ENABLE_SLASH_COMMAND_GUILD_ID=18471289371923
- 2件の場合: ENABLE_SLASH_COMMAND_GUILD_ID=18471289371923;1389103890128390
- 設定が複数存在する場合、「;」を挟む必要がある
ENABLE_SLASH_COMMAND_GUILD_ID_LIST
: ENABLE_SLASH_COMMAND_GUILD_IDに置き換えられました
- wikiに書くつもりです(時期未定)
- わからないことがあればDiscussionsに書いてみてください
- poetryがインストールされていること
.env.sample
をコピーし、.env
が作成されていること(それぞれの環境変数の意味は環境変数を参照ください)
- 以下のコマンドを実行
poetry run python discord-reminderbot.py
docker
,docker-compose
コマンドが利用できること
.env
の準備の代わりに、docker-compose.override.yml
を作成して環境変数を記載
version: "3"
services:
app:
environment:
- DISCORD_TOKEN=__あなたのDicordトークン__
- LOG_LEVEL=INFO
- ENABLE_SLASH_COMMAND_GUILD_ID= __あなたのGuild_IDを入力(数字/複数あるなら;を挟むこと。グローバルコマンドの場合は入力しないこと!(その場合1時間程度登録に時間がかかる可能性があります))__
- KEEP_DECRYPTED_FILE=FALSE
- IS_HEROKU=FALSE
- IS_REPLIT=FALSE
- RESTRICT_ATTACHMENT_FILE=FALSE
- PRIORITY_GUILD=__あなたのGuild_IDを入力(数字)__
- REMIND_CONTROL_CHANNEL_NAME=remind_control_channel
- APPLICATION_ID=__あなたのBotのAPPLICATION_IDを入力(数字)__
-
Dockerイメージのビルド
docker-compose build
-
起動
docker-compose up -d
-
停止
docker-compose down
-
ログ出力
docker-compose logs -f