<commit_before># haggle_bot

## インストール
このリポジトリをクローンまたはzipファイルでダウンロードして解凍してください。

```
git clone https://github.com/yamasakih/haggle_bot.git
```

## 必要なもの
・Python (version 3.4以上)
### Pythonのモジュール
・slacker
・slackbot
どちらもPythonをインストールした後にpip installでインストールできます。
### Slackのアカウント、チーム
ハグルをするためのSlackのアカウントやチームを作成してください。
Slack使い方は十分に理解しているものとして話をすすめていきます。

### Slack Botアカウント
Slack Botアカウントの作り方は例えば[このようなサイト](http://blog.bitmeister.jp/?p=389)を参考にしてください。
（上のサイトの場合、「Slack Botアカウントの作成」という項目までを行ってもらえれば結構です)

## 設定
haggle_bot/haggle/slackbot_settings.pyを開き
API_TOKENの値を自分で作成したSlack BotのAPI_TOKENに書き換えてください。

## ボットの起動方法
hagge_bot/haggle/run.pyを実行するとボットが起動します。

```
python haggle_bot/haggle/run.py
```

## 使用方法
ボットを招待したチャンネルやダイレクトメッセージではボットに対してコマンドを入力するとボットがそれに対するリプライをします。
これ以降の説明はそのようなチャンネルでコマンドをしていると考えてください。
コマンドは必ず先頭にBotに対するメンションあるいは. を使います(.がメンションのエイリアスになっています)

例、Botの名前がhaggle_botだとしたら
```
@haggle_bot hand
```
あるいは
```
. hand
```

以後の説明では. を使ったコマンドで説明していきます。

### 1.ゲームのルールや初期手札の用意
haggle_bot/haggle/game_settingsにゲームのデータをあらかじめ入れておきます。
ゲームのデータは必ずutf-8でコーディングして保存してください。
以後、tutorial_cardと書いたゲームのデータを用意したとして続きを説明します。

### 2.ゲームの読み込み
makeコマンドでtutorial_cardを読み込めます。

```
. make tutorial_card
```

ゲームが正しく読み込めたら
ゲームtutorial_cardをする準備ができました！と表示されます。
なお誤作動で再び読み込むことがないように、
一度ゲームの読み込みをすると別のゲームの読み込みができないようになっています。
別のゲームをもう一度読み込みたい時はCrtl+Cなどでpython haggle_bot/haggle/run.pyの実行を一度切り
再度ボットを起動してください。

### 3.ゲーム中にできるコマンド
ゲームのデータの３行目以降にかかれているアカウントのゲームプレーヤーは以下のコマンドを実行することができます。

#### 現在持っているルールを表示する。
```
. rule
```

#### 現在持っている手札(トランプあるいはハート)を表示する。
```
. hand
```

現在の仕様ではSlackの絵文字に色が複数ある絵文字がハートの絵文字しかないので
色の付いたコインのかわりにハートを代用してます。
そのハートあるいはトランプを用いたゲームができるようになっており
それはゲームのデータのToken=CardあるいはToken=Coinとすることでトランプかハートを選ぶことができます。


#### 現在持っている特定のルールのみを表示する。
例えばルール5を表示したい場合
```
. rule 5
```

#### 現在持っている特定の手札のみを表示する。
トランプとハートで少し変わってきます。
##### トランプの場合
例えばハートの5を表示したい場合
```
. hand h5
```
スペード、ハート、クラブ、ダイヤはそれぞれs,h,c,dと略して使います。
J,Q,K,Aは11,12,13,1でもOKです。
Jokerはjとのみ表記します。


##### ハートの場合
例えば青色のハートを１つを表示したい場合
```
. hand b1
```
赤色、青色、緑色、黄色、紫色はそれぞれr,b,g,y,pと略して使います。

例えば赤色のハート２つと紫色のハート３つを表示したい場合
```
. hand r2,p3
```
現在の仕様ではハートのみ複数個同時に見せることができます。
(ルールとトランプもいつか複数同時に表示できるようにする予定です)


#### 現在持っているルールを他のプレーヤーにわたす。
ルールも手札も他のプレーヤーにわたすときには、
表示するコマンドの後ろにわたす相手をつければわたせます。

