public async Task <HttpResponseMessage> Post()
        {
            var content = await Request.Content.ReadAsStringAsync();

            var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault();

            if (signature == null || !Client.ValidateSignature(content, signature))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found"));
            }

            var events = Client.ParseEvent(content);

            foreach (var ev in events)
            {
                switch (ev)
                {
                case MessageEvent mev:
                    switch (mev.Message.Type)
                    {
                    case MessageType.Text:
                    {
                        var message = (TextEventMessage)mev.Message;
                        if (Regex.IsMatch(message.Text, "buttons", RegexOptions.IgnoreCase))
                        {
                            await SendButtonsAsync(mev.ReplyToken);
                        }
                        if (Regex.IsMatch(message.Text, "confirm", RegexOptions.IgnoreCase))
                        {
                            await SendConfirmAsync(mev.ReplyToken);
                        }
                        if (Regex.IsMatch(message.Text, "carousel", RegexOptions.IgnoreCase))
                        {
                            await SendCarouselAsync(mev.ReplyToken);
                        }
                        if (Regex.IsMatch(message.Text, "datetime", RegexOptions.IgnoreCase))
                        {
                            await SendDateTimePickerAsync(mev.ReplyToken);
                        }

                        break;
                    }
                    }
                    break;

                case PostbackEvent pev:
                    var text = $"Received a PostbackEvent\nData: {pev.Postback.Data}\nParams.Date: {pev.Postback.Params?.Date}\nParams.Time: {pev.Postback.Params?.Time}\nParams.DateTime: {pev.Postback.Params?.DateTime}";
                    await Client.ReplyTextAsync(pev.ReplyToken, text);

                    break;
                }
            }

            return(Request.CreateResponse(HttpStatusCode.OK, "OK"));
        }
        public async Task <HttpResponseMessage> Post()
        {
            var content = await Request.Content.ReadAsStringAsync();

            var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault();

            if (signature == null || !Client.ValidateSignature(content, signature))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found"));
            }

            var events = Client.ParseEvent(content);

            foreach (var ev in events)
            {
                switch (ev)
                {
                case MessageEvent mev:
                    switch (mev.Message)
                    {
                    case TextEventMessage message when Regex.IsMatch(message.Text, "start", RegexOptions.IgnoreCase):
                        await SetupRichMenuAsync(mev.ReplyToken, mev.Source.Id);

                        break;

                    case TextEventMessage message when Regex.IsMatch(message.Text, "finish", RegexOptions.IgnoreCase):
                        await ResetRichMenuAsync(mev.ReplyToken, mev.Source.Id);

                        break;

                    case TextEventMessage message when Regex.IsMatch(message.Text, "list", RegexOptions.IgnoreCase):
                        await ListRichMenus(mev.ReplyToken);

                        break;
                    }
                    break;
                }
            }

            return(Request.CreateResponse(HttpStatusCode.OK, "OK"));
        }
Beispiel #3
0
        public async Task <HttpResponseMessage> Post()
        {
            var content = await Request.Content.ReadAsStringAsync();

            var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault();

            if (signature == null || !Client.ValidateSignature(content, signature))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found"));
            }

            var events = Client.ParseEvent(content);

            foreach (var ev in events)
            {
                switch (ev.Type)
                {
                case EventType.Message:
                    var mev = (MessageEvent)ev;
                    switch (mev.Message.Type)
                    {
                    case MessageType.Text:
                    {
                        var message = (TextEventMessage)mev.Message;
                        if (Regex.IsMatch(message.Text, "imagemap"))
                        {
                            await SendImageMapAsync(mev.ReplyToken);
                        }

                        break;
                    }
                    }
                    break;
                }
            }

            return(Request.CreateResponse(HttpStatusCode.OK, "OK"));
        }
