public static ITemplateAction ParseTemplateAction(dynamic dynamicObject)
        {
            var type = (TemplateActionType)System.Enum.Parse(typeof(TemplateActionType), (string)dynamicObject?.type, true);

            return(type switch
            {
                TemplateActionType.Message => MessageTemplateAction.CreateFrom(dynamicObject),
                TemplateActionType.Uri => UriTemplateAction.CreateFrom(dynamicObject),
                TemplateActionType.Postback => PostbackTemplateAction.CreateFrom(dynamicObject),
                TemplateActionType.Datetimepicker => DateTimePickerTemplateAction.CreateFrom(dynamicObject),
                TemplateActionType.Camera => CameraTemplateAction.CreateFrom(dynamicObject),
                TemplateActionType.CameraRoll => CameraRollTemplateAction.CreateFrom(dynamicObject),
                TemplateActionType.Location => LocationTemplateAction.CreateFrom(dynamicObject),
                _ => null,
            });
        public static ITemplateAction ParseTemplateAction(dynamic dynamicObject)
        {
            var type = (TemplateActionType)System.Enum.Parse(typeof(TemplateActionType), (string)dynamicObject?.type, true);

            switch (type)
            {
            case TemplateActionType.Message:
                return(MessageTemplateAction.CreateFrom(dynamicObject));

            case TemplateActionType.Uri:
                return(UriTemplateAction.CreateFrom(dynamicObject));

            case TemplateActionType.Postback:
                return(PostbackTemplateAction.CreateFrom(dynamicObject));

            case TemplateActionType.Datetimepicker:
                return(DateTimePickerTemplateAction.CreateFrom(dynamicObject));

            default:
                return(null);
            }
        }
Beispiel #3
0
        private async Task HandleTextAsync(string replyToken, string userMessage, string userId)
        {
            userMessage = userMessage.ToLower().Replace(" ", "");
            ISendMessage replyMessage = null;

            if (userMessage == "buttons")
            {
                replyMessage = new TemplateMessage("Button Template",
                                                   new ButtonsTemplate(text: "ButtonsTemplate", title: "Click Buttons.",
                                                                       actions: new List <ITemplateAction> {
                    new MessageTemplateAction("Message Label", "sample data"),
                    //new PostbackTemplateAction("Postback Label", "sample data", "sample data"),
                    new PostbackTemplateAction("Postback Label", "sample data"),
                    new UriTemplateAction("Uri Label", "https://github.com/kenakamu")
                }));
            }
            else if (userMessage == "confirm")
            {
                replyMessage = new TemplateMessage("Confirm Template",
                                                   new ConfirmTemplate("ConfirmTemplate", new List <ITemplateAction> {
                    new MessageTemplateAction("Yes", "Yes"),
                    new MessageTemplateAction("No", "No")
                }));
            }
            else if (userMessage == "carousel")
            {
                List <ITemplateAction> actions1 = new List <ITemplateAction>();
                List <ITemplateAction> actions2 = new List <ITemplateAction>();

                // Add actions.
                actions1.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));

                // Add datetime picker actions
                actions2.Add(new DateTimePickerTemplateAction("DateTime Picker", "DateTime",
                                                              DateTimePickerMode.Datetime, "2017-07-21T13:00", null, null));
                actions2.Add(new DateTimePickerTemplateAction("Date Picker", "Date",
                                                              DateTimePickerMode.Date, "2017-07-21", null, null));
                actions2.Add(new DateTimePickerTemplateAction("Time Picker", "Time",
                                                              DateTimePickerMode.Time, "13:00", null, null));

                replyMessage = new TemplateMessage("Button Template",
                                                   new CarouselTemplate(new List <CarouselColumn> {
                    new CarouselColumn("Casousel 1 Text", "https://github.com/apple-touch-icon.png",
                                       "Casousel 1 Title", actions1),
                    new CarouselColumn("Casousel 1 Text", "https://github.com/apple-touch-icon.png",
                                       "Casousel 1 Title", actions2)
                }));
            }
            else if (userMessage == "imagecarousel")
            {
                UriTemplateAction action = new UriTemplateAction("Uri Label", "https://github.com/namhoaingo");

                replyMessage = new TemplateMessage("ImageCarouselTemplate",
                                                   new ImageCarouselTemplate(new List <ImageCarouselColumn> {
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action)
                }));
            }
            else if (userMessage == "imagemap")
            {
                replyMessage = new ImagemapMessage("https://d412efff.ngrok.io/api/image/DeathStar2",
                                                   "Image has some problem to load",
                                                   new ImagemapSize(1040, 1040),
                                                   new List <IImagemapAction> {
                    new UriImagemapAction(
                        new ImagemapArea(0, 0, 520, 1040), "https://24aa4e3a.ngrok.io/account/Signin/" + userId),
                    new MessageImagemapAction(
                        new ImagemapArea(520, 0, 520, 1040), "https://www.diffnow.com/"),
                }
                                                   );
            }
            else if (userMessage == "addrichmenu")
            {
                throw new NotImplementedException();
            }
            else if (userMessage == "deleterichmenu")
            {
                // Get Rich Menu for the user
                var richMenuId = await messagingClient.GetRichMenuIdOfUserAsync(userId);

                await messagingClient.UnLinkRichMenuFromUserAsync(userId);

                await messagingClient.DeleteRichMenuAsync(richMenuId);

                replyMessage = new TextMessage("Rich menu deleted");
            }
            else if (userMessage == "deleteallrichmenu")
            {
                // Get Rich Menu for the user
                var richMenuList = await messagingClient.GetRichMenuListAsync();

                foreach (var richMenu in richMenuList)
                {
                    await messagingClient.DeleteRichMenuAsync(richMenu.RichMenuId);
                }
                replyMessage = new TextMessage("All rich menu added");
            }
            else if (userMessage == "hello,world")
            {
                return;
            }
            else
            {
                //replyMessage = new TextMessage("https://d412efff.ngrok.io/Assets/DeathStar2.jpg");
                return;
            }

            await messagingClient.ReplyMessageAsync(replyToken, new List <ISendMessage> {
                replyMessage
            });
        }