例えばルール10をプレーヤーyamにわたしたい場合
```
. rule 10 yam
```
メンションをつけると(@yamとすると)わたせないので注意してください。<br>
(メンションをつけたほうが便利だと思うのでそのうちメンションをつけてもわたせるようにする予定です)<br><br>


#### 現在持っている手札を他のプレーヤーにわたす。
##### トランプの場合
例えばダイヤの9をプレーヤーyamにわたしたい場合
```
. hand d9 yam
```

##### ハートの場合
例えば緑色のハート１つと黄色のハート２つをプレーヤーyamにわたしたい場合
```
. hand g1,y2 yam
```

#### 現在もっているルールをソートする。
ルールをもらった場合もらった順番にhandで表示されるようになっています。
それを番号順に並び替えたい場合sortコマンドを使います。
```
. rule sort
```
その後. ruleをコマンドを実行するとルールがソートされているのが確認できます。

#### 現在もっている手札をソートする。
##### トランプの場合
トランプをもらった場合もらった順番にhandで表示されるようになっています。
それを並び替えたい場合sortコマンドを使います。
```
. hand sort
```
その後. handをコマンドを実行すると手札がソートされているのが確認できます。
トランプの場合、まずスート(スペード、ハート、クラブ、ダイア）で並び替えられその後同じスートの中で数字の順(2,3,4,5,...,10,J,Q,K,A)に並び替えられます。

##### ハートの場合
現在の仕様ではハートは必ず赤、青、緑、黄色、紫の色の順にソートされるようになっています。
したがって. hand sortをして並び替える必要はありません。

#### 2017/8/19追記 投票機能を追加しました。
#### 投票
投票したいワードをvoteコマンドを実行することで投票することができます。
```

. vote foo
```
上のように実行することでfooという言葉を投票したことになります。
再度投票することで以前の投票を取り消して変更することができます。
また、以下のように言葉の間にスペースを入れることで複数の言葉を投票できます。
ゲームに応じて利用して下さい。
```

. vote foo baz bar
```

```

. open list
```
とすると投票した人でリスト化した一覧が表示されます。

```

. open set
 ```
とすると投票された言葉でリスト化した一覧が表示されます。
ゲームに応じて使い分けて下さい。

## ゲームのデータの書き方
haggle_bot/haggle/game_settingsに入れるゲームのデータ(プレイヤーは誰だ、ルールはなんだ、最初にもっているトランプはなんだ）<br>
と言った情報をどう書くかを説明します。

実際のファイルを見てみながら考えるとわかりやすいのでhaggle_bot/haggle/game_settings/tutorial_cardを開きながら以下の説明を確認して下さい。

### ファイルのエンコーディング
一番大事なことですがファイルのエンコーディングはutf-8にして保存して下さい。
Windowsなどではたいていデフォルトがutf-8になっていないので普通に保存するとmakeコマンドを実行するときにエラーになります。
TeraPadやサクラエディタなど保存するエンコーディングを指定できるテキストエディタでutf-8(BOMなしも指定できるならBOMなし推奨です)を指定して保存しましょう。

### 1.コメント行
最初の行はコメント行です。何を書いてもゲームには影響がありません。
簡単なゲームの概要や作成日、作者などを書いてみんなで共有できたらいいなと考えています。
何も書かない場合も必ず空白行を入れて下さい。

### 2.総プレイヤー数
num_players=6と書くと今回のゲームのプレイヤーは6名ということになります。
ゲームのプレイヤー数に合わせて変更して下さい。

### 3.参加するプレイヤー名
num_playersで指定した人数分だけSlack内でのプレイヤー名(@yamなどで決められている名前)を１行に１人ずつ書いてください。
num_players=6としたなら6行つかってプレイヤー名を書くことになると思います。
こちらに記入されている名前のSlackの参加者の間でしかコマンドが使えないようになっています。
GM(ゲームの司会者)ともカードの交換をさせたい場合はnum_playersを１増やして、GMの名前もこちらに追加してください。<commit_msg>Refine README.md<commit_after># haggle_bot

## インストール
このリポジトリをクローンまたはzipファイルでダウンロードして解凍してください。

```
git clone https://github.com/yamasakih/haggle_bot.git
```

## 必要なもの
・Python (version 3.4以上)
### Pythonのモジュール
・slacker
・slackbot
どちらもPythonをインストールした後にpip installでインストールできます。
### Slackのアカウント、チーム
ハグルをするためのSlackのアカウントやチームを作成してください。
Slack使い方は十分に理解しているものとして話をすすめていきます。

### Slack Botアカウント
Slack Botアカウントの作り方は例えば[このようなサイト](http://blog.bitmeister.jp/?p=389)を参考にしてください。
（上のサイトの場合、「Slack Botアカウントの作成」という項目までを行ってもらえれば結構です)

## 設定
haggle_bot/haggle/slackbot_settings.pyを開き
API_TOKENの値を自分で作成したSlack BotのAPI_TOKENに書き換えてください。

## ボットの起動方法
hagge_bot/haggle/run.pyを実行するとボットが起動します。

```
python haggle_bot/haggle/run.py
```

## 使用方法
ボットを招待したチャンネルやダイレクトメッセージではボットに対してコマンドを入力するとボットがそれに対するリプライをします。
これ以降の説明はそのようなチャンネルでコマンドをしていると考えてください。
コマンドは必ず先頭にBotに対するメンションあるいは. を使います(.がメンションのエイリアスになっています)

例、Botの名前がhaggle_botだとしたら
```
@haggle_bot hand
```
あるいは
```
. hand
```

以後の説明では. を使ったコマンドで説明していきます。

### 1.ゲームのルールや初期手札の用意
haggle_bot/haggle/game_settingsにゲームのデータをあらかじめ入れておきます。
ゲームのデータは必ずutf-8でコーディングして保存してください。
以後、tutorial_cardと書いたゲームのデータを用意したとして続きを説明します。

### 2.ゲームの読み込み
makeコマンドでtutorial_cardを読み込めます。

```
. make tutorial_card
```

ゲームが正しく読み込めたら
ゲームtutorial_cardをする準備ができました！と表示されます。
なお誤作動で再び読み込むことがないように、
一度ゲームの読み込みをすると別のゲームの読み込みができないようになっています。
別のゲームをもう一度読み込みたい時はCrtl+Cなどでpython haggle_bot/haggle/run.pyの実行を一度切り
再度ボットを起動してください。

### 3.ゲーム中にできるコマンド
ゲームのデータの３行目以降にかかれているアカウントのゲームプレーヤーは以下のコマンドを実行することができます。

#### 現在持っているルールを表示する。
```
. rule
```

#### 現在持っている手札(トランプあるいはハート)を表示する。
```
. hand
```

現在の仕様ではSlackの絵文字に色が複数ある絵文字がハートの絵文字しかないので
色の付いたコインのかわりにハートを代用してます。
そのハートあるいはトランプを用いたゲームができるようになっており
それはゲームのデータのToken=CardあるいはToken=Coinとすることでトランプかハートを選ぶことができます。


#### 現在持っている特定のルールのみを表示する。
例えばルール5を表示したい場合
```
. rule 5
```

#### 現在持っている特定の手札のみを表示する。
トランプとハートで少し変わってきます。
##### トランプの場合
例えばハートの5を表示したい場合
```
. hand h5
```
スペード、ハート、クラブ、ダイヤはそれぞれs,h,c,dと略して使います。
J,Q,K,Aは11,12,13,1でもOKです。
Jokerはjとのみ表記します。


##### ハートの場合
例えば青色のハートを１つを表示したい場合
```
. hand b1
```
赤色、青色、緑色、黄色、紫色はそれぞれr,b,g,y,pと略して使います。

例えば赤色のハート２つと紫色のハート３つを表示したい場合
```
. hand r2,p3
```
現在の仕様ではハートのみ複数個同時に見せることができます。
(ルールとトランプもいつか複数同時に表示できるようにする予定です)


#### 現在持っているルールを他のプレーヤーにわたす。
ルールも手札も他のプレーヤーにわたすときには、
表示するコマンドの後ろにわたす相手をつければわたせます。

例えばルール10をプレーヤーyamにわたしたい場合
```
. rule 10 yam
```
メンションをつけると(@yamとすると)わたせないので注意してください。<br>
(メンションをつけたほうが便利だと思うのでそのうちメンションをつけてもわたせるようにする予定です)<br><br>


#### 現在持っている手札を他のプレーヤーにわたす。
##### トランプの場合
例えばダイヤの9をプレーヤーyamにわたしたい場合
```
. hand d9 yam
```

##### ハートの場合
例えば緑色のハート１つと黄色のハート２つをプレーヤーyamにわたしたい場合
```
. hand g1,y2 yam
```

#### 現在もっているルールをソートする。
ルールをもらった場合もらった順番にhandで表示されるようになっています。
それを番号順に並び替えたい場合sortコマンドを使います。
```
. rule sort
```
その後. ruleをコマンドを実行するとルールがソートされているのが確認できます。

#### 現在もっている手札をソートする。
##### トランプの場合
トランプをもらった場合もらった順番にhandで表示されるようになっています。
それを並び替えたい場合sortコマンドを使います。
```
. hand sort
```
その後. handをコマンドを実行すると手札がソートされているのが確認できます。
トランプの場合、まずスート(スペード、ハート、クラブ、ダイア）で並び替えられその後同じスートの中で数字の順(2,3,4,5,...,10,J,Q,K,A)に並び替えられます。

##### ハートの場合
現在の仕様ではハートは必ず赤、青、緑、黄色、紫の色の順にソートされるようになっています。
したがって. hand sortをして並び替える必要はありません。

#### 2017/8/19追記 投票機能を追加しました。
#### 投票
投票したいワードをvoteコマンドを実行することで投票することができます。
```
. vote foo
```
上のように実行することでfooという言葉を投票したことになります。
再度投票することで以前の投票を取り消して変更することができます。
また、以下のように言葉の間にスペースを入れることで複数の言葉を投票できます。
ゲームに応じて利用して下さい。
```
. vote foo baz bar
```

以下のようにopenコマンドを実行することで投票した人でリスト化した一覧が表示されます。
```
. open list
```

同様に、以下のようにopenコマンドを実行することで言葉でリスト化した一覧が表示されます。
```
. open set
 ```
ゲームに応じて使い分けて下さい。

## ゲームのデータの書き方
haggle_bot/haggle/game_settingsに入れるゲームのデータ(プレイヤーは誰だ、ルールはなんだ、最初にもっているトランプはなんだ）<br>
と言った情報をどう書くかを説明します。

実際のファイルを見てみながら考えるとわかりやすいのでhaggle_bot/haggle/game_settings/tutorial_cardを開きながら以下の説明を確認して下さい。

### ファイルのエンコーディング
一番大事なことですがファイルのエンコーディングはutf-8にして保存して下さい。
Windowsなどではたいていデフォルトがutf-8になっていないので普通に保存するとmakeコマンドを実行するときにエラーになります。
TeraPadやサクラエディタなど保存するエンコーディングを指定できるテキストエディタでutf-8(BOMなしも指定できるならBOMなし推奨です)を指定して保存しましょう。

### 1.コメント行
最初の行はコメント行です。何を書いてもゲームには影響がありません。
簡単なゲームの概要や作成日、作者などを書いてみんなで共有できたらいいなと考えています。
何も書かない場合も必ず空白行を入れて下さい。

### 2.総プレイヤー数
num_players=6と書くと今回のゲームのプレイヤーは6名ということになります。
ゲームのプレイヤー数に合わせて変更して下さい。

### 3.参加するプレイヤー名
num_playersで指定した人数分だけSlack内でのプレイヤー名(@yamなどで決められている名前)を１行に１人ずつ書いてください。
num_players=6としたなら6行つかってプレイヤー名を書くことになると思います。
こちらに記入されている名前のSlackの参加者の間でしかコマンドが使えないようになっています。
GM(ゲームの司会者)ともカードの交換をさせたい場合はnum_playersを１増やして、GMの名前もこちらに追加してください。
{'fraction_non_alphanumeric': 0.11139416396479852, 'fraction_numerical': 0.014590088003705419, 'mean_word_length': 10.409511228533686, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1578855', 'n_tokens_mistral': 7425, 'n_tokens_neox': 6721, 'n_words': 350}