Beispiel #4
0
        public async Task <HttpResponseMessage> Post()
        {
            var content = await Request.Content.ReadAsStringAsync();

            var signature = Request.Headers.GetValues("X-Line-Signature").FirstOrDefault();

            if (signature == null || !Client.ValidateSignature(content, signature))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "not found"));
            }

            var events = Client.ParseEvent(content);

            foreach (var ev in events)
            {
                switch (ev.Type)
                {
                case EventType.Message:
                    var mev = (MessageEvent)ev;
                    switch (mev.Message.Type)
                    {
                    case MessageType.Text:
                    {
                        var message = (TextEventMessage)mev.Message;
                        await Client.ReplyTextAsync(mev.ReplyToken, message.Text);

                        break;
                    }

                    case MessageType.Image:
                    {
                        var message = (ImageEventMessage)mev.Message;
                        var image   = await Client.GetContentAsync(message.Id);

                        var key = AddToCache(image);
                        await Client.ReplyMessageAsync(mev.ReplyToken, new ImageMessage
                            {
                                OriginalContentUrl = GetContentUrl(key),
                                PreviewImageUrl    = GetContentUrl(key),
                            });

                        break;
                    }

                    case MessageType.Video:
                    {
                        var message = (VideoEventMessage)mev.Message;
                        var video   = await Client.GetContentAsync(message.Id);

                        var key      = AddToCache(video);
                        var thumb    = MakeThumbnail(video);
                        var thumbkey = AddToCache(thumb);
                        await Client.ReplyMessageAsync(mev.ReplyToken, new VideoMessage
                            {
                                OriginalContentUrl = GetContentUrl(key),
                                PreviewImageUrl    = GetContentUrl(thumbkey),
                            });

                        break;
                    }

                    case MessageType.Audio:
                    {
                        var message = (AudioEventMessage)mev.Message;
                        var audio   = await Client.GetContentAsync(message.Id);

                        var key = AddToCache(audio);
                        await Client.ReplyMessageAsync(mev.ReplyToken, new AudioMessage
                            {
                                OriginalContentUrl = GetContentUrl(key),
                                Duration           = 0.5,
                            });

                        break;
                    }

                    case MessageType.Location:
                    {
                        var message = (LocationEventMessage)mev.Message;
                        await Client.ReplyMessageAsync(mev.ReplyToken, new LocationMessage
                            {
                                Address   = message.Address,
                                Title     = message.Title,
                                Latitude  = message.Latitude,
                                Longitude = message.Longitude,
                            });

                        break;
                    }

                    case MessageType.Sticker:
                    {
                        var message = (StickerEventMessage)mev.Message;
                        await Client.ReplyMessageAsync(mev.ReplyToken, new StickerMessage
                            {
                                PackageId = message.PackageId,
                                StickerId = message.StickerId,
                            });

                        break;
                    }
                    }
                    break;
                }
            }

            return(Request.CreateResponse(HttpStatusCode.OK, "OK"));
        }
Beispiel #5
0
        public void ParseTest()
        {
            var eventStr = ReadResource("events.json");
            var client   = new LineClient("xx", "xx", "xx");
            var events   = client.ParseEvent(eventStr).ToArray();

            Assert.IsInstanceOf <MessageEvent>(events[0]);
            var event0 = (MessageEvent)events[0];

            Assert.IsInstanceOf <UserSoruce>(event0.Source);
            Assert.IsInstanceOf <TextEventMessage>(event0.Message);

            Assert.IsInstanceOf <MessageEvent>(events[1]);
            var event1 = (MessageEvent)events[1];

            Assert.IsInstanceOf <UserSoruce>(event1.Source);
            Assert.IsInstanceOf <ImageEventMessage>(event1.Message);

            Assert.IsInstanceOf <MessageEvent>(events[2]);
            var event2 = (MessageEvent)events[2];

            Assert.IsInstanceOf <UserSoruce>(event2.Source);
            Assert.IsInstanceOf <VideoEventMessage>(event2.Message);

            Assert.IsInstanceOf <MessageEvent>(events[3]);
            var event3 = (MessageEvent)events[3];

            Assert.IsInstanceOf <UserSoruce>(event3.Source);
            Assert.IsInstanceOf <AudioEventMessage>(event3.Message);

            Assert.IsInstanceOf <MessageEvent>(events[4]);
            var event4 = (MessageEvent)events[4];

            Assert.IsInstanceOf <UserSoruce>(event4.Source);
            Assert.IsInstanceOf <LocationEventMessage>(event4.Message);

            Assert.IsInstanceOf <MessageEvent>(events[5]);
            var event5 = (MessageEvent)events[5];

            Assert.IsInstanceOf <UserSoruce>(event5.Source);
            Assert.IsInstanceOf <StickerEventMessage>(event5.Message);

            Assert.IsInstanceOf <FollowEvent>(events[6]);
            var event6 = (FollowEvent)events[6];

            Assert.IsInstanceOf <UserSoruce>(event6.Source);

            Assert.IsInstanceOf <UnfollowEvent>(events[7]);
            var event7 = (UnfollowEvent)events[7];

            Assert.IsInstanceOf <UserSoruce>(event7.Source);

            Assert.IsInstanceOf <JoinEvent>(events[8]);
            var event8 = (JoinEvent)events[8];

            Assert.IsInstanceOf <GroupSoruce>(event8.Source);

            Assert.IsInstanceOf <LeaveEvent>(events[9]);
            var event9 = (LeaveEvent)events[9];

            Assert.IsInstanceOf <GroupSoruce>(event9.Source);

            Assert.IsInstanceOf <PostbackEvent>(events[10]);
            var event10 = (PostbackEvent)events[10];

            Assert.IsInstanceOf <UserSoruce>(event10.Source);
            Assert.AreEqual("action=buyItem&itemId=123123&color=red", event10.Postback.Data);

            Assert.IsInstanceOf <BeaconEvent>(events[11]);
            var event11 = (BeaconEvent)events[11];

            Assert.IsInstanceOf <UserSoruce>(event11.Source);
            Assert.AreEqual("d41d8cd98f", event11.Beacon.Hwid);
        }