【C#】【Bot】Slack Bot で推したちと会話したい!Part.6
前回までのあらすじ
果て無き荒野を彷徨うオタク。
ひとまず、5人の Bot たちが会話をすることに成功した!
次なる高みへ向かって、今日もオタクは開発に勤しむ。
▼前回の内容はこちらから。
d01tsumath.hatenablog.com
Free! とはなんぞや?という方は、Netflix、d アニメストアをはじめとした動画配信サービスにて配信中なので是非ご視聴ください!
いわゆる "異次元系スポーツ" ではないので、安心して視聴できると思います。
iwatobi-sc.com
【Slack Bot シリーズの新目標】
▶ 1. 会話のレパートリーを増やす
2. 推したちだけで会話が始まるように改修
3. 会話に遅延を取り入れる
まず、整備する
現状、会話も名前も固定値で持っている状態です。
今後もっと会話が増えることを考えるとコード内で固定値で持っているのも運用がしにくい......ということで、ここの整備から始めます。
Database 爆誕
まず、Slack 側の UserID やそれぞれの名前の呼び方の管理をするためにデータベースを作っていきます。
該当のリソースグループより [追加] > [SQL Database] を選択し、必要事項を入力していきます。
RDBMS を選択した理由は、基本的に RDBMS しか使用経験がないから!w
今回、[サーバー] も新規作成し、[SQL エラスティック プール] の利用は「はい」にしました。
あとはデフォルトのまま [作成] ドーン!!!
で、Azure portal からこのまま作業を進めても良いんだが、自身の学習のためにも「SQL Server Management Studio」を使用していこうと思います!
インストールが終わったら、起動して...
[ファイル] > [新規作成] > [データベース エンジン クエリ] より、上記データベース作成時に決めたログイン情報を入力し、アクセスします。
まず、後々失敗しないように必要なテーブルの情報などを書き出していこうと思います。
設計的なのやったことはないけど、これも練習!後々のため!やるぞおぉー!w
と、いうわけで、まず最初に欲しいテーブルがこんな感じです。
『Users』テーブル
Slack の ID と名前を紐づけるためだけのものにします。
Column / 列名 | 型 | 主キー | Null 許可 |
---|---|---|---|
UserId / ID | INT | Y | |
BotName / 名前 | NVARCHAR(128) | ||
SlackId / Slack のユーザー ID | NVARCHAR(128) |
『NickNames』テーブル
各キャラとニックネームを紐づけるためのものにします。
これは、キャラが呼ばれる側です。
現段階では、各キャラ3通りが上限なので『ニックネーム3』まで作成しておけば問題ないと思われます。
Column / 列名 | 型 | 主キー | Null 許可 |
---|---|---|---|
NickNameId / ID | INT | Y | |
UserId / User テーブルの ID | INT | ||
NickName1 / ニックネーム1 | NVARCHAR(128) | ||
NickName2 / ニックネーム2 | NVARCHAR(128) | ||
NickName3 / ニックネーム3 | NVARCHAR(128) |
『CallNames』テーブル
キャラが他のキャラの名前を呼ぶものです。
ややこしいけど...分けておいた方が無難だと思うので、分けます。
Column / 列名 | 型 | 主キー | Null 許可 |
---|---|---|---|
CallNameId / ID | INT | Y | |
UserId / User テーブルの ID | INT | ||
CallHaruka | NVARCHAR(128) | Y | |
CallMakoto | NVARCHAR(128) | Y | |
CallRin | NVARCHAR(128) | Y | |
CallNagisa | NVARCHAR(128) | Y | |
CallRei | NVARCHAR(128) | Y |
この設計でうまくいくかいかないかは今後実際に使ってみて次第。
まー、間違ってたところで、作り直せばよいし、これで行ってみましょう。
間違いも含めてのこのブログですから......。
-- Create Users table CREATE TABLE Users ( UserId INT IDENTITY PRIMARY KEY, BotName NVARCHAR(128) NOT NULL, SlackId NVARCHAR(128) NOT NULL ) -- Create NickNames table CREATE TABLE NickNames ( NickNameId INT IDENTITY PRIMARY KEY, UserId INT NOT NULL, NickName1 NVARCHAR(128) NOT NULL, NickName2 NVARCHAR(128) NOT NULL, NickName3 NVARCHAR(128) NOT NULL ) -- Create CallNames table CREATE TABLE CallNames ( CallNameId INT IDENTITY PRIMARY KEY, UserId INT NOT NULL, CallHaruka NVARCHAR(128), CallMakoto NVARCHAR(128), CallRin NVARCHAR(128), CallNagisa NVARCHAR(128), CallRei NVARCHAR(128) )
クエリを実行します。
SSMS を使っててちょっと詰まったポイントととして、クエリを実行する場所に注意が必要です。
「hogehoge.database.windows.net」はサーバー名になるので、その下の対象のデータベースを右クリックして [新しいクエリ(Q)] より、クエリ実行します。
普通にサーバー上でクエリ実行して、マスターテーブル作れないよ!って怒られて夜中1時間くらい悶々と悩みました。そして会社で聞いたら瞬殺で解決っていうw
データ投入
そしたら、各テーブルにデータを投入します。
INSERT INTO [dbo].[Users] ( [BotName], [SlackId] ) VALUES ( 'Haruka', '********U' );
このようにデータ追加していきます。
CSV とかでも追加できるみたいだけど、今回はデータ数が少ないので割愛。
データ投入完了!
今回はここまで。
次回は、実際にデータベースから名前を取得して Bot に名前を呼ばせたり名前に反応したり...の部分を作っていこうと思います。