はじめに
中級クエストの題材は 初級クエスト をベースとしています。初級クエストで装備を整えてから中級クエストに挑みましょう!
中級クエストの目標
中級クエストではBotに言葉を覚えさせ(定義し)、送られてきたメッセージに対応するメッセージを送信させます。
例えば、Botにネガティブな言葉として以下の言葉を定義したとします。
ネガティブワード = 'しんどい', 'つらい', 'たいへん', ...
Botに対して「レポートがしんどい。」とメッセージを送ると、Botは送られてきたメッセージの中に定義された言葉があるかをチェックします。もし、定義された言葉があれば、ポジティブな言葉(ネガティブの反対)を返してあげます。
この動作をするBotを中級クエストで作っていきたいと思います!
1. 見つける言葉を定義する
まずはメッセージから見つける言葉を定義します。ここでは「しんどい」「つらい」「たいへん」の3つの言葉を定義しておきます。 必要に応じて自分で追加することもできます!
// ネガティブワードの定義 public string[] negativeWords = { "しんどい", "つらい", "たいへん" };
2. メッセージのネガティブワードを見つける
次に、Botに送られてきたメッセージに定義したネガティブワードが含まれているかを調べます。定義したメッセージに定義したネガティブワードが含まれているかをチェックするために使う技は2つ!
- foreach
- Contains
1. foreach
定義したネガティブワード集合(配列)から、ワードを1つずつ取り出す処理をします。これを使うことで定義した全てのワードについて繰り返し調べることができます。
試しに、こんな感じでコードを書いてみましょう。
// ネガティブワード配列から1つずつ取り出す foreach(string negativeWord in negativeWords) { // 取り出した単語を使って処理をする var replyText = $"取り出した単語: {negativeWord}"; await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken); }
そして、Botエミュレーターを動かして、適当にメッセージを送ると定義したメッセージが1個ずつ送られてきます。このように動作していればオッケーです!!
これで foreach という技を習得です🎉🎉
2. Contains
メッセージに単語が含まれているかを判別するために .Contains
という技を使います!
さっき覚えた技(foreach)を書き換えて、定義したネガティブワードが送られてきたメッセージに含まれているか確認してみます!
// ネガティブワードカウンター var negativeWordCounter = 0; // ネガティブワード配列から1つずつ取り出す foreach (string negativeWord in negativeWords) { // 送られてきたメッセージ var receivedMessage = turnContext.Activity.Text; // メッセージにネガティブワードが含まれているかチェック var isContain = receivedMessage.Contains(negativeWord); // 結果によって送る言葉を変えてみる if (isContain == true) { // 含まれている場合 // ネガティブワードカウンターを1増やす negativeWordCounter++; } else { // 含まれていない場合 // 何もしない } } // ネガティブワードカウンターが0より大きいか if (negativeWordCounter > 0) { // 大きい var replyText = "お疲れ様!頑張って!"; await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken); } else { // 大きくない var replyText = "すごい!!さすが!"; await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken); }
そして、Botエミュレーターを動かして、実際にメッセージを送ってみましょう。送ったメッセージによって含まれているか/いないかを判別できていればOKです!
これで Contains という技を習得です🎉🎉