/// <summary>
        /// テンプレート表示
        /// </summary>
        /// <param name="context"></param>
        /// <param name="argument"></param>
        /// <returns></returns>
        public async Task TemplateDisplay(IDialogContext context, IAwaitable <IMessageActivity> argument)
        {
            var message = await argument;

            issueModel.Labels = message.Text;

            //操作キャンセル確認メソッド
            await dialog.TryCatch(context, issueModel.Labels, async() =>
            {
                //引数のラベルでEntityを検索する
                TemplateEntity entity = entityOperation_Template.RetrieveEntityResult(issueModel.Labels, "label", string.Empty).Result as TemplateEntity;

                //ラベルのテンプレートが未設定だったら
                if (entity == null)
                {
                    //テンプレートが未設定の旨をメッセージで表示
                    await context.PostAsync("テンプレートが未設定です。テンプレートを設定してください");

                    //issue作成操作を終了する
                    context.Done <object>(context);
                }
                else
                {
                    var input = "タイトル" + Environment.NewLine + entity.Template;

                    await context.PostAsync("下記のテンプレートを用いて本文を作成してください(タイトルのみも可)");
                    await context.PostAsync(ConvertToSlackFormat(input, "```"));

                    context.Wait(IssueCreate);
                }
            });
        }
        /// <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行目が~なら
            });
        }
        /// <summary>
        /// project出力
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task OutputIssue(IDialogContext context, List <IReadOnlyList <Issue> > issueListForLabels, List <string> labelNameList)
        {
            //try
            //{
            //出力するExcelファイルの一時保存パス
            string filePath = @"D:\home\Excel\" + repository.Split('/')[1] + "(issue).xlsx";

            //出力する旨をbotで表示
            await context.PostAsync("project「" + repository.Split('/')[1] + "(issue)」を出力しています...");

            //ワークブックに書き込む
            using (var book = new XLWorkbook(XLEventTracking.Disabled))
            {
                //ラベル名前リストのインデックス用変数
                int i = 0;

                //ラベル別issueリストの各issueリストに対する処理
                foreach (var issueList in issueListForLabels)
                {
                    //ワークシートを用意
                    IXLWorksheet ws = null;

                    //issueが一つでもあったらエクセルファイルに書き込み
                    if (issueList != null)
                    {
                        ws = book.AddWorksheet(labelNameList[i]);
                    }
                    //issueがひとつもなかったら次のループ処理に移る
                    else
                    {
                        continue;
                    }

                    //初期位置を2行目2列目に定める
                    int row = 2;
                    int col = 2;

                    //テンプレート大見出し格納リスト
                    List <string> HeadingList = new List <string>();

                    //ラベルのEntityを取得
                    TemplateEntity entity = entityOperation.RetrieveEntityResult(labelNameList[i], "label", string.Empty).Result as TemplateEntity;
                    if (entity != null)
                    {
                        //改行毎に区切る
                        string[] templateColumn = entity.Template.Split('\n');

                        foreach (var tempCol in templateColumn)
                        {
                            int index = tempCol.IndexOf("##");
                            if (index != -1)
                            {
                                HeadingList.Add(tempCol.Substring(index + 3));
                            }
                        }
                    }


                    //ラベル別の列幅とフォントサイズの指定
                    ws = GitHubDialog.convinient.ColumnWidthAndFontSize(ws, "task");

                    row++;
                    ws.Cell(row, col).Value = "No";
                    col++;
                    ws.Cell(row, col).Value = "タイプ";
                    col++;
                    ws.Cell(row, col).Value = "タイトル";
                    col++;
                    foreach (string header in HeadingList)
                    {
                        ws.Cell(row, col).Value = header;
                        col++;
                    }
                    ws.Cell(row, col).Value = "担当者";
                    col++;
                    ws.Cell(row, col).Value = "着手日";
                    col++;
                    ws.Cell(row, col).Value = "完了日";

                    //ヘッダーのセルを範囲指定
                    IXLCell  headerCell = ws.Cell(row, 2);
                    IXLRange ExcelRange = ws.Range(ws.Cell(row, 2), ws.Cell(row, col));

                    //指定範囲の背景色をオリーブに変更
                    ExcelRange.Style.Fill.BackgroundColor = XLColor.Olivine;

                    //指定行を1行下げ、列を2列目に戻す
                    row++;
                    col = 2;

                    //issueリストの各issueに対する処理
                    foreach (var issue in issueList)
                    {
                        //issueの番号を指定セルに格納
                        ws.Cell(row, col).Value = issue.Number;
                        col++;
                        //issueのラベル名を指定セルに格納
                        ws.Cell(row, col).Value = string.Join("", issue.Labels.ToList().ConvertAll(x => x.Name));
                        col++;
                        //issueのタイトルを指定セルに格納
                        ws.Cell(row, col).Value = issue.Title;
                        col++;

                        //本文の見出し部分を除き、リストで格納
                        List <string> tempList = new List <string>();
                        tempList.AddRange(issue.Body.Split(new string[] { "##" }, StringSplitOptions.RemoveEmptyEntries));

                        //本文(見出し除く)を見出しごとにセルに格納
                        for (int c = 0; c < tempList.Count; c++)
                        {
                            int index = tempList[c].IndexOf('\n');
                            ws.Cell(row, col).Value = tempList[c].Substring(index + 1);
                            col++;
                        }

                        //issueにアサインしている人がひとりでもいたら
                        if (issue.Assignees.Count != 0)
                        {
                            //アサインしているアカウント名を指定セルに格納
                            ws.Cell(row, col).Value = issue.Assignees[0].Login;
                        }
                        col++;
                        //issueが作成された日付を指定セルに格納
                        ws.Cell(row, col).Value = issue.CreatedAt.DateTime.ToString();
                        col++;
                        //issueが更新されたことがあったら
                        if (issue.UpdatedAt.HasValue)
                        {
                            //issueの更新日付を指定セルに格納
                            ws.Cell(row, col).Value = ((DateTimeOffset)issue.UpdatedAt).DateTime.ToString();
                        }
                        //現在issueがcloseされていたら
                        if (issue.ClosedAt.HasValue)
                        {
                            //指定セルの行の背景色を灰色にする
                            IXLRange range = ws.Range(ws.Cell(row, 2), ws.Cell(row, col));
                            range.Style.Fill.BackgroundColor = XLColor.Gray; // 灰色
                        }
                        //リストの最後尾だったら
                        if (issueList.Last().Equals(issue))
                        {
                            //表形式にするため罫線をつける
                            IXLRange range = ws.Range(headerCell, ws.Cell(row, col));
                            range.Style
                            .Border.SetOutsideBorder(XLBorderStyleValues.Thin)
                            .Border.SetInsideBorder(XLBorderStyleValues.Hair)
                            .Border.SetLeftBorder(XLBorderStyleValues.Thin)
                            .Border.SetRightBorder(XLBorderStyleValues.Thin);
                        }
                        //次の行に行く
                        row++;
                        col = 2;
                    }
                    //検索用フィルターをつける
                    ws.RangeUsed().SetAutoFilter();
                    row++;
                    i++;
                }
                //引数のパスにExcelファイルを保存する
                book.SaveAs(filePath);
            }

            //ファイル送信用slackAPIのURl
            string url = baseUrl + "files.upload?channels=" + GitHubDialog.channelName;

            //指定パスのファイルでファイル送信APIを送る
            Encoding.UTF8.GetString(fileUpload(url, filePath));

            //出力完了のメッセージを送信する
            await context.PostAsync("出力が完了しました");

            //context.Wait(MessageReceivedAsync);
            //}
            //catch (Exception e)
            //{
            //    await context.PostAsync(e.Message);
            //    context.Wait(MessageReceivedAsync);
            //}
        }