Beispiel #4
0
        private async Task HandleTextAsync(string replyToken, string userMessage, string userId)
        {
            userMessage = userMessage.ToLower().Replace(" ", "");
            ISendMessage replyMessage = null;

            if (userMessage == "buttons")
            {
                replyMessage = new TemplateMessage("Button Template",
                                                   new ButtonsTemplate(text: "ButtonsTemplate", title: "Click Buttons.",
                                                                       actions: new List <ITemplateAction> {
                    new MessageTemplateAction("Message Label", "sample data"),
                    new PostbackTemplateAction("Postback Label", "sample data", "sample data"),
                    new UriTemplateAction("Uri Label", "https://github.com/kenakamu")
                }));
            }
            else if (userMessage == "confirm")
            {
                replyMessage = new TemplateMessage("Confirm Template",
                                                   new ConfirmTemplate("ConfirmTemplate", new List <ITemplateAction> {
                    new MessageTemplateAction("Yes", "Yes"),
                    new MessageTemplateAction("No", "No")
                }));
            }
            else if (userMessage == "carousel")
            {
                List <ITemplateAction> actions1 = new List <ITemplateAction>();
                List <ITemplateAction> actions2 = new List <ITemplateAction>();

                // Add actions.
                actions1.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));

                // Add datetime picker actions
                actions2.Add(new DateTimePickerTemplateAction("DateTime Picker", "DateTime",
                                                              DateTimePickerMode.Datetime, "2017-07-21T13:00", null, null));
                actions2.Add(new DateTimePickerTemplateAction("Date Picker", "Date",
                                                              DateTimePickerMode.Date, "2017-07-21", null, null));
                actions2.Add(new DateTimePickerTemplateAction("Time Picker", "Time",
                                                              DateTimePickerMode.Time, "13:00", null, null));

                replyMessage = new TemplateMessage("Button Template",
                                                   new CarouselTemplate(new List <CarouselColumn> {
                    new CarouselColumn("Casousel 1 Text", "https://github.com/apple-touch-icon.png",
                                       "Casousel 1 Title", actions1),
                    new CarouselColumn("Casousel 1 Text", "https://github.com/apple-touch-icon.png",
                                       "Casousel 1 Title", actions2)
                }));
            }
            else if (userMessage == "imagecarousel")
            {
                UriTemplateAction action = new UriTemplateAction("Uri Label", "https://github.com/kenakamu");

                replyMessage = new TemplateMessage("ImageCarouselTemplate",
                                                   new ImageCarouselTemplate(new List <ImageCarouselColumn> {
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action)
                }));
            }
            else if (userMessage == "imagemap")
            {
                var url      = HttpContext.Current.Request.Url;
                var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon";
                replyMessage = new ImagemapMessage(
                    imageUrl,
                    "GitHub",
                    new ImagemapSize(1040, 1040), new List <IImagemapAction>
                {
                    new UriImagemapAction(new ImagemapArea(0, 0, 520, 1040), "http://github.com"),
                    new MessageImagemapAction(new ImagemapArea(520, 0, 520, 1040), "I love LINE!")
                });
            }
            else if (userMessage == "addrichmenu")
            {
                // Create Rich Menu
                RichMenu richMenu = new RichMenu()
                {
                    Size        = ImagemapSize.RichMenuLong,
                    Selected    = false,
                    Name        = "nice richmenu",
                    ChatBarText = "touch me",
                    Areas       = new List <ActionArea>()
                    {
                        new ActionArea()
                        {
                            Bounds = new ImagemapArea(0, 0, ImagemapSize.RichMenuLong.Width, ImagemapSize.RichMenuLong.Height),
                            Action = new PostbackTemplateAction("ButtonA", "Menu A", "Menu A")
                        }
                    }
                };

                var richMenuId = await messagingClient.CreateRichMenuAsync(richMenu);

                var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG")));
                // Upload Image
                await messagingClient.UploadRichMenuPngImageAsync(image, richMenuId);

                // Link to user
                await messagingClient.LinkRichMenuToUserAsync(userId, richMenuId);

                replyMessage = new TextMessage("Rich menu added");
            }
            else if (userMessage == "deleterichmenu")
            {
                // Get Rich Menu for the user
                var richMenuId = await messagingClient.GetRichMenuIdOfUserAsync(userId);

                await messagingClient.UnLinkRichMenuFromUserAsync(userId);

                await messagingClient.DeleteRichMenuAsync(richMenuId);

                replyMessage = new TextMessage("Rich menu deleted");
            }
            else if (userMessage == "deleteallrichmenu")
            {
                // Get Rich Menu for the user
                var richMenuList = await messagingClient.GetRichMenuListAsync();

                foreach (var richMenu in richMenuList)
                {
                    await messagingClient.DeleteRichMenuAsync(richMenu.RichMenuId);
                }
                replyMessage = new TextMessage("All rich menu added");
            }
            else if (userMessage == "quickreply")
            {
                var quickReply = new QuickReply();
                quickReply.Items.Add(new QuickReplyButtonObject(
                                         new PostbackTemplateAction("postback", "postback_data", "postback display", true), "https://github.com/apple-touch-icon.png"));
                quickReply.Items.Add(new QuickReplyButtonObject(
                                         new MessageTemplateAction("message", "message"), "https://github.com/apple-touch-icon.png"));
                quickReply.Items.Add(new QuickReplyButtonObject(
                                         new DateTimePickerTemplateAction("timepicker", "DATETIME", DateTimePickerMode.Datetime, DateTime.Now), "https://github.com/apple-touch-icon.png"));
                quickReply.Items.Add(new QuickReplyButtonObject(
                                         new CameraTemplateAction("Launch Camera")));
                quickReply.Items.Add(new QuickReplyButtonObject(
                                         new CameraRollTemplateAction("Launch Camera Roll")));
                quickReply.Items.Add(new QuickReplyButtonObject(
                                         new LocationTemplateAction("Launch Location")));
                replyMessage = new TextMessage("Select menu from Quick Reply", quickReply);
            }
            else
            {
                replyMessage = new TextMessage(userMessage);
            }

            await messagingClient.ReplyMessageAsync(replyToken, new List <ISendMessage> {
                replyMessage
            });
        }
