Skeyllのブログ

インディーデベロッパー

【Discord】プリンセスコネクトクランバトル凸管理BOT【プリコネ】

 Discordの凸管理BOT。現在できることは「予約」、「予約表示」、「予約一覧表示」、「予約削除」、「予約全削除」、「予約者に通知」。
スプレッドシートとの連携予定。使用言語はPython。必要な機能や疑問があればツイッターまで。

BOT運用には初期設定時にパソコンが必要(スマホだけでもがんばればできる)。運用だけならプログラミング関係の知識は不要。導入に必要な時間は30分〜1時間。
導入例、
f:id:Skeyll:20190826095721p:plain

BOTトークンの取得

Discord Developer Portal
 上記ページにアクセスし、NewApplycationより利用するアプリを作成。ここで設定したNAMEやアイコンは自分以外は見ることがないので適当でいい。
f:id:Skeyll:20190816152820p:plain

 左側のBot、AddBotから新しいBOTトークンを作成。ここで作成したBOTBOTを呼び出した際にチャット欄に表示される。
Bot作成後のページ下部にあるPamissionでBotに権限を渡すことができる。配布するBotでは権限の必要なことはしないのでチェックしなくてもいい。
f:id:Skeyll:20190816152847p:plain

 トークンのIDを使うのでコピーもしくはClick to Reveal TokenをクリックしてでてきたIDをコピーする。なお、このIDを公開するとBOTを乗っ取られるので知らない人には教えない方がいい。
f:id:Skeyll:20190818175231p:plain



BOT用のスクリプトをダウンロード

 ここのPrincessConnect以下のファイルを全てダウンロードする。Rawを右クリックして「名前を付けてリンク先を保存する。」で保存できる。そしてPrincessConnect.pyの上の方のTOKEN = ‘TOKENID’の部分を先ほどコピーしたIDに変更する。

f:id:Skeyll:20190818200729p:plain


BOTのコードを変更する

 入力時のキーワードや返信内容を変更する場合はコード上で””で囲っている部分を変更すると変わる。ただし「rsv」のように最初にくるキーワードが普段使うような単語だと普段のチャットで起動してしまうことがあるので日本語や名前等を使う場合は注意。
f:id:Skeyll:20190901084748p:plain


 もし大幅な変更を加える場合は更新方法が二つある。一つ目はメモ帳等でコードを変更してからherokuで起動してherokuのコンソール上でエラーを確認する方法。二つ目はPython環境をパソコン上に構築してコードが起動するか確認したあとにheroku上で確認する方法。プログラミングに興味がない場合は一つ目の方法がおすすめ。


 あとは公式サイトを見ればだいたいわかる(とくにAPIの部分)。


 DiscordBOTにはPython以外にもJavascriptC#などでライブラリ(Discord用の機能を簡単に導入できるもの)が用意されているので、得意な言語があるならそちらを使うといいかもしれない。


BOTを常駐させる

 Herokuというリモートサーバーを借りてリモートサーバー上でプログラムを起動して24時間運用する(2019年8月現在の利用料金は月1000時間無料。つまり、二つ以上利用しなければ常に無料)。導入方法は下記を参照。(※クレカを登録しなければ750時間まで無料なので20日強で限界が来る。仮に登録しても自動で課金されることはない)
Pythonで実用Discord Bot(discordpy解説) - Qiita
注意点
・procfileは名前をつけて保存する際に""で名前を囲う。
・procfileのDiscordbot.pyはスクリプトのpyファイルと同じ名前にする(上のものをそのまま利用する場合はPrincessConnect.pyで大文字小文字も合わせる。)
・普段プログラムを触らないなら2つ目の方法を利用する。(その際ファイルは直接Github上で追加する)
Githubはパブリックではなく、プライベートで作る。(IDを載せるため)


初期コマンド

 チャットを特定の単語から始めることでBOTが反応する。特定の単語が先頭なら数字が先でも他の単語が先でも可。
・rsv 1 - 5
 凸予約。数字の順番は自由。同じ番号は同一の投稿で予約できない。
 例 rsv 124、rsv421
・fin 1 - 5
 指定した予約リストから名前を消す。予約していないものが一つでもあれば削除はされるが通知がでない。
 例 fin 143
・rsv list 1 - 5
 指定したリストを表示。数字の順番は自由だが昇順で表示。
 例 rsv 15 list
・rsv!
 リスト5つ全て表示する。
・rsv END
 全てのリストからすべての名前を消す。
・ment 1-5
 特定のリストに含まれる人全員にmentionを送る。 例 ment 123
・cmd
 コマンドとその説明の一覧を表示。


参考
Rapptz/discord.py: An API wrapper for Discord written in Python.
https://github.com/Rapptz/discord.py
Welcome to discord.py — discord.py 1.2.3 documentation
https://discordpy.readthedocs.io/en/latest/index.html
Pythonで実用Discord Bot(discordpy解説) - Qiita
https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f
Pythonのif文による条件分岐の書き方 | note.nkmk.me
https://note.nkmk.me/python-if-elif-else/
【VOICEROID解説】Python環境でDiscord Botを作る。 Part1 前準備編 discord.py rewrite 修正版 - Niconico Video
https://www.nicovideo.jp/watch/sm33794231
python - Pythonで二次元配列の中の各要素のn番目だけを取り出して、要素として並べたい - スタック・オーバーフロー
https://ja.stackoverflow.com/questions/47331/pythonで二次元配列の中の各要素のn番目だけを取り出して-要素として並べたい

プライバシーポリシー  ©Skeyll 2019- All Rights Reserved.