Exemple #1
0
        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);
        }
Exemple #2
0
 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行目が~なら
            });
        }