Beispiel #5
0
        private async Task HandleTextAsync(string replyToken, string userMessage, string userId)
        {
            await talkLog.UpdateAsync(new TalkLog
            {
                MessageType = Enum.GetName(typeof(EventMessageType), EventMessageType.Text),
                ReplyToken  = replyToken,
                UserId      = userId,
                Message     = userMessage
            });

            userMessage = userMessage.ToLower().Replace(" ", "");
            ISendMessage replyMessage = null;

            if (userMessage == "buttons")
            {
                replyMessage = new TemplateMessage("Button Template",
                                                   new ButtonsTemplate(text: "ButtonsTemplate", title: "Click Buttons.",
                                                                       //thumbnailImageUrl: "https://linetestbot123.blob.core.windows.net/linebotcontainer/User_U21d2cd1795be4caa1a32d069fe7b323f/7015056697532.jpeg",
                                                                       actions: new List <ITemplateAction> {
                    new MessageTemplateAction("Message Label", "sample data"),
                    new PostbackTemplateAction("Postback Label", "sample data", "sample data"),
                    new UriTemplateAction("Uri Label", "https://github.com/kenakamu")
                }));
            }
            else if (userMessage == "confirm")
            {
                replyMessage = new TemplateMessage("Confirm Template",
                                                   new ConfirmTemplate("ConfirmTemplate", new List <ITemplateAction> {
                    new MessageTemplateAction("Yes", "Yes"),
                    new MessageTemplateAction("No", "No")
                }));
            }
            else if (userMessage == "carousel")
            {
                List <ITemplateAction> actions1 = new List <ITemplateAction>();
                List <ITemplateAction> actions2 = new List <ITemplateAction>();
                List <ITemplateAction> actions3 = new List <ITemplateAction>();

                // Add actions.
                actions1.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));

                actions2.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions2.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions2.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));

                // Add datetime picker actions
                actions3.Add(new DateTimePickerTemplateAction("DateTime Picker", "DateTime",
                                                              DateTimePickerMode.Datetime, "2017-07-21T13:00", null, null));
                actions3.Add(new DateTimePickerTemplateAction("Date Picker", "Date",
                                                              DateTimePickerMode.Date, "2017-07-21", null, null));
                actions3.Add(new DateTimePickerTemplateAction("Time Picker", "Time",
                                                              DateTimePickerMode.Time, "13:00", null, null));

                replyMessage = new TemplateMessage("Button Template",
                                                   new CarouselTemplate(new List <CarouselColumn> {
                    new CarouselColumn("Casousel 1 Text", "https://github.com/apple-touch-icon.png",
                                       "Casousel 1 Title", actions1),
                    new CarouselColumn("Casousel 2 Text", "https://github.com/apple-touch-icon.png",
                                       "Casousel 2 Title", actions2),
                    new CarouselColumn("Casousel 3 Text", "https://github.com/apple-touch-icon.png",
                                       "Casousel 3 Title", actions3)
                }));
            }
            else if (userMessage == "imagecarousel")
            {
                UriTemplateAction action = new UriTemplateAction("Uri Label", "https://github.com/kenakamu");

                replyMessage = new TemplateMessage("ImageCarouselTemplate",
                                                   new ImageCarouselTemplate(new List <ImageCarouselColumn> {
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action),
                    new ImageCarouselColumn("https://github.com/apple-touch-icon.png", action)
                }));
            }
            else if (userMessage == "imagemap")
            {
                var imageUrl = "https://raw.githubusercontent.com/kenakamu/Test/master/Images/GitHubIcon";
                replyMessage = new ImagemapMessage(
                    imageUrl,
                    "GitHub",
                    new ImagemapSize(1040, 1040), new List <IImagemapAction>
                {
                    new UriImagemapAction(new ImagemapArea(0, 0, 520, 1040), "http://github.com"),
                    new MessageImagemapAction(new ImagemapArea(520, 0, 520, 1040), "I love LINE!")
                });
            }
            else if (userMessage == "addrichmenu")
            {
                // Create Rich Menu
                RichMenu richMenu = new RichMenu()
                {
                    Size        = ImagemapSize.RichMenuLong,
                    Selected    = false,
                    Name        = "nice richmenu",
                    ChatBarText = "touch me",
                    Areas       = new List <ActionArea>()
                    {
                        new ActionArea()
                        {
                            Bounds = new ImagemapArea(0, 0, ImagemapSize.RichMenuLong.Width, ImagemapSize.RichMenuLong.Height),
                            Action = new PostbackTemplateAction("ButtonA", "Menu A", "Menu A")
                        }
                    }
                };

                var richMenuId = await messagingClient.CreateRichMenuAsync(richMenu);

                var image = new MemoryStream(File.ReadAllBytes(@"Images\richmenu.PNG"));
                // Upload Image
                await messagingClient.UploadRichMenuPngImageAsync(image, richMenuId);

                // Link to user
                await messagingClient.LinkRichMenuToUserAsync(userId, richMenuId);

                replyMessage = new TextMessage("Rich menu added");
            }
            else if (userMessage == "deleterichmenu")
            {
                // Get Rich Menu for the user
                var richMenuId = await messagingClient.GetRichMenuIdOfUserAsync(userId);

                await messagingClient.UnLinkRichMenuFromUserAsync(userId);

                await messagingClient.DeleteRichMenuAsync(richMenuId);

                replyMessage = new TextMessage("Rich menu deleted");
            }
            else if (userMessage == "deleteallrichmenu")
            {
                // Get Rich Menu for the user
                var richMenuList = await messagingClient.GetRichMenuListAsync();

                foreach (var richMenu in richMenuList)
                {
                    await messagingClient.DeleteRichMenuAsync(richMenu.RichMenuId);
                }
                replyMessage = new TextMessage("All rich menu added");
            }
            else
            {
                replyMessage = new TextMessage($"You said: {userMessage}");
            }

            await messagingClient.ReplyMessageAsync(replyToken, new List <ISendMessage> {
                replyMessage
            });
        }
        private async Task Messaging(MessageEvent ev)
        {
            if (!(ev.Message is TextEventMessage msg))
            {
                return;
            }

            if (msg.Text.Contains("ルール") && msg.Text.Contains("FAQ"))
            {
                var messages = new ISendMessage[]
                {
                    new FlexMessage("ルール", FlexMessageText.Flex_Rule(), null, sender_admin),
                    new FlexMessage("FAQ", FlexMessageText.Flex_Faq(), null, sender_admin)
                };
                await lineMessagingClient.ReplyMessageAsync(ev.ReplyToken, messages);
            }
            else if (msg.Text.Contains("ルール"))
            {
                var messages = new ISendMessage[]
                {
                    new FlexMessage("ルール", FlexMessageText.Flex_Rule(), null, sender_admin)
                };

                await lineMessagingClient.ReplyMessageAsync(ev.ReplyToken, messages);
            }
            else if (msg.Text.Contains("FAQ"))
            {
                var messages = new ISendMessage[]
                {
                    new FlexMessage("FAQ", FlexMessageText.Flex_Faq(), null, sender_admin)
                };

                await lineMessagingClient.ReplyMessageAsync(ev.ReplyToken, messages);
            }
            else if (msg.Text == "継続確認イベント" && Admin_Users.Contains(ev.Source.UserId))
            {
                var messages = new ISendMessage[]
                {
                    new FlexMessage("継続確認イベント", FlexMessageText.Flex_Check_Continue(), null, sender_admin)
                };
                await lineMessagingClient.ReplyMessageAsync(ev.ReplyToken, messages);
            }
            else if (msg.Text == "継続確認リセット" && Admin_Users.Contains(ev.Source.UserId))
            {
                await database.MemberCheckReset();

                await lineMessagingClient.ReplyTextAsync(ev.ReplyToken, "リセットしました", false, null, sender_admin);
            }
            else if (msg.Text == "継続希望メンバー" && Admin_Users.Contains(ev.Source.UserId))
            {
                var member_list = await database.GetMember("SELECT c.newername FROM c Where c.check != null and c.leavedDate = null ORDER BY c.joinedDate");

                string member = "希望済のメンバー";
                foreach (var item in member_list)
                {
                    member += "\n" + item.newername;
                }
                await lineMessagingClient.ReplyTextAsync(ev.ReplyToken, member, false, null, sender_admin);
            }
            else if (msg.Text == "継続希望旧メンバー" && Admin_Users.Contains(ev.Source.UserId))
            {
                var member_list = await database.GetMember("SELECT c.name FROM c Where c.check != null and c.leavedDate = null ORDER BY c.joinedDate");

                string member = "希望済のメンバー";
                foreach (var item in member_list)
                {
                    member += "\n" + item.name;
                }
                await lineMessagingClient.ReplyTextAsync(ev.ReplyToken, member, false, null, sender_admin);
            }
            else if (msg.Text == "継続未希望メンバー" && Admin_Users.Contains(ev.Source.UserId))
            {
                var member_list = await database.GetMember("SELECT c.newername FROM c Where c.check = null and c.leavedDate = null ORDER BY c.joinedDate");

                string member = "未希望のメンバー";
                foreach (var item in member_list)
                {
                    member += "\n" + item.newername;
                }
                await lineMessagingClient.ReplyTextAsync(ev.ReplyToken, member, false, null, sender_admin);
            }
            else if (msg.Text == "継続未希望旧メンバー" && Admin_Users.Contains(ev.Source.UserId))
            {
                var member_list = await database.GetMember("SELECT c.name FROM c Where c.check = null and c.leavedDate = null ORDER BY c.joinedDate");

                string member = "未希望のメンバー";
                foreach (var item in member_list)
                {
                    member += "\n" + item.name;
                }
                await lineMessagingClient.ReplyTextAsync(ev.ReplyToken, member, false, null, sender_admin);
            }
            else if (msg.Text.Contains("にゃ") || msg.Text.Contains("ニャ"))
            {
                var rand    = new Random();
                var catword = new string[] { "にゃฅ(。•ㅅ•。ฅ)", "(=゚-゚)ノニャーン♪", "(=´∇`=)にゃん", "ฅ(๑•̀ω•́๑)ฅニャンニャンガオー", "ミャー♪ヽ(∇⌒= )( =⌒∇)ノミャー♪", "=^∇^*= にゃお~ん♪" };
                await lineMessagingClient.ReplyTextAsync(ev.ReplyToken, catword[rand.Next(0, catword.Length)], false, null, sender_cat);
            }
            else if (msg.Text == "Google")
            {
                var action = new UriTemplateAction("google", "https://google.com");
                var qr     = new QuickReply()
                {
                    Items = new List <QuickReplyButtonObject>()
                    {
                        new QuickReplyButtonObject(action)
                    }
                };
                await lineMessagingClient.ReplyTextAsync(ev.ReplyToken, "hello", false, qr);
            }
        }
        public async Task HandleTextMessage()
        {
            var     textMessage  = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString());
            Message replyMessage = null;

            if (textMessage.Text.ToLower() == "buttons")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));
                ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions);

                replyMessage = new TemplateMessage("Buttons", buttonsTemplate);
            }
            else if (textMessage.Text.ToLower() == "confirm")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Yes", "yes"));
                actions.Add(new MessageTemplateAction("No", "no"));
                ConfirmTemplate confirmTemplate = new ConfirmTemplate("Confirm Test", actions);
                replyMessage = new TemplateMessage("Confirm", confirmTemplate);
            }
            else if (textMessage.Text.ToLower() == "carousel")
            {
                List <TemplateColumn> columns  = new List <TemplateColumn>();
                List <TemplateAction> actions1 = new List <TemplateAction>();
                List <TemplateAction> actions2 = new List <TemplateAction>();

                // Add actions.
                actions1.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));

                // Add datetime picker actions
                actions2.Add(new DatetimePickerTemplateAction("DateTime Picker", "DateTime", DatetimePickerMode.Datetime, "2017-07-21T13:00"));
                actions2.Add(new DatetimePickerTemplateAction("Date Picker", "Date", DatetimePickerMode.Date, "2017-07-21"));
                actions2.Add(new DatetimePickerTemplateAction("Time Picker", "Time", DatetimePickerMode.Time, "13:00"));

                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1
                });
                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2
                });
                CarouselTemplate carouselTemplate = new CarouselTemplate(columns);
                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else if (textMessage.Text.ToLower() == "imagecarousel")
            {
                List <ImageColumn> columns = new List <ImageColumn>();
                UriTemplateAction  action  = new UriTemplateAction("Uri Label", "https://github.com/kenakamu");

                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));

                ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns);

                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else if (textMessage.Text.ToLower() == "imagemap")
            {
                var url      = HttpContext.Current.Request.Url;
                var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon";
                List <ImageMapAction> actions = new List <ImageMapAction>();
                actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040)));
                actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040)));
                replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions);
            }
            else if (textMessage.Text.ToLower() == "addrichmenu")
            {
                // Create Rich Menu
                RichMenu richMenu = new RichMenu()
                {
                    Size        = new RichMenuSize(1686),
                    Selected    = false,
                    Name        = "nice richmenu",
                    ChatBarText = "touch me",
                    Areas       = new List <RichMenuArea>()
                    {
                        new RichMenuArea()
                        {
                            Action = new PostbackTemplateAction("action=buy&itemid=123"),
                            Bounds = new RichMenuBounds(0, 0, 2500, 1686)
                        }
                    }
                };


                var richMenuId = await lineClient.CreateRichMenu(richMenu);

                var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG")));
                // Upload Image
                await lineClient.UploadRichMenuImage(richMenuId, image);

                // Link to user
                await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId);
            }
            else if (textMessage.Text.ToLower() == "deleterichmenu")
            {
                // Get Rich Menu for the user
                var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId);

                await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId);

                await lineClient.DeleteRichMenu(richMenuId);
            }
            else if (textMessage.Text.ToLower() == "deleteallrichmenu")
            {
                // Get Rich Menu for the user
                var richMenuList = await lineClient.GetRichMenuList();

                foreach (var richMenu in richMenuList)
                {
                    await lineClient.DeleteRichMenu(richMenu["richMenuId"].ToString());
                }
            }
            else
            {
                replyMessage = new TextMessage(textMessage.Text);
            }
            await Reply(replyMessage);
        }
        public async Task HandleTextMessage()
        {
            var     textMessage  = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString());
            Message replyMessage = null;

            if (textMessage.Text.ToLower() == "ボタン")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));
                ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions);

                replyMessage = new TemplateMessage("Buttons", buttonsTemplate);
            }
            else if (textMessage.Text.ToLower() == "こんにちは")//confirm
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("はい", "yes"));
                actions.Add(new MessageTemplateAction("いいえ", "no"));
                ConfirmTemplate confirmTemplate = new ConfirmTemplate("こんにちは!テニスコートを予約しますか?", actions);
                replyMessage = new TemplateMessage("Confirm", confirmTemplate);

                //if (confirmTemplate.ToString() == "yes")
                //{
                //    confirmFlg = true;
                //    //replyMessage = new TextMessage("一覧を表示します♪");
                //}
                //else
                //{
                //    confirmFlg = false;
                //    //replyMessage = new TextMessage("しねーのかよ(# ゚Д゚)");
                //}
            }
            else if (textMessage.Text.ToLower() == "テニスコート予約したい" || textMessage.Text.ToLower() == "yes")
            {
                //replyMessage = new TextMessage("どこのコートを予約しますか?");//最初にメッセを出したかったが動作しない
                string aobayamaimg             = @"~\Images\aobayama.PNG";//青葉山庭球場の画像パスあああああ
                string tyoumeigaokaimg         = @"~\Images\tyoumeigaoka.PNG";
                List <TemplateColumn> columns  = new List <TemplateColumn>();
                List <TemplateAction> actions1 = new List <TemplateAction>();
                List <TemplateAction> actions2 = new List <TemplateAction>();

                actions1.Add(new UriTemplateAction("HP", "http://www.spf-sendai.jp/sisetsu/moshikomi.html"));
                actions1.Add(new UriTemplateAction("場所", "https://www.google.com/maps?ll=38.31376,140.83363&z=12&t=m&hl=ja&gl=US&mapclient=embed&cid=9042741886630709754"));
                actions1.Add(new UriTemplateAction("予約", "https://www.cm2.epss.jp/sendai/web/view/user/homeIndex.html"));
                columns.Add(new TemplateColumn()
                {
                    Title = "長命ヶ丘庭球場", Text = "宮城県仙台市泉区長命ケ丘五丁目14", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1
                });

                actions2.Add(new UriTemplateAction("HP", "http://www.spf-sendai.jp/sisetsu/moshikomi.html"));
                actions2.Add(new UriTemplateAction("場所", "https://www.google.com/maps?ll=38.31376,140.83363&z=12&t=m&hl=ja&gl=US&mapclient=embed&cid=9042741886630709754"));
                actions2.Add(new UriTemplateAction("予約", "https://www.cm2.epss.jp/sendai/web/view/user/homeIndex.html"));
                columns.Add(new TemplateColumn()
                {
                    Title = "青葉山庭球場", Text = "宮城県仙台市青葉区花壇1-1", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2
                });

                //// Add actions.
                //actions1.Add(new MessageTemplateAction("Message Label", "sample data"));
                //actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                //actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));

                //// Add datetime picker actions
                //actions2.Add(new DatetimePickerTemplateAction("DateTime Picker", "DateTime", DatetimePickerMode.Datetime, "2017-07-21T13:00"));
                //actions2.Add(new DatetimePickerTemplateAction("Date Picker", "Date", DatetimePickerMode.Date, "2017-07-21"));
                //actions2.Add(new DatetimePickerTemplateAction("Time Picker", "Time", DatetimePickerMode.Time, "13:00"));

                //columns.Add(new TemplateColumn() { Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1 });
                //columns.Add(new TemplateColumn() { Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2 });

                CarouselTemplate carouselTemplate = new CarouselTemplate(columns);
                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else if (textMessage.Text.ToLower() == "イメージカルーセル")//imagecarousel
            {
                List <ImageColumn> columns = new List <ImageColumn>();
                UriTemplateAction  action  = new UriTemplateAction("Uri Label", "https://github.com/kenakamu");

                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));

                ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns);

                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else if (textMessage.Text.ToLower() == "イメージマップ")//imagemap
            {
                var url      = HttpContext.Current.Request.Url;
                var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon";
                List <ImageMapAction> actions = new List <ImageMapAction>();
                actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040)));
                actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040)));
                replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions);
            }
            else if (textMessage.Text.ToLower() == "アッドリッチメニュー")//addrichmenu
            {
                // Create Rich Menu
                RichMenu richMenu = new RichMenu()
                {
                    Size        = new RichMenuSize(1686),
                    Selected    = false,
                    Name        = "nice richmenu",
                    ChatBarText = "touch me",
                    Areas       = new List <RichMenuArea>()
                    {
                        new RichMenuArea()
                        {
                            Action = new PostbackTemplateAction("action=buy&itemid=123"),
                            Bounds = new RichMenuBounds(0, 0, 2500, 1686)
                        }
                    }
                };


                var richMenuId = await lineClient.CreateRichMenu(richMenu);

                var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG")));
                // Upload Image
                await lineClient.UploadRichMenuImage(richMenuId, image);

                // Link to user
                await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId);
            }
            else if (textMessage.Text.ToLower() == "デリートリッチメニュー")//deleterichmenu
            {
                // Get Rich Menu for the user
                var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId);

                await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId);

                await lineClient.DeleteRichMenu(richMenuId);
            }
            else if (textMessage.Text.ToLower() == "デリートオールリッチメニュー")//deleteallrichmenu
            {
                // Get Rich Menu for the user
                var richMenuList = await lineClient.GetRichMenuList();

                foreach (var richMenu in richMenuList)
                {
                    await lineClient.DeleteRichMenu(richMenu["richMenuId"].ToString());
                }
            }
            else//どの条件にも合わない物はオウム返し
            {
                //replyMessage = new TextMessage(textMessage.Text);
            }
            await Reply(replyMessage);
        }
        public static BubbleContainer ToBubbleContainer(this ItemLookUpResult.Item item)
        {
            string linkUrl  = Aladin.Utils.UnescapeUrl(item.link);
            string coverUrl = item.hqCover;

            UriTemplateAction linkAction = new UriTemplateAction("상품 페이지로 이동", linkUrl);

            // 이미지
            ImageComponent hero = new ImageComponent(coverUrl);

            hero.Size        = ComponentSize.Full;
            hero.AspectMode  = AspectMode.Cover;
            hero.AspectRatio = AspectRatio._151_1;   // 잘려도 여러개(그래봐야 2개까지지만) 나오는게 낫다고 의견이 나와서
            hero.Action      = linkAction;

            // 바디
            // 부제가 있으면 따로 처리를 해준다.
            string titleStr    = item.title;
            string subTitleStr = item.subInfo.subTitle;

            if (!string.IsNullOrEmpty(subTitleStr))
            {
                int index = titleStr.IndexOf(subTitleStr);
                if (index >= 0)
                {
                    titleStr = titleStr.Substring(0, index - 3);
                }
            }

            // 성인물이면 추가로 표시를 해준다.
            if (item.adult)
            {
                string emoji = char.ConvertFromUtf32(0x1f51e);
                titleStr = emoji + " " + titleStr;
            }

            TextComponent title = new TextComponent(titleStr);

            title.Size   = ComponentSize.Lg;
            title.Weight = Weight.Bold;
            TextComponent subTitle = null;

            if (!string.IsNullOrEmpty(subTitleStr))
            {
                subTitle      = new TextComponent(subTitleStr);
                subTitle.Size = ComponentSize.Sm;
            }
            TextComponent author = new TextComponent(item.author);

            author.Size   = ComponentSize.Sm;
            author.Margin = Spacing.Sm;
            TextComponent publisher = new TextComponent(item.publisher);

            publisher.Size = ComponentSize.Sm;
            TextComponent pubDate = new TextComponent(item.pubDate);

            pubDate.Size = ComponentSize.Sm;
            TextComponent priceStandard = new TextComponent($"정가 {item.priceStandard}원 / ");

            priceStandard.Size = ComponentSize.Sm;
            priceStandard.Flex = 0;
            TextComponent priceSales = new TextComponent($"판매가 {item.priceSales}원 ");

            priceSales.Size   = ComponentSize.Sm;
            priceSales.Weight = Weight.Bold;
            priceSales.Flex   = 0;
            BoxComponent price = new BoxComponent(BoxLayout.Baseline);

            price.Contents.Add(priceStandard);
            price.Contents.Add(priceSales);

            BoxComponent body = new BoxComponent(BoxLayout.Vertical);

            body.Contents.Add(title);
            if (subTitle != null)
            {
                body.Contents.Add(subTitle);
            }
            body.Contents.Add(author);
            body.Contents.Add(publisher);
            body.Contents.Add(pubDate);
            body.Contents.Add(price);
            body.Action = linkAction;

            BubbleContainer container = new BubbleContainer();

            container.Hero = hero;
            container.Body = body;

            return(container);
        }
        public async Task <ActionResult> Send(int id)
        {
            ISendMessage replyMessage = null;

            var caregiverDay = db.CaregiverDays.Find(id);

            if (caregiverDay != null)
            {
                string title = caregiverDay.CareTitle;
                if (title.IndexOf("快樂照片") != -1)
                {
                    var imageUrl = "https://fileuploadsinmvc.azurewebsites.net";

                    List <ImageCarouselColumn> happyImageCarouselColumns = new List <ImageCarouselColumn>();

                    int i           = 1;
                    var happyImages = db.CareElderImages.ToArray();
                    foreach (var item in happyImages)
                    {
                        if (i > 5)
                        {
                            break;
                        }
                        UriTemplateAction action = new UriTemplateAction("快樂照片" + i, imageUrl + item.ImageUrl);
                        happyImageCarouselColumns.Add(new ImageCarouselColumn(imageUrl + item.ImageUrl, action));
                        i++;
                    }

                    replyMessage = new TemplateMessage("ImageCarouselTemplate",
                                                       new ImageCarouselTemplate(happyImageCarouselColumns));
                    await PushLineMessage(replyMessage);
                }
                else if (title.IndexOf("照護紀錄") != -1)
                {
                    replyMessage = new TemplateMessage(title,
                                                       new ButtonsTemplate(text: "您覺得最近一次照護活動如何?", title: title,
                                                                           actions: new List <ITemplateAction> {
                        new PostbackTemplateAction("很好", "good"),
                        new PostbackTemplateAction("一般", "normal"),
                        new PostbackTemplateAction("再改善", "improve")
                    }));
                    await PushLineMessage(replyMessage);
                }
                else if (title.IndexOf("照護設定") != -1)
                {
                    replyMessage = new TemplateMessage(title,
                                                       new ButtonsTemplate(text: "修改設定", title: title, thumbnailImageUrl: "https://fileuploadsinmvc.azurewebsites.net/Content/Images/heart.png",
                                                                           actions: new List <ITemplateAction> {
                        new UriTemplateAction("設定 configure", "https://fileuploadsinmvc.azurewebsites.net/CaregiverDays/CareIndex")
                    }));
                    await PushLineMessage(replyMessage);
                }
                else
                {
                    var imageUrl = "https://fileuploadsinmvc.azurewebsites.net/Content/Images";
                    List <CarouselItem> carouselColumns = new List <CarouselItem>();


                    if (title.IndexOf("散步地圖") != -1)
                    {
                        string title1    = caregiverDay.CareTitle;
                        string text1     = caregiverDay.CareDateTime + " " + caregiverDay.CareText;
                        string imageUrl1 = imageUrl + caregiverDay.CareImageUrl;

                        string url1 = caregiverDay.CareUrl;
                        if (string.IsNullOrEmpty(url1))
                        {
                            url1 = "https://fileuploadsinmvc.azurewebsites.net/uploads/5cfec41b-94f0-420a-a810-3cfdd9602593.jpeg";
                        }

                        string title2    = caregiverDay.CareTitle;
                        string text2     = caregiverDay.CareDateTime + " " + "仙岩公園";
                        string imageUrl2 = imageUrl + caregiverDay.CareImageUrl;
                        string url2      = "http://fileuploadsinmvc.azurewebsites.net/CaregiverDays/RouteMap?lat=24.998244&lng=121.549549";

                        List <ITemplateAction> actions1 = new List <ITemplateAction>();
                        actions1.Add(new UriTemplateAction("全長 2 公里", url1));
                        List <ITemplateAction> actions2 = new List <ITemplateAction>();
                        actions2.Add(new UriTemplateAction("全長 3.5 公里", url2));

                        carouselColumns.Add(new CarouselItem {
                            Title = title1, ImageUrl = imageUrl1, Actions = actions1, Text = text1
                        });
                        carouselColumns.Add(new CarouselItem {
                            Title = title2, ImageUrl = imageUrl2, Actions = actions2, Text = text2
                        });
                        replyMessage = new TemplateMessage("Caregiver", GetCarouselTemplate(carouselColumns));

                        await PushLineMessage(replyMessage);
                    }
                    else if (title.IndexOf("用藥安全") != -1)
                    {
                        string title1    = caregiverDay.CareTitle + "/提醒";
                        string text1     = caregiverDay.CareDateTime + " 現在請服用 " + caregiverDay.CareText;
                        string imageUrl1 = imageUrl + caregiverDay.CareImageUrl;

                        List <ITemplateAction> actions1 = new List <ITemplateAction>();
                        actions1.Add(new PostbackTemplateAction("有服用", "Yes"));
                        actions1.Add(new PostbackTemplateAction("未服用", "No"));

                        carouselColumns.Add(new CarouselItem {
                            Title = title1, ImageUrl = imageUrl1, Actions = actions1, Text = text1
                        });
                        replyMessage = new TemplateMessage("Caregiver", GetCarouselTemplate(carouselColumns));

                        await PushLineMessage(replyMessage);
                    }
                    else /* 照護安全、檢視報告 */
                    {
                        string title1    = caregiverDay.CareTitle;
                        string text1     = caregiverDay.CareDateTime + " " + caregiverDay.CareText;
                        string imageUrl1 = imageUrl + caregiverDay.CareImageUrl;

                        string url1 = caregiverDay.CareUrl;
                        if (string.IsNullOrEmpty(url1))
                        {
                            url1 = "https://fileuploadsinmvc.azurewebsites.net/uploads/5cfec41b-94f0-420a-a810-3cfdd9602593.jpeg";
                        }

                        List <ITemplateAction> actions1 = new List <ITemplateAction>();
                        actions1.Add(new UriTemplateAction("步驟 steps", url1));

                        carouselColumns.Add(new CarouselItem {
                            Title = title1, ImageUrl = imageUrl1, Actions = actions1, Text = text1
                        });
                        replyMessage = new TemplateMessage("Caregiver", GetCarouselTemplate(carouselColumns));

                        await PushLineMessage(replyMessage);

                        /* 檢視報告要再送 audio message */
                        if (title1.IndexOf("檢視報告") != -1)
                        {
                            string audioUrl = "https://fileuploadsinmvc.azurewebsites.net";
                            string aUrl     = audioUrl + "/Content/Audio/report_audio.m4a";
                            replyMessage = new AudioMessage(originalContentUrl: aUrl, duration: 11000);
                            await PushLineMessage(replyMessage);
                        }
                    }
                }


                /* 送文字提醒 */
                if (title.IndexOf("用藥安全") != -1)
                {
                    string note               = "";
                    string medicine           = "LOVASTATIN";
                    var    careElderMedicines = db.CareElderMedicines2.Where(c => c.EName.StartsWith(medicine));
                    if (careElderMedicines.Count() > 0)
                    {
                        string pc = careElderMedicines.First().PackageCode;
                        if (!string.IsNullOrEmpty(pc))
                        {
                            note = "高血脂藥(Lovastatin)" + pc + "Hindari makanan grapefruit, itu akan menghambat metabolisme obat-obatan di hati, yang mengarah ke penurunan metabolisme obat.Dosis kumulatif akan meningkatkan kemanjuran dan bahkan menyebabkan efek samping atau toksisitas.";
                        }
                    }
                    await PushLineMessage(new TextMessage(note));
                }
                else if (title.IndexOf("照護安全") != -1)
                {
                    string note = "進行口腔清潔前後,請記得洗手喔!避免相互感染,保護自己也保護被看護人喔!Sebelum dan sesudah membersihkan rongga mulut ingat untuk mencuci tangan! Agar tidak saling menular, melindungi diri sendiri sama dengan melindungi pasien!";
                    await PushLineMessage(new TextMessage(note));
                }
            }


            return(RedirectToAction("Index", "CaregiverDays", new { message = "OK" }));
        }
        public (RichMenu newRichMenu, RenderTargetBitmap bitmap) RenderingRichMenu()
        {
            var body = this.FindName("menu_body") as UIElement;

            if (body == null)
            {
                return(null, null);
            }

            var areas = new List <ActionArea>();

            foreach (var area in Enumerable.Range(1, 20).Select(n => "area_" + n))
            {
                var areaObj = this.FindName(area) as UIElement;
                if (areaObj == null)
                {
                    continue;
                }

                var             menuAction = RichMenuProperties.GetAction(areaObj);
                ITemplateAction action     = null;
                switch (menuAction.Type)
                {
                case TemplateActionType.Message:
                    action = new MessageTemplateAction(menuAction.Label, menuAction.Text);
                    break;

                case TemplateActionType.Postback:
                    action = new PostbackTemplateAction(menuAction.Label, menuAction.Data, menuAction.Text);
                    break;

                case TemplateActionType.Uri:
                    action = new UriTemplateAction(menuAction.Label, menuAction.Uri);
                    break;

                case TemplateActionType.Datetimepicker:
                    action = new DateTimePickerTemplateAction(menuAction.Label, menuAction.Data, menuAction.DateTimeMode,
                                                              menuAction.initialDateTime, menuAction.minDateTime, menuAction.maxDateTime);
                    break;
                }
                if (action == null)
                {
                    continue;
                }
                ;

                var topLeft = areaObj.TransformToVisual(body).Transform(new Point(0, 0));
                areas.Add(new ActionArea()
                {
                    Bounds = new ImageArea(
                        (int)topLeft.X,
                        (int)topLeft.Y,
                        (int)areaObj.RenderSize.Width,
                        (int)areaObj.RenderSize.Height),
                    Action = action
                });
            }

            var details = RichMenuProperties.GetSettings(body);
            var menu    = new RichMenu()
            {
                Name        = details.Name,
                ChatBarText = details.ChatBarText,
                Selected    = details.Selected,
                Size        = new ImageSize((int)body.RenderSize.Width, (int)body.RenderSize.Height),
                Areas       = areas
            };

            var bmp = new RenderTargetBitmap(menu.Size.Width, menu.Size.Height, 96, 96, PixelFormats.Pbgra32);

            bmp.Render(body);

            return(menu, bmp);
        }
