# Slack Tutorial Bot
###### tags: `Slack` `API` `Bot` `JP`
## 概要
+ Slack 上におけるSlackの使い方、チュートリアルを生徒や教師にわかりやすく、伝えるためのBOT。
## アーキテクチャ・設計
+ Nedb を採用します。
+ MVC モデルを採用します。 `cluster manager` を参考にして下さい。
+ `cluster manager` 相応の開発クオリティ診断をクリアします。
### When New Member Join Slack
新たなメンバーがSlackにJoinした際にチュートリアルモードがDMに送られます。
## 機能
### When join new member
+ welcome_text function
1. 当機能はユーザーがGeneralにはいったら起動します。
2. ユーザーにテキスト(slackの利点、google form,etc)をユーザーのDMへ送信します。
### How to create channel
+ 当コマンドの使い方
1. 当コマンドは`how to create channel`と入力されたら起動します。
2. 当コマンドはユーザーにチャンネルの使い方を説明します。
### How to delete channel
+ 当コマンドの使い方
1. 当コマンドは`how to delete channel`と入力されたら起動します。
2. 当コマンドはユーザーにチャンネルの消し方を説明します。
### How to create group
+ 当コマンドの使い方
1. 当コマンドは`how to create group`と入力されたら起動します。
2. 当コマンドはユーザーにグループの作り方を説明、実践します
### How to join channel
+ 当コマンドの使い方
1. 当コマンドは`how to join channel`と入力されたら起動します。
2. 当コマンドはユーザーにチャンネルに参加の仕方を説明、実践します。
### It have to write Mention
+ 当コマンドの使い方
1. 当コマンドは`how to write mention`と入力されたら起動します。
2. 当コマンドはユーザーにメンションの使い方を説明、実践します。
### How to send document and programing code
+ 当コマンドの使い方
1. 当コマンドは`how to send documents and programing code`と入力されたら起動します。
2. 当コマンドはユーザーにdocumentとcodeの送り方を説明と実践します。
### The welcome text 【実装編】
+ 前提条件
+ general チャンネルにjoinするとDMに送信します。
+ シーケンス
1. `Nebd`内の`welcome`に保存されているテキストを取得します。
2. その取得したテキストをDMにメッセージを送信します。
### How to crate/delete channel 【実装編】
+ 前提条件
+ `How to create/delete channel`と入力されたら、当コマンドが動きます。
+ `make_channel`の配列0番目に`作り方の説明`を保存します。
+ `make_channel`の配列1番目に`GIF`を保存します。
+ `make_channel`の配列2番目に`チャンネルとグループの説明`を保存します。
+ `delete_channel`の配列0番目に`消し方の説明`を保存します。
+ `delete_channel`の配列1番目に`GIF`を保存します。
+ `delete_channel`の配列2番目に`チャンネルとグループの説明`を保存します。
+ シーケンス
1. DMに`Nedb`に保存されている`make_channel`の配列の0番目(グループの作り方)を送信します。
2. DMに`Nedb`に保存されている`make_channel`の配列の1番目(GIF)を送信します。
3. DMに`Nedb`に保存されている`make_channel`の配列の2番目(チャンネルとグループの説明)を送信します。
4. 作られたチャンネルの`channel`,`user`を取得します。
5. DMに`Nedb`に保存されている`delete_channel`の配列の0番目(グループの消し方)を送信します。
6. DMに`Nedb`に保存されている`delete_channel`の配列の1番目(GIF)を送信します。
7. DMに`Nedb`に保存されている`delete_channel`の配列の2番目(チャンネルとグループの説明)を送信します。
+ 配列0番目に`消し方の説明`を保存します。
+ `delete_channel`の配列1番目に`GIF`を保存します。
+ `delete_channel`の配列2番目に`チャンネルとグループの説明`を保存します。
### How to create group 【実装編】
+ 前提条件
+ `how to create channel`と入力されたら、当コマンドが動きます。
+ 配列0番目に`作り方の説明`を保存します。
+ `make_gourp`の配列1番目に`GIF`を保存します。
+ `make_group`の配列2番目に`チャンネルとグループの説明`を保存します。
+ シーケンス
1. DMに`Nedb`に保存されている`make_group`の配列の0番目(グループの作り方)を送信します。
2. DMに`Nedb`に保存されている`make_group`の配列の1番目(GIF)を送信します。
3. DMに`Nedb`に保存されている`make_group`の配列の2番目(チャンネルとグループの説明)を送信します。
4. 作られたチャンネルの`group`,`user`を取得します。
5. 第5シーケンスで得られた`group`を削除します。
### How to join channel 【実装編】
+ 前提条件
+ `how to join channel`と入力I されたら、当コマンドが動きます。
+ `join_channel`の配列0番目にメンションの`説明`を保存します。
+ `join_channel`の配列1番目にメンションの`GIF`を保存します。
+ シーケンス
1. DMに`Nedb`に保存されている。`join_channel[0]`の配列0番目(チャンネルの入り方)をDMに送信します。
2. DMに`Nedb`に保存されている。`join_channel`の配列1番目(GIF)を送信します。
### It have to write Mention 【実装編】
+ 前提条件
+ `write mention`と入力されたら、当コマンドが動きます。
+ `mention`の配列0番目にメンションの`説明`を保存します。
+ `mention`の配列1番目にメンションの`画像`を保存します。
+ シーケンス
1. DMに`Nedb`に保存されている`mention`の配列の0番目をDMに送信します。
2. DMに`Nedb`に保存されている`mention`の配列の1番目をDMに送信します。
### How to send document and programing code
+ 前提条件
+ `how to send document and code`と入力されたら、当コマンドが動きます。
+ `doucument_and_code`の配列0番目にドキュメントコードの`説明`を保存します。
+ `document_and_code`の配列1番目にドキュメントコードの`GIF`を保存します。
+ シーケンス
1. DMの`Nedb`に保存されている。`doucument_and_code`,配列0番目(ドキュメント、コードの送り方)を送信します。
2. DMに`Nedb`に保存されている。`document_and_code`の配列1番目(GIF)を送信します。
### when chaneged spledsheet
## 説明
### The difference between randam and general
### How to use star, notifications, pin and bot
### The limit of DM
### How to use call funciton
### Default setting
### recommend channel
## DB モデル一覧
### nedb sample document
```jsonld=
{
"_id": "",
"platform": "",
"type":"user",
"current_tutorial": "",
"pass_list":[],
"current_turotial_sequence":0[[]]
} ,{
"_id": "",
"platform": "web",
"type":"tutorials",
"make_channel":[],
"delete_channel":[],
"make_group":[],
"mention":[],
"join_channel":"",
"document_and_code":"",
},{
"_id": "",
"platform": "mac",
"type":"tutorials",
"make_channel":[],
"delete_channel":[],
"make_group":[],
"mention":[],
"join_channel":"",
"document_and_code":"",
},{
"_id": "",
"platform": "windows",
"type":"tutorials",
"make_channel":[],
"delete_channel":[],
"make_group":[],
"mention":[],
"join_channel":"",
"document_and_code":"",
},{
"_id": "",
"platform": "ios",
"type":"tutorials",
"make_channel":[],
"delete_channel":[],
"make_group":[],
"mention":[],
"join_channel":"",
"document_and_code":"",
}, {
"_id": "",
"welcome_text":""
}
```
+ ChannelsRegExp Model
+ find Method
+ 引数
+ nedb (nedb_Object)
+ platform (String)
+ type (String)
+ このメソッドの内容
1.