private Connector.Activity HandleSystemMessage(Connector.Activity message) { if (message.Type == ActivityTypes.DeleteUserData) { // Implement user deletion here // If we handle user deletion, return a real message } else if (message.Type == ActivityTypes.ConversationUpdate) { // Handle conversation state changes, like members being added and removed // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info // Not available in all channels } else if (message.Type == ActivityTypes.ContactRelationUpdate) { // Handle add/remove from contact lists // Activity.From + Activity.Action represent what happened } else if (message.Type == ActivityTypes.Typing) { // Handle knowing tha the user is typing } else if (message.Type == ActivityTypes.Ping) { } return(null); }
public virtual async Task <HttpResponseMessage> Post([FromBody] Connector.Activity activity) { // check if activity is of type message if (activity.GetActivityType() == ActivityTypes.Message) { await Conversation.SendAsync(activity, () => new BasicLuisDialog()); } else { HandleSystemMessage(activity); } return(new HttpResponseMessage(System.Net.HttpStatusCode.Accepted)); }
/// <summary> /// 入力に対して応答を返す /// </summary> /// <param name="context">入力コンテンツ</param> /// <param name="argument">入力文字列</param> /// <returns></returns> public async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> argument) { //入力文字列取得 var message = await argument; await TryCatch(context, message.Text, async() => { activity = message as Connector.Activity; //チャンネル名を取得 channelName = message.Conversation.Name; //チャンネルIDを取得 channelId = message.Conversation.Id.Split(':')[2]; //アクセストークンセット SetCredencial(message.From.Id, message.From.Name, github); //行数毎の文字列リストを生成 List <string> rowList = new List <string>(); //行毎に文字列分割し、リストに格納 if (!string.IsNullOrEmpty(message.Text)) { string[] temp = message.Text.Split('\n'); rowList.AddRange(temp); } #region 【条件式】1行目が~なら //リポジトリ設定(1行目がset ripository) if (String.Compare(rowList[0], "set repository", true) == 0) { RepositoryDialog repositoryDialog = new RepositoryDialog(); //リポジトリ変更メソッド呼び出し await repositoryDialog.RepositorySet(context, rowList[1]); context.Wait(MessageReceivedAsync); } //ユーザ設定(1行目がset user) if (String.Compare(rowList[0], "set user", true) == 0) { //認証本体 context.Wait(MessageReceivedAsync); } //操作一覧(1行目がcall) if (String.Compare(rowList[0], "call", true) == 0) { //操作一覧を出す CALL_GUIDE(context); } //issueの簡易作成(1行目がラベル名) if (rowList[0].IsAny("bug", "question", "task", "課題", "運用", "保守", "バグ") && !string.IsNullOrEmpty(rowList[1])) { //作成完了のメッセージをbot送信する await context.PostAsync("issueの作成が完了しました"); //引数のラベルでEntityを検索する TemplateEntity entity = entityOperation_Template.RetrieveEntityResult(rowList[0], "label", string.Empty).Result as TemplateEntity; //ラベルのテンプレートが未設定だったら if (entity == null) { //テンプレートが未設定の旨をメッセージで表示 await context.PostAsync("テンプレートが未設定です。テンプレートを設定してください"); //入力待機 context.Wait(MessageReceivedAsync); } else { //issue作成実行用クラス IssueCreateDialog createDialog = new IssueCreateDialog(); //2行目以降、1行ずつでループ処理 for (int i = 1; i < rowList.Count; i++) { //指定行の2文字目からタイトルとして格納(1文字目は・のため) issueModel.Title = rowList[i].Substring(1); //ラベル格納 issueModel.Labels = rowList[0]; //本文格納(本文は入力されないためテンプレートのみ) issueModel.Body = entity.Template; //issue作成 await createDialog.IssueCreate(context); } //メッセージ待機状態に戻る context.Wait(MessageReceivedAsync); } } #endregion 【条件式】1行目が~なら }); }