Discord用のBot。discord.pyのBot Commands Frameworkを使用して実装。大まかな機能ごとにCogを分けて開発しているため、不要な機能はCogを削除するだけで削除可能(一部機能に依存関係あり)。同様に、Cogを追加すれば機能追加も可能。v1.0.0からスラッシュコマンドに対応しました
/voice group
メンバー数を指定:指定されたメンバー数になるように、適当な数のチームに分ける(コマンド実行者がボイスチャンネルに接続している必要アリ。サーバーに複数のボイスチャンネルがある必要アリ。Zoomのブレイクアウトルーム機能からインスパイアされ、作成したもの)
/voice team
チーム数指定:メンバー数が均等になるよう、指定された数に分ける(コマンド実行者がボイスチャンネルに接続している必要アリ。サーバーに複数のボイスチャンネルがある必要アリ。Zoomのブレイクアウトルーム機能からインスパイアされ、作成したもの)
/voice members
ボイスチャンネルに接続しているメンバーリストを取得
/simple-poll
簡易的な投票機能(「/」なしの場合と、ありの場合で動作が変わる)。
/radikoSearch
ラジコの番組表を検索する機能
-
検索対象(過去、未来、すべて)はプルダウン、地域はオートコンプリートで指定
-
以下、画像は差し代わっていないが、過去と同様の仕組みとなっている
-
/count-message
-
/count-reaction
/channel
チャンネルを操作するコマンド(サブコマンド必須)。チャンネルの操作権限を渡すと、削除も可能だから嫌だなと思って作ったコマンド。
-
channel make
でPublicなチャンネルを作成
/channel delete-message
指定したキーワードを含むメッセージを削除(自分とBot※のメッセージのみ削除される)※Botを削除対象とするかは環境変数で指定可能。デフォルトは削除しない
/get-audit-log
監査ログを取得。とっても重たい上に見づらい。。。いつかなんとかしたい(AuditLogChangesをわかりやすく表示する方法あるのかな。。。)
/purge
メッセージを削除(自分とBot※のメッセージのみ削除される)※Botを削除対象とするかは環境変数で指定可能。デフォルトは削除しない
/reaction-channeler
リアクションチャンネラーを操作するコマンド(サブコマンド必須)。Slackのリアク字チャンネラーからインスパイアされ、作成したもの。
その他、リアクションによって発動する機能をまとめている。:pushpin:をつけると、ピン留めする機能(メッセージ編集権限を与えるのは微妙だが、ピン留めさせたかったため)や、リアクションによってチャンネルに投稿する機能(リアクションチャンネラー機能とする)、:ok_hand:をつけると画像を保存する機能。
-
v1.0.0で画像も表示するように改善
/start-word-wolf
ワードウルフを行うコマンド。お題を修正したい場合jsonファイルを変更すること
/start-ng-word-game
NGワードゲームを行うコマンド。お題を修正したい場合jsonファイルを変更すること(ワードウルフ機能と共用)
/coyoteGame
コヨーテを行うコマンド
-
コヨーテ開始(説明が長いですがやれば分かります!)
-
コヨーテ開始
-
次ターン以降
-
コヨーテの終了
-
コヨーテ開始(自分でデッキを設定)
/start-ohgiri-game
大喜利を始めるコマンド。お題を修正したい場合jsonファイルを変更するか、後述の環境変数でJSONを返すURLを設定すること
-
大喜利開始(数字を渡すと、勝利点が設定される。すぐ終わらせたいなら、
/start-ohgiri-game win_point:1
等で実行)- 参加方法についてはv1.0.0からボタン式に変更
- コマンドは以下のように表示される
- コマンドを実行すると以下のように返信される
- 参加ボタンを押すと、ゲームに参加する
- 離脱ボタンを押すと、ゲームから離脱する(ゲーム中に離脱できてしまうがやらない方が良い)
- 開始ボタンを押すと、ゲームが始まる(人数が集まっている場合)
- ターンが始まると、お題が与えられる
-
「回答する」ボタンを押して、メニューから大喜利の回答を選ぶ
-
親が回答を選択
- コマンドを使って実行する訳ではない機能
- DISCORD_TOKEN = "discord_bot_token"
- ここにDiscord Botのトークンを貼り付ける(とても重要。これをしないと動かない)
- LOG_LEVEL = INFO
- ログレベルを設定したい場合、設定する。デフォルトはWARN。DEBUG, INFO, WARN, ERRORが設定可能
- AUDIT_LOG_SEND_CHANNEL = "guild1.audit_log_send_channel_id1;guild1.audit_log_send_channel_id1"
- 管理用のチャンネルを記載する。
ギルドID.管理用のチャンネルID
の形式で記載する。複数ある場合は、「;」を挟む必要がある
- 管理用のチャンネルを記載する。
- IS_HEROKU = True
- Herokuで動かす場合、Trueとする(discordのチャンネルを使用し、リアクションチャネラーのデータが消えないように試みる(
reaction_channel_control
を作成し、そこにjsonデータを添付することでデータを保持する))
- Herokuで動かす場合、Trueとする(discordのチャンネルを使用し、リアクションチャネラーのデータが消えないように試みる(
- SAVE_FILE_MESSAGE = "twitter"
- 保存したい画像ファイルをもつURLの一部を指定。正規表現対応。複数ある場合はパイプ(|)などを駆使すること
- FIRST_REACTION_CHECK = True
- すでにリアクションが付けられた物について、リアクションチャンネラーを発動しないかどうかの設定。基本的にはTrueがオススメ。寂しいときはFalseでもOK(何回だってチャンネルに転記されちゃいますが!)
- REACTION_CHANNELER_PERMIT_WEBHOOK_ID = "webhook_id"
- リアクションチャンネラー機能の拡張設定。ここにWebhook IDか「all」という文字列を記載すると、リアクションチャンネラー機能でWebhookが使用できる(v0.7.1で追加で実装)
- リアクションを設定するだけで、別のギルドにメッセージを転送することができるようになる
- この環境変数にWebhook IDがない、または、allが記載されていない場合、登録は可能だが、実際に実行はされない
- 勝手にリアクションチャンネラーを登録され情報が流出することを防ぐため、環境変数で指定がない限り実行されないようにする(少し面倒かもしれない)
- リアクションチャンネラー機能の拡張設定。ここにWebhook IDか「all」という文字列を記載すると、リアクションチャンネラー機能でWebhookが使用できる(v0.7.1で追加で実装)
- SCRAPBOX_SID_AND_PROJECTNAME = "all:scrapbox_sid@projectname1,projectname2;guild1:scrapbox_sid@projectname3"
- Scrapboxの展開をする際に使用する、sidとプロジェクト名についての設定
- sidについては、ScrapboxのprivateプロジェクトのAPIを叩くを参照し、注意点を把握した上対応すること
- 設定が複数存在する場合、「;」を挟む必要がある
- 左端のallの部分(対象ギルド)をギルドIDにすると、指定のギルドでしか展開しない。allの場合、すべてのギルドで発動
- sidを適用したいプロジェクトが複数ある場合、「,」(コンマ)を挟む必要がある
- Scrapboxの展開をする際に使用する、sidとプロジェクト名についての設定
- PURGE_TARGET_IS_ME_AND_BOT=False
/purge
コマンド、/channel delete-message
コマンドで削除する対象にBotを含むかの設定(設定がない場合は、自分の投稿のみが削除対象)
- OHGIRI_JSON_URL=ohgiri_json_url
- 大喜利機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)
- WORDWOLF_JSON_URL=wordwolf_json_url
- ワードウルフ機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)。環境変数がない場合は、jsonファイルを使用
- NGWORD_GAME_JSON_URL=ngword_game_json_url
- NGワードゲーム機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)。環境変数がない場合は、jsonファイルを使用
- USE_IF_AVAILABLE_FILE=False
- 各JSONファイルがあればそちらを優先的に使用するかどうか。デフォルトはFalse。v1.0.0で追加
- テストする時、毎回同じものをダウンロードしていて意味ないなと思ったため追加
- 各JSONファイルがあればそちらを優先的に使用するかどうか。デフォルトはFalse。v1.0.0で追加
- APPLICATION_ID="99999999"
- ENABLE_SLASH_COMMAND_GUILD_ID="99999999"
- あなたのBotのテストする際はテスト用のギルドですぐに使用したいものと思われます(グローバルコマンドは適用まで時間がかかってしまう)
- その場合、この環境変数にテスト用ギルドのIDを設定することで、すぐにスラッシュコマンドが試せます(ギルドコマンドとして設定する)。v1.0.0で追加
- 設定が複数存在する場合、「;」を挟む必要がある
- 例) ENABLE_SLASH_COMMAND_GUILD_ID="99999999;88888888;77777777"
- COUNT_RANK_SETTING
/countMessage
と/countReaction
で使用するランキングの数を保持する環境変数- スラッシュコマンドで指摘できるようにしたため、v1.0.0で廃止
-
Install Poetry
https://python-poetry.org/docs/#installation -
Install modules
poetry install
-
create .env
.env.sample
を参考に.env
を作成する
Botはこちらで作成し、トークンを取得する(トークンは厳重に管理すること!)
*環境変数を修正する際は、環境変数の説明を参照すること! -
Start Bot
poetry run python assistantbot.py
- 詳しくはwikiを参照ください!
-
Install modules
Mac:pip3 install -r requirements.txt
Windows:py -3 pip install -r requirements.txt
-
create .env
.env.sample
を参考に.env
を作成する
Botはこちらで作成し、トークンを取得する(トークンは厳重に管理すること!)
*環境変数を修正する際は、環境変数の説明を参照すること! -
Start Bot
Mac:python3 assistantbot.py
Windows:py -3 assistantbot.py
- 詳しくはwikiを参照ください!
-
Docker imageを作成(または、Docker HubからPull)
1-1. Make Docker Image(Build by yourself)
docker build . -t discordbotheroku:latest .
1-2. Pull from Docker Hub
docker pull tk2812/discord-bot-heroku:latest
-
Make .env-docker file
.env-docker.sample
を参考に.env-docker
を作成する(=の両端はスペース無しが良さそう。以下のスタイルなら動いた)
Botはこちらで作成し、トークンを取得する(トークンは厳重に管理すること!)
*環境変数を修正する際は、環境変数の説明を参照すること!DISCORD_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...
-
Run docker container
このBOTの場合、環境変数はファイル指定がオススメだが、普通に指定しても動くはず(Build by yourself)。
docker run --env-file ./cogs/modules/files/.env-docker discordbotheroku:latest
もしくは
docker run --env-file ./cogs/modules/files/.env-docker docker.io/tk2812/discord-bot-heroku:latest