Beispiel #12
0
        // 事件:文字
        public async Task HandleTextMessage()
        {
            var     textMessage            = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString());
            Message replyMessage           = null;
            List <Models.Message> messages = db.Messages.Where(x => x.KeyWord.Contains(textMessage.Text) && x.Event == 5).ToList();

            if (messages != null)
            {
                Dictionary <int, int> matchMessages    = null;
                List <int>            messageIds       = null;
                List <Models.Message> frequentMessages = null;

                foreach (var message in messages)
                {
                    string[] keywords = message.KeyWord.Split(',');
                    int      count    = 0;
                    foreach (var keyword in keywords)
                    {
                        if (textMessage.Text.Contains(keyword))
                        {
                            matchMessages.Add(message.MessageId, count++);
                        }
                    }
                }
                // 排序
                var sortMessages = from objDic in matchMessages orderby objDic.Value descending select objDic;
                foreach (KeyValuePair <int, int> kvp in sortMessages)
                {
                    messageIds.Add(kvp.Key);
                }
                frequentMessages = db.Messages.Where(x => messageIds.Contains(x.MessageId)).ToList();

                // 文字
                if (frequentMessages.First().Type == 1)
                {
                    replyMessage = new TextMessage(frequentMessages.First().Text);
                }
                // 貼圖
                else if (frequentMessages.First().Type == 2)
                {
                    // https://devdocs.line.me/files/sticker_list.pdf
                    var stickerMessage = JsonConvert.DeserializeObject <StickerMessage>(lineEvent.Message.ToString());
                    replyMessage = new StickerMessage(frequentMessages.First().STKId, frequentMessages.First().STKPKGId);
                }
                // 圖片
                else if (frequentMessages.First().Type == 3)
                {
                    replyMessage = new ImageMessage(frequentMessages.First().ImageUrl, frequentMessages.First().Url);
                }
                // 影片
                else if (frequentMessages.First().Type == 4)
                {
                    replyMessage = new ImageMessage(frequentMessages.First().ImageUrl, frequentMessages.First().Url);
                }
                // 聲音
                else if (frequentMessages.First().Type == 5)
                {
                    replyMessage = new ImageMessage(frequentMessages.First().ImageUrl, frequentMessages.First().Url);
                }
                // 位置
                else if (frequentMessages.First().Type == 6)
                {
                    replyMessage = new LocationMessage(
                        frequentMessages.First().Title,
                        frequentMessages.First().Address,
                        frequentMessages.First().Latitude,
                        frequentMessages.First().Longitude);
                }
                // 圖片地圖
                else if (frequentMessages.First().Type == 7)
                {
                    // 待研究
                    var url      = HttpContext.Current.Request.Url;
                    var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon";
                    List <ImageMapAction> actions = new List <ImageMapAction>();
                    actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040)));
                    actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040)));
                    replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions);
                }
                // 模板:按鈕
                else if (frequentMessages.First().Type == 8)
                {
                    List <TemplateAction> actions = new List <TemplateAction>();
                    if (frequentMessages.First().Msg != "" || frequentMessages.First().Msg != null)
                    {
                        actions.Add(new MessageTemplateAction("傳送訊息", frequentMessages.First().Msg));
                    }
                    if (frequentMessages.First().PostBack != "" || frequentMessages.First().PostBack != null)
                    {
                        actions.Add(new PostbackTemplateAction("執行動作", frequentMessages.First().PostBack));
                    }
                    if (frequentMessages.First().Url != "" || frequentMessages.First().Url != null)
                    {
                        actions.Add(new UriTemplateAction("查看全部", frequentMessages.First().Url));
                    }
                    ButtonsTemplate buttonsTemplate = new ButtonsTemplate(frequentMessages.First().ImageUrl, frequentMessages.First().Title, frequentMessages.First().Text, actions);

                    replyMessage = new TemplateMessage("Buttons", buttonsTemplate);
                }
                // 模板:確認
                else if (frequentMessages.First().Type == 9)
                {
                    List <TemplateAction> actions = new List <TemplateAction>();
                    actions.Add(new MessageTemplateAction("是", frequentMessages.First().Yes));
                    actions.Add(new MessageTemplateAction("否", frequentMessages.First().No));
                    ConfirmTemplate confirmTemplate = new ConfirmTemplate(frequentMessages.First().Title, actions);
                    replyMessage = new TemplateMessage("Confirm", confirmTemplate);
                }
                // 模板:輪播
                else if (frequentMessages.First().Type == 10)
                {
                    List <TemplateColumn> columns = new List <TemplateColumn>();
                    List <TemplateAction> actions = new List <TemplateAction>();

                    foreach (var message in frequentMessages.Where(x => x.Type == 10))
                    {
                        actions = null;
                        if (message.Msg != "" || message.Msg != null)
                        {
                            actions.Add(new MessageTemplateAction("傳送訊息", message.Msg));
                        }
                        if (message.PostBack != "" || message.PostBack != null)
                        {
                            actions.Add(new PostbackTemplateAction("執行動作", message.PostBack));
                        }
                        if (message.Url != "" || message.Url != null)
                        {
                            actions.Add(new UriTemplateAction("查看全部", message.Url));
                        }

                        columns.Add(new TemplateColumn()
                        {
                            Title = message.Title, Text = message.Text, ThumbnailImageUrl = message.ImageUrl, Actions = actions
                        });
                    }

                    CarouselTemplate carouselTemplate = new CarouselTemplate(columns);
                    replyMessage = new TemplateMessage("Carousel", carouselTemplate);
                }
                // 模板:圖片輪播
                else if (frequentMessages.First().Type == 11)
                {
                    List <ImageColumn> columns = new List <ImageColumn>();

                    foreach (var message in frequentMessages.Where(x => x.Type == 11))
                    {
                        UriTemplateAction action = new UriTemplateAction("查看全部", message.Url);
                        columns.Add(new ImageColumn(message.ImageUrl, action));
                    }

                    ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns);
                    replyMessage = new TemplateMessage("Carousel", carouselTemplate);
                }
                // 模板:新增豐富菜單
                else if (frequentMessages.First().Type == 12)
                {
                    // Create Rich Menu
                    RichMenu richMenu = new RichMenu()
                    {
                        Size        = new RichMenuSize(1686),
                        Selected    = false,
                        Name        = frequentMessages.First().Title,
                        ChatBarText = "touch me",
                        Areas       = new List <RichMenuArea>()
                        {
                            new RichMenuArea()
                            {
                                Action = new PostbackTemplateAction("action=buy&itemid=123"),
                                Bounds = new RichMenuBounds(0, 0, 2500, 1686)
                            }
                        }
                    };


                    var richMenuId = await lineClient.CreateRichMenu(richMenu);

                    var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG")));
                    // Upload Image
                    await lineClient.UploadRichMenuImage(richMenuId, image);

                    // Link to user
                    await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId);
                }
                // 模板:刪除豐富菜單
                else
                {
                    var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId);

                    await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId);

                    await lineClient.DeleteRichMenu(richMenuId);
                }
            }
            else
            {
                replyMessage = new TextMessage("不好意思!我不懂您的意思...");
            }
            await Reply(replyMessage);
        }