public void ForwardMessageTest_ForwardStickerMessage() { var chatId = 170181775; var fromChatId = 170181775; var messageId = 4218; var expected = new StickerMessage { Chat = _privateChat, From = _botUser, Sticker = new Sticker { Emoji = "\u2764", FileId = "CAADAgADowEAAsxUSQmFay8ykxLf6QI", FileSize = 35206, Height = 512, Width = 512, Thumb = new PhotoSize { FileId = "AAQCABPNBoINAAQjOFnKsKPVNYe6AAIC", FileSize = 5544, Width = 128, Height = 128 } }, MessageId = messageId, ForwardFrom = _user }; var actual = _telegramMethods.ForwardMessage <StickerMessage>(chatId.ToString(), fromChatId.ToString(), messageId).Result; var compareLogic = new CompareLogic(_config); var comparationResult = compareLogic.Compare(expected, actual); Assert.IsTrue(comparationResult.AreEqual, comparationResult.DifferencesString); }
public void Constructor_SerializedCorrectly() { StickerMessage message = new StickerMessage("CorrectPackage", "CorrectSticker"); string serialized = JsonConvert.SerializeObject(message); Assert.AreEqual(@"{""type"":""sticker"",""packageId"":""CorrectPackage"",""stickerId"":""CorrectSticker""}", serialized); }
public void ShouldCreateSerializeableObject() { var message = new StickerMessage("CorrectPackage", "CorrectSticker"); var serialized = JsonConvert.SerializeObject(message); Assert.AreEqual(@"{""type"":""sticker"",""packageId"":""CorrectPackage"",""stickerId"":""CorrectSticker""}", serialized); }
public async Task HandleStickerMessage() { //https://devdocs.line.me/files/sticker_list.pdf var stickerMessage = JsonConvert.DeserializeObject <StickerMessage>(lineEvent.Message.ToString()); var replyMessage = new StickerMessage("1", "1"); await Reply(replyMessage); }
public void ShouldThrowExceptionWhenValueIsEmpty() { var message = new StickerMessage(); ExceptionAssert.Throws <InvalidOperationException>("The sticker id cannot be null or whitespace.", () => { message.StickerId = string.Empty; }); }
public void StickerId_Empty_ThrowsException() { StickerMessage message = new StickerMessage(); ExceptionAssert.Throws <InvalidOperationException>("The sticker id cannot be null or whitespace.", () => { message.StickerId = string.Empty; }); }
public void PackageId_Null_ThrowsException() { StickerMessage message = new StickerMessage(); ExceptionAssert.Throws <InvalidOperationException>("The package id cannot be null or whitespace.", () => { message.PackageId = null; }); }
public void ShouldThrowExceptionWhenValueIsNull() { var message = new StickerMessage(); ExceptionAssert.Throws <InvalidOperationException>("The package id cannot be null or whitespace.", () => { message.PackageId = null; }); }
public void ShouldNotThrowExceptionWhenValid() { ISendMessage message = new StickerMessage() { StickerId = "StickerId", PackageId = "PackageId" }; message.Validate(); }
public async void StickerMessage(string receiver, int stickerId) { var message = new StickerMessage { Receiver = receiver, StickerId = stickerId, Sender = new Sender { Name = _botOptions.Sender.Name } }; var response = await _api.SendMessage(message); HandleResponse(response); }
public void ShouldConvertCustomIStickerMessageToStickerMessage() { var message = new TestStickerMessage(); var stickerMessage = StickerMessage.Convert(message); Assert.AreNotEqual(message, stickerMessage); Assert.AreEqual("PackageId", stickerMessage.PackageId); Assert.AreEqual("StickerId", stickerMessage.StickerId); }
public void ShouldThrowExceptionWhenStickerIdIsNull() { ISendMessage message = new StickerMessage() { PackageId = "PackageId" }; ExceptionAssert.Throws <InvalidOperationException>("The sticker id cannot be null.", () => { message.Validate(); }); }
public void ShouldNotThrowExceptionWhenMessageIsStickerMessage() { var message = new StickerMessage() { PackageId = "1", StickerId = "2" }; ISendMessageExtensions.Validate(new ISendMessage[1] { message }); }
public void ShouldThrowExceptionWhenStickerIdIsNull() { var message = new StickerMessage() { PackageId = "PackageId" }; ExceptionAssert.Throws <InvalidOperationException>("The sticker id cannot be null.", () => { StickerMessage.Convert(message); }); }
public async Task <IList <IRequestMessage> > GetReplyMessagesAsync() { // Api reference: https://developers.line.biz/media/messaging-api/sticker_list.pdf var msg = new StickerMessage(446, 1988); await Task.CompletedTask; return(new List <IRequestMessage> { msg }); }
public void ShouldPreserveInstanceWhenValueIsStickerMessage() { var message = new StickerMessage() { PackageId = "PackageId", StickerId = "StickerId" }; var stickerMessage = StickerMessage.Convert(message); Assert.AreSame(message, stickerMessage); }
public void Convert_StickerMessageWithoutStickerId_ThrowsException() { StickerMessage message = new StickerMessage() { PackageId = "PackageId" }; ExceptionAssert.Throws <InvalidOperationException>("The sticker id cannot be null.", () => { MessageConverter.Convert(new ISendMessage[] { message }); }); }
public void Convert_StickerMessage_InstanceIsPreserved() { StickerMessage message = new StickerMessage() { PackageId = "PackageId", StickerId = "StickerId" }; ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message }); Assert.AreEqual(1, messages.Length); Assert.AreEqual(message, messages[0]); }
public void Convert_CustomIStickerMessage_ConvertedToTextMessage() { TestStickerMessage message = new TestStickerMessage(); ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message }); Assert.AreEqual(1, messages.Length); Assert.AreNotEqual(message, messages[0]); StickerMessage textMessage = messages[0] as StickerMessage; Assert.AreEqual("PackageId", textMessage.PackageId); Assert.AreEqual("StickerId", textMessage.StickerId); }
public void BuildMessage_StickerJSON_TelegramStickerMessage() { var expected = new StickerMessage { From = _user, Sticker = _sticker }; AttachGeneralProperties(expected); var actual = MessageBuilder.BuildMessage <StickerMessage>(_messageToken); var compareLogic = new CompareLogic(_config); var comparisonResult = compareLogic.Compare(expected, actual); Assert.IsTrue(comparisonResult.AreEqual, comparisonResult.DifferencesString); }
/// <summary> /// スタンプメッセージ追加 /// </summary> /// <param name="packageId">パッケージID</param> /// <param name="stickerId">スタンプID</param> public MessageFactoryService AddStickerMessage(string packageId, string stickerId) { Trace.TraceInformation("Start"); if (!this.RegulateMessageArray()) { Trace.TraceWarning("Regulate Message Array is False"); Trace.TraceInformation("End"); return(this); } StickerMessage stickerMessage = new StickerMessage() { packageId = packageId, stickerId = stickerId }; this.Messages[this.Messages.Length - 1] = stickerMessage; Trace.TraceInformation("End"); return(this); }
public async Task HandleTextMessage() { var textMessage = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString()); Message replyMessage = null; var message = textMessage.Text.ToLower().Trim(); //if (message == "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 (message == "個人化" || message.Contains("專屬服務") || message.Contains("會員專屬服務,查詢快速又簡單")) { var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/LineEvents/GetMapImage"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/Index")}?X001={CurrentProfile.UserId}", new ImageMapArea(375, 0, 325, 1040))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/TodayLesson")}?X001={CurrentProfile.UserId}", new ImageMapArea(0, 0, 375, 590))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/Notice")}?X001={CurrentProfile.UserId}", new ImageMapArea(0, 590, 375, 450))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/CheckBonusPointByLine")}?X001={CurrentProfile.UserId}", new ImageMapArea(700, 0, 350, 590))); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/CheckAttendance")}?X001={CurrentProfile.UserId}", new ImageMapArea(700, 590, 350, 450))); //actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040))); replyMessage = new ImageMapMessage(imageUrl, "會員專屬服務,查詢快速又簡單", new BaseSize(1040, 1040), actions); } else if (message.Contains("帳號串連即可獲得beyond幣") || message.Contains("帳號串連") || message.Contains("beyond幣") || message.Contains("帳號beyond幣") || message.Contains("帳號活動")) { var url = HttpContext.Current.Request.Url; var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/LineEvents/GetBeyondCoinMap"; List <ImageMapAction> actions = new List <ImageMapAction>(); actions.Add(new UriImageMapAction($"{url.Scheme}://{url.Host}:{url.Port}{VirtualPathUtility.ToAbsolute("~/CornerKick/Index")}?X001={CurrentProfile.UserId}", new ImageMapArea(0, 0, 1040, 1040))); replyMessage = new ImageMapMessage(imageUrl, "會員專屬服務,查詢快速又簡單", new BaseSize(1040, 1040), actions); } else if (message == "check" || message == "打卡") { var item = models.GetTable <UserProfileExtension>().Where(u => u.LineID == CurrentProfile.UserId) .Select(u => u.UserProfile).FirstOrDefault(); if (item == null) { List <TemplateAction> actions = new List <TemplateAction>(); ButtonsTemplate buttonsTemplate = new ButtonsTemplate(); buttonsTemplate.Title = "此支裝置尚未設定過專屬服務"; buttonsTemplate.Text = "請點選下方更多資訊/專屬服務/帳號設定才可使用!"; actions.Add(new UriTemplateAction("帳號設定", $"{ Settings.Default.HostDomain }{ VirtualPathUtility.ToAbsolute("~/CornerKick/Register")}?X001={ CurrentProfile.UserId}")); buttonsTemplate.Actions = actions; replyMessage = new TemplateMessage("上課打卡", buttonsTemplate); } else { var checkAttendance = item.CheckLessonAttendanceEvent(models); if (checkAttendance == null) { replyMessage = new TextMessage($"{(item.UserProfileExtension.Gender == "F" ? "親愛的" : "兄弟")}, 目前課程都有確實打卡喔!"); } else { List <TemplateAction> actions = new List <TemplateAction>(); ButtonsTemplate buttonsTemplate = new ButtonsTemplate(); buttonsTemplate.Title = item.UserProfileExtension.Gender == "F" ? "親愛的" : "兄弟"; buttonsTemplate.Text = $"還有{checkAttendance.CheckCount}堂課沒打卡"; actions.Add(new UriTemplateAction("👉立即打卡", $"{Settings.Default.HostDomain}{VirtualPathUtility.ToAbsolute("~/CornerKick/CheckAttendance")}?X001={CurrentProfile.UserId}")); buttonsTemplate.Actions = actions; replyMessage = new TemplateMessage("上課打卡", 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}/LineEvents/GetIcon"; // List<ImageMapAction> actions = new List<ImageMapAction>(); // actions.Add(new UriImageMapAction($"{Settings.Default.HostDomain}{VirtualPathUtility.ToAbsolute("~/CornerKick/Index")}?lineID={CurrentProfile.UserId}", 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 if (message == "劉加菲" || message == "garfaild") { //replyMessage = new TextMessage("($_$)"); replyMessage = new StickerMessage("3", "256"); } else if (message == "笨小胖") { replyMessage = new StickerMessage("2", "43"); } else { replyMessage = new TextMessage(__SLOGAN); } if (replyMessage != null) { await Reply(replyMessage); } }
/// <summary> /// Messageの変換 /// </summary> /// <param name="message">JValueのmessage</param> /// <returns>MessageBaseのmessage</returns> private static MessageBase ConvertMessage(JObject message) { Trace.TraceInformation("Start"); // typeで分岐 string messageType = message["type"].Value <string>(); Trace.TraceInformation("Message Type is " + messageType); switch (messageType) { // 音声 case "audio": AudioMessage audioMessage = new AudioMessage() { id = message["id"].Value <string>() }; Trace.TraceInformation("Message Id is " + audioMessage.id); Trace.TraceInformation("End"); return(audioMessage); // ファイル case "file": // TODO 未確認 FileMessage fileMessage = new FileMessage() { id = message["id"].Value <string>(), fileSize = message["fileSize"].Value <string>(), fileName = message["fileName"].Value <string>() }; Trace.TraceInformation("Message Id is " + fileMessage.id); Trace.TraceInformation("File Size is " + fileMessage.fileSize); Trace.TraceInformation("File Name is " + fileMessage.fileName); Trace.TraceInformation("End"); return(fileMessage); // 画像 case "image": ImageMessage imageMessage = new ImageMessage() { id = message["id"].Value <string>() }; Trace.TraceInformation("Message Id is " + imageMessage.id); Trace.TraceInformation("End"); return(imageMessage); // 位置情報 case "location": LocationMessage locationMessage = new LocationMessage() { id = message["id"].Value <string>(), address = message["address"].Value <string>(), title = message["title"].Value <string>(), latitude = message["latitude"].Value <decimal>(), longitude = message["longitude"].Value <decimal>() }; Trace.TraceInformation("Message Id is " + locationMessage.id); Trace.TraceInformation("Address is " + locationMessage.address); Trace.TraceInformation("Title is " + locationMessage.title); Trace.TraceInformation("Latitude is " + locationMessage.latitude); Trace.TraceInformation("Longitude is " + locationMessage.longitude); Trace.TraceInformation("End"); return(locationMessage); // スタンプ case "sticker": StickerMessage stickerMessage = new StickerMessage() { id = message["id"].Value <string>(), stickerId = message["stickerId"].Value <string>(), packageId = message["packageId"].Value <string>() }; Trace.TraceInformation("Message Id is " + stickerMessage.id); Trace.TraceInformation("Sticker Id is " + stickerMessage.stickerId); Trace.TraceInformation("Package Id is " + stickerMessage.packageId); Trace.TraceInformation("End"); return(stickerMessage); // テキスト case "text": TextMessage textMessage = new TextMessage() { id = message["id"].Value <string>(), text = message["text"].Value <string>() }; Trace.TraceInformation("Message Id is " + textMessage.id); Trace.TraceInformation("Text is " + textMessage.text); Trace.TraceInformation("End"); return(textMessage); // 動画 case "video": VideoMessage videoMessage = new VideoMessage() { id = message["id"].Value <string>() }; Trace.TraceInformation("Message Id is " + videoMessage.id); Trace.TraceInformation("End"); return(videoMessage); // その他 default: // TODO 未確認 Trace.TraceWarning("Don't Convert Message"); Trace.TraceInformation("End"); return(null); } }
public void Decode(IByteBuffer buffer) { /* * // Get ids that have seen this message * string temp = ByteBufUtils.ReadUTF8(buffer); * while (temp != "~") * { * SeenBy.Add(temp); * temp = ByteBufUtils.ReadUTF8(buffer); * } * * Revoked = buffer.ReadInt() == 1 ? true : false; * * // Get ids that have reacted this message & their reaction id (int) * // Please write to buffer in this format: user_id_0-reaction_id_0-user_id_1-reaction_id_1-... * temp = ByteBufUtils.ReadUTF8(buffer); * int reactionID = buffer.ReadInt(); * while (temp != "~") * { * Reacts.Add(temp, reactionID); * temp = ByteBufUtils.ReadUTF8(buffer); * reactionID = buffer.ReadInt(); * } */ string temp = ByteBufUtils.ReadUTF8(buffer); while (!temp.Equals("~")) { SenderID.Add(temp); MessType.Add(buffer.ReadInt()); AbstractMessage Message = null; switch (MessType.Last()) { case 1: Message = new AttachmentMessage(); (Message as AttachmentMessage).DecodeFromBuffer(buffer); break; case 2: Message = new ImageMessage(); (Message as ImageMessage).DecodeFromBuffer(buffer); break; case 3: Message = new StickerMessage(); (Message as StickerMessage).DecodeFromBuffer(buffer); break; case 4: Message = new TextMessage(); (Message as TextMessage).DecodeFromBuffer(buffer); break; case 5: Message = new VideoMessage(); (Message as VideoMessage).DecodeFromBuffer(buffer); break; } Content.Add(Message); temp = ByteBufUtils.ReadUTF8(buffer); } LoadConversation = buffer.ReadBoolean(); }
public virtual Task <Message> SendStickerAsync(StickerMessage message, CancellationToken cancellationToken = default) { return(Client.SendStickerAsync(message.ChatId, message.InputOnlineFile, message.DisableNotification, message.ReplyToMessageId, message.ReplyMarkup, cancellationToken)); }
// 事件:文字 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); }