ぼくがかんがえた最強のDiscord Bot作りました!
wikiもけっこうくわしく書きました!(たぶん...)
wikiにある通り、下記の招待リンクから、discordサーバーに参加すれば試せます!
Issueとか書くまでもないようなこととかあれば書き込んでください...
機能
通常用カテゴリ(messagecog.pyで実装)
/group
メンバー数を指定:指定されたメンバー数になるように、適当な数のチームに分ける
コマンド実行者がボイスチャンネルに接続している必要アリ
サーバーに複数のボイスチャンネルがある必要アリ
/team
チーム数指定:メンバー数が均等になるよう、指定された数に分ける
コマンド実行者がボイスチャンネルに接続している必要アリ
サーバーに複数のボイスチャンネルがある必要アリ
/vcmembers
ボイスチャンネルに接続しているメンバーリストを取得
/poll
簡易的な投票機能(引数が1つの場合と2以上の場合で動作が変わる)。
引数が1件の場合、YES, NOの投票となる
引数が2件以上の場合、1つ目の引数がタイトルになり、2件目以降が投票される項目になる
/radikoSearch
ラジコの番組表を検索する機能(サブコマンド必須)
サブコマンドなし( /radikoSearch
)
通常の検索( /radikoSearch normal
)
もっとも単純なキーワードのみ指定
キーワード、検索対象(過去、未来)、地域を指定
日付を指定して検索( /radikoSearch withDate
)
sを付与し開始日付、eを付与し終了日付を設定できる
todayを設定すると当日として扱われる(省略系のtも可能)
日付の桁数で扱いが変わる(1桁はx日後として扱われ、2桁は当月の日付と扱われ、4桁は今年の月日として扱われる)
/countMessage
メッセージを数え、ランキングにするコマンド
チャンネル名、(チャンネルごとに)数える数を指定できる。チャンネル名で all
を指定するとすべてのチャンネルを数える
/countReaction
リアクションを数え、ランキングにするコマンド
チャンネル名、(チャンネルごとに)数える数を指定できる。チャンネル名で all
を指定するとすべてのチャンネルを数える
管理用カテゴリ(admincog.pyで実装)
/channel
チャンネルを操作するコマンド(サブコマンド必須)
チャンネルの操作権限を渡すと、削除も可能だから嫌だなと思って作ったコマンド。
サブコマンド make
でPublicなチャンネルを作成
サブコマンド privateMake
でPrivateなチャンネルを作成
サブコマンド roleDelete
でチャンネルからロールを削除
サブコマンド roleDelete
でチャンネルからロールを削除失敗
/getAuditLog
監査ログを取得
とっても重たい上に見づらい。。。
/purge
メッセージを削除(自分とBot※のメッセージのみ削除される)
仕様を変更し、環境変数でBotの発言を削除可能かは設定可能とした(環境変数で設定がない場合は削除できない)
よく考えると一般的なユーザーはBotの発言を削除されたくないと思われるため
その辺のゲストが突然Botの発言削除しまくったらBANされる...
/deleteMessage
リアクションチャンネラーカテゴリ(reactionchannelercog.pyで実装)
/reactionChanneler
リアクションチャンネラーを操作するコマンド(サブコマンド必須)
Slackのリアク字チャンネラーからインスパイアされ、作成したもの。
Herokuは1日1回再起動し、ファイルが全部消えてしまうため...
リアクションチャンネラー追加
リアクションチャンネラー削除
リアクションチャンネラー表示
リアクションチャンネラー全削除
その他、リアクションによって発動する機能をまとめている
:pushpin:をつけると、ピン留めする機能
メッセージ編集権限を与えるのは微妙だが、ピン留めさせたかったため
:pushpin: のイベント
リアクションチャンネラーで登録したものが反応する部分
リアクションチャンネラーの対象のリアクションを追加すると、
あらかじめ指定されたチャンネルへリンクが投稿される
:ok_hand:をつけると画像を保存する機能
ゲームカテゴリ(gamecog.pyで実装)
/wordWolf
ワードウルフを行うコマンド
ワードウルフ開始(これは時間が経過し、ネタバレ投稿された画像)
BotからくるDMの様子
/ngWordGame
NGワードゲームを行うコマンド
NGワードゲーム開始(これは時間が経過し、ネタバレ投稿された画像)
BotからくるDMの様子
/coyoteGame
コヨーテを行うコマンド
コヨーテ開始(説明が長いですがやれば分かります!)
コヨーテ開始やディール時のDMの様子
コヨーテのディール(カードを配る)
コヨーテ開始(自分でデッキを設定)
コヨーテの状況説明
コヨーテの状況説明(ネタバレ有)
/ohgiriGame
「大喜利」用のJSONを返却するURLを作成する方法は
大喜利JSONに書きました!
大喜利開始(数字を渡すと、勝利点が設定される。すぐ終わらせたいなら、/o start 1等で実行)
大喜利開始後、BotからくるDMの様子(ここに表示された番号を回答として選択)
大喜利の回答を選んだところ
大喜利の状況説明(経過ターン、現在の親、お題、それぞれの得点などが表示される)
大喜利の回答カードを捨てるコマンド(いい回答が手札にない場合使うコマンド)
一応ペナルティとして1点マイナスです!(本家にはありません!)
親が回答を選択
親が回答を選択しゲーム終了するところ(誰かが勝利点に到達したら終了)
メッセージイベント用(onmessagecog.pyで実装)
コマンドを使って実行する訳ではない機能
メッセージ投稿時に発動する、ScrapboxのURL展開機能
メッセージ編集時(discordによるURLの展開時)に発動する、画像保存機能
カテゴリ未設定
/help
ヘルプを表示( /help channel
のように指定すると説明が返答される)
コマンドが分からない、使い方が分からない、エイリアスが分からない時に使用
help
コマンドでこのBOTの使えるコマンドが表示される
help
コマンドの結果、下線で表示された物(Cogに付けた機能名)について指定すると説明が表示される
コマンドを指定すれば、コマンドの説明が表示される
コマンドのサブコマンドも(あれば)指定でき、説明が表示される
環境変数の説明
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データを添付することでデータを保持する)
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が記載されていない場合、登録は可能だが、実際に実行はされない
勝手にリアクションチャンネラーを登録され情報が流出することを防ぐため、環境変数で指定がない限り実行されないようにする(少し面倒かもしれない)
SCRAPBOX_SID_AND_PROJECTNAME = "all:scrapbox_sid@projectname1,projectname2;guild1:scrapbox_sid@projectname3"
Scrapboxの展開をする際に使用する、sidとプロジェクト名についての設定
設定が複数存在する場合、「;」を挟む必要がある
左端のallの部分(対象ギルド)をギルドIDにすると、指定のギルドでしか展開しない
allの場合、すべてのギルドで発動
sidを適用したいプロジェクトが複数ある場合、「,」(コンマ)を挟む必要がある
PURGE_TARGET_IS_ME_AND_BOT=False
/purgeコマンド、/deleteMessageコマンドで削除する対象にBotを含むかの設定(設定がない場合は、自分の投稿のみが削除対象)
OHGIRI_JSON_URL=ohgiri_json_url
大喜利機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)
大喜利JSONに具体的な設定を書きました! そこで作成したウェブアプリのURLを登録する感じです!
WORDWOLF_JSON_URL=wordwolf_json_url
ワードウルフ機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)。環境変数がない場合は、jsonファイルを使用
NGWORD_GAME_JSON_URL=ngword_game_json_url
NGワードゲーム機能で使用するJSONをURLから取得する場合に設定(Cogを読み込む際に取得されます)。環境変数がない場合は、jsonファイルを使用
COUNT_RANK_SETTING=5
/countMessageと/countReactionで使用するランキングの数を設定。未指定の場合、5として扱う。