Пример #1
0
        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;
            });
        }
Пример #8
0
            public void ShouldThrowExceptionWhenValueIsNull()
            {
                var message = new StickerMessage();

                ExceptionAssert.Throws <InvalidOperationException>("The package id cannot be null or whitespace.", () =>
                {
                    message.PackageId = null;
                });
            }
Пример #9
0
            public void ShouldNotThrowExceptionWhenValid()
            {
                ISendMessage message = new StickerMessage()
                {
                    StickerId = "StickerId",
                    PackageId = "PackageId"
                };

                message.Validate();
            }
Пример #10
0
 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);
            }
Пример #12
0
            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);
        }
Пример #20
0
        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);
        }
Пример #22
0
        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);
            }
        }
Пример #23
0
        /// <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();
        }
Пример #25
0
 public virtual Task <Message> SendStickerAsync(StickerMessage message,
                                                CancellationToken cancellationToken = default)
 {
     return(Client.SendStickerAsync(message.ChatId, message.InputOnlineFile,
                                    message.DisableNotification, message.ReplyToMessageId, message.ReplyMarkup, cancellationToken));
 }
Пример #26
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);
        }