discordで使える白猫テニス用レート計算botを作ったよ！

iOS版を作成しました。現在appstoreで公開中です。
そちらの使い方は[こちらの記事](https://qiita.com/Vagrants/items/9487aecfd9509d039391)をどうぞ！
# 概要
白猫テニスガチ勢だった頃は自分が1日にどんだけレートを稼いだのか、またチームでどれくらいレートを稼いだのか、こんなことを考えていたわけです。実際のところ、こういうデータをしっかり見返して反省していくとプレイヤースキルがあがるんじゃねーかなと思ってました。モチべもあがるしね。でも手で計算するのは馬鹿らしい。せっかく通話アプリ[Discord](https://discordapp.com/)を使ってたわけだし、こいつでbot作ればいいじゃん！ということで作りました。

なお、自分はプログラムのスペシャリストではないのでとりあえず動けばいいという発想です。コードが汚ねえ！とか、読みづれえ！とかは勘弁してくださいwコード改変等自由にどうぞ。バグもそれなりにあるかと。@siro_live_0501に報告してもらえれば暇な時に直します。

また、一部の内容は[以前の記事](https://qiita.com/siro_live_0501/items/218099a457e6dbb7f3a8)と重複しています。

**本記事はMacならターミナル.app、Windowsならコマンドプロンプト、linuxならbash等のシェルを使います。使うと言っても大したことやらないですのでご安心ください。記事を再現するだけでできるはずです。ただし、多少プログラム動作周りの知識があったほうが楽ではあると思います。**

# 何ができる？
基本的には試合終了時に変動したレートをチームメンバー各々でDiscordのテキストチャンネルに記述してくと以下の情報が得られるようになります。

+ 自分(またはペア)の稼いだレート
+ その日の個人(またはペア)の勝率
+ 個人のレート増減の視覚化
+ チーム全体の稼いだレート
+ その日のチーム全体の勝率
+ チーム全体のレート増減の視覚化

具体的な使い方は下の方に書きますが、例えば以下のような感じです。

<img width="506" alt="Screen Shot 2017-12-03 at 19.22.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/170560/bccd3947-391e-9778-6549-808c110dfd4f.png">


# ダウンロードと初期設定
自分はMacユーザなのでMacでの設定方法を書きますが、他のOSでもpython3さえあれば基本的に動きます。チームに1人くらいできる人がいるはず(？)なので頑張ってください。

## 必要な実行環境など
+ [Python](https://www.python.org/downloads/) (>=3.6, macはbrewからのが楽、後述)
+ pip (pythonパッケージインストール用、下に参考リンクあり)
+ テキストエディタ(メモ帳でもよい)
+ [PC用discord](https://discordapp.com/)
+ ターミナルまたはコマンドプロンプト、またはなんらかのシェル
+ **botを導入したいDiscordサーバの管理者権限**（重要）

ターミナルはmac標準アプリ、コマンドプロンプトはWindows標準アプリ。pythonを入れるときは、実行パスに追加みたいなやつにチェックをいれること。英語だとaddなんちゃらと書いてあるはず。大抵の場合はなにもしなくてもpipが使える状態になっているはず。できない場合は以下を参照[[windows参考](http://blog1.erp2py.com/2011/07/python3-pip.html)]
brewならはじめから使えるはず？
管理者権限はサーバを作った人にもらってください。自分なら問題ない。

自分のOSに合った方法でインストールしてください。
MacならHomebrewが楽です。
brewが入っていなければターミナルのコマンドで以下をうつだけ。
```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
入れた後は
```
brew install python3
```
次にpython3で使うパッケージ群をダウンロードします。pipコマンドを使います。
windowsからpipを使う方法は[こちらが参考になるはず](http://blog1.erp2py.com/2011/07/python3-pip.html)。

+ discord (bot用API)
+ matplotlib (グラフ描画用)

python3でpipが使える様になったあとはターミナルまたはコマンドプロンプトで
```
pip3 install discord
pip3 install matplotlib
```
で準備完了。

## ソースコードのダウンロード
[Githubにコードがあります](https://github.com/harutaro/ratecalculator)のでダウンロードしてください。（緑色のclone or downloadボタンからできます。desktopに展開かzipで。git cloneでもおk）
使うのはRateCalculator.pyだけです。他は無視でよいです。

## 初期設定
ここではデスクトップにRateCalcというフォルダを作る例を説明します。
右クリックでもなんでもよいのでデスクトップにRateCalcフォルダを作ってください。
さらにその中にsave_data, save_rateというフォルダを作成してください。

このあと先ほどダウンロードしたRateCalculator.pyをRateCalcの中に入れておいてください。つまり、Desktop/RateCalcの中には

+ save_dataというディレクトリ(フォルダ）
+ save_rateというディレクトリ（フォルダ）
+ RateCalculator.py

がある状態になっていればOKです。

## Discordのbotユーザの作成
[Discord開発者用ページ](https://discordapp.com/login?redirect_to=/developers/applications/me)にアクセスし、いつも使っているアカウントでログインしてください。
NewAppをクリックすると
![Screen Shot 2017-06-01 at 2.37.43 PM.png](https://qiita-image-store.s3.amazonaws.com/0/170560/2a1bb9b3-e1c4-ac54-7228-39a3f1a30669.png)
このような画面になるので適当にAPP NAMEとアイコンを決めて下の青いボタンからbotを作成します。すると、
![Screen Shot 2017-06-01 at 4.59.03 PM.png](https://qiita-image-store.s3.amazonaws.com/0/170560/cfbbc1ed-79fe-3cd3-8ffa-a0d407773e86.png)
このような画面になります。この画面の中段にある「create a bot user」をクリックします。
すると、
![Screen Shot 2017-06-01 at 5.57.54 PM.png](https://qiita-image-store.s3.amazonaws.com/0/170560/4e2b3008-487d-98ab-12a8-eb5e50086f09.png)
このような画面になります。図の位置のclick to revealをクリックし、Tokenをコピーしてください。あとで使います。（**click to revealは二つあるので注意。APP BOT USERの方です。**）
このページはまた使うのでブラウザは閉じないでください。


次になんらかのテキストエディタでRateCalculator.pyを開いてください。
まずはじめにこのファイルの最終行にある
```
client.run('bot_token')
```
を書き換えます。bot_tokenを先ほどコピーした文字列で置換してください。
次に、24, 25行目のxxxxxxxxxxxxxxxxxxを自分のdiscordのidで置き換えてください。
ここで注意なのはDiscordの名前#yyyyのyyyyはidではありません。
idの確認方法については[以前の記事](https://qiita.com/siro_live_0501/items/218099a457e6dbb7f3a8)を参照してください。

（例の通りの場合は不要ですが）保存先を指定したい場合は、18,19行目にある
```
save_path = os.path.expanduser('~/Desktop/RateCalc/save_data/')
save_path_local = os.path.expanduser('~/Desktop/RateCalc/save_rate/')
```
という記述の
~/Desktop/RateCalc/save_data/および~/Desktop/RateCalc/save_rate/
を保存パスに書き換えてください。
ファイルの編集は以上なので、ファイルを保存して閉じてください。

次にブラウザの開発者のページに戻ってください。
今度はAPP DETAILSのClient IDをコピーしてください。下図の位置です。
![Screen Shot 2017-06-01 at 6.22.46 PM.png](https://qiita-image-store.s3.amazonaws.com/0/170560/8a2ede49-01b6-6193-fa42-d90ca68c75e3.png)
コピーしたら、次のurlの**\<client id\>**をコピーした数字で置き換えて接続してください．
https:[]()//discordapp.com/oauth2/authorize?&client_id=**\<client id\>**&scope=bot&permissions=0
すると，次のようなページに飛びます．
![Screen Shot 2017-06-01 at 6.32.31 PM.png](https://qiita-image-store.s3.amazonaws.com/0/170560/c559f049-dba0-5514-d146-8e753ac5c9dc.png)
いつもアカウントが参加しているサーバのうち，権限を持っているサーバが選択できます．レート計算botを追加したいサーバを選んで認証してください．
認証が完了すれば選択したサーバのメンバにbotが追加されます．

# 使い方
レート計算機を起動するときにはプログラムが保存してあるディレクトリに移動し、python3で実行するだけです。つまりターミナルまたはコマンドプロンプトで
```
cd ~/Desktop/RateCalc
python3 RateCalculator.py
```
と打てば良いです。Windowsの場合は多少保存パスの書き方が異なる場合があると思われます。実行が正しくできている場合

.--------------------
ユーザ名：はるさん
ユーザID：111111111
.--------------------

のように表示されます。あとはチームメンバー各々がDiscord上でコマンドを打っていくだけです。
## コマンド
### !c 数字
おそらくもっともよく使う。稼いだレートを書くとこれまでに貯めたレートの合計を出力。
### !miss
打ち間違えたとき、一個前の!c の結果を消去する
### !list
個人成績の表示。勝率と個人の合計レート
### !total 
チーム全体のレート合計。つまりは!listのチーム版
### !graph
個人成績のレート増減の可視化
!c を打つ前に実行するとKeyErrorが出ますが動作に問題はないです。
### !graphall
チーム全体のレート増減の可視化(ペアごと）
### !clear_all
管理者コマンド。その日のレートを初期化（全ペア０にする）
### !restore
まちがって!clear_allしたとき用。clear_all以前の状態に戻せる。または不意にプログラムが停止したときにもどうぞ。管理者用。
### !teamgraph
バグがあります。一応チーム全体で一つのグラフを作ります。!totalのグラフ版。
!missがない状態なら正常に機能します。

以上。たのしい白テニライフを！