private CarouselMessage GetCarouselMsg(string strConn, LineEvents lineEvent, LineChannel channelObj)
        {
            var actions = new NewLineMessageApi.LineActions.DatetimeAction("統計資料日期", DateTimePickerType.date);

            using (var conn = new SQLiteConnection(strConn))
            {
                conn.Open();
                string sql     = "select SpeakDate from LineUserSpeak order by SpeakDate desc   ";
                var    endDate = conn.QueryFirstOrDefault <DateTime>(sql);
                sql = "select SpeakDate from LineUserSpeak order by SpeakDate  ";
                var beginDate = conn.QueryFirstOrDefault <DateTime>(sql);
                actions.min   = beginDate.ToString("yyyy-MM-dd");
                actions.max   = endDate.ToString("yyyy-MM-dd");
                actions.label = "要查看的日期";
            }
            var lstAction = new List <NewLineMessageApi.LineActions.LineActionsBase>()
            {
                actions
            };
            var col = new NewLineMessageApi.TemplatesMsg.ColumnObj.CarouselColumn("選擇完日期後送出", lstAction);

            var lstColumns = new List <NewLineMessageApi.TemplatesMsg.ColumnObj.CarouselColumn>()
            {
                col
            };

            return(new CarouselMessage(lstColumns));
        }
Beispiel #2
0
        public LineUserSpeak(LineEvents lineEvent, LineChannel channelObj)
        {
            UserProfile userData = new UserProfile();

            switch (lineEvent.source.type)
            {
            case SourceType.user:
                userData = channelObj.GetUserProfile(lineEvent.source.userId);
                break;

            case SourceType.group:
                userData     = channelObj.GetGroupOrRoomUserProfile(lineEvent.source.userId, lineEvent.source.groupId, SourceType.group);
                this.Groupid = lineEvent.source.groupId;
                break;

            case SourceType.room:
                userData     = channelObj.GetGroupOrRoomUserProfile(lineEvent.source.userId, lineEvent.source.roomId, SourceType.room);
                this.Groupid = lineEvent.source.roomId;
                break;
            }
            this.DisplayName = userData.displayName;
            this.UserId      = userData.userId;
            if (lineEvent.message != null)
            {
                this.MessageType = lineEvent.message.type.ToString();
            }
            this.SpeakDate = DateTime.UtcNow.AddHours(8);
        }
Beispiel #3
0
        public IHttpActionResult Post()
        {
            try
            {
                //驗證是否為LINE過來的訊息
                if (!LineChannel.VaridateSignature(Request, "輸入你的 Channel Secret"))
                {
                    return(BadRequest());
                }

                //建立channel物件
                LineChannel channel = new LineChannel("輸入你的 Channel Access Token");

                //取得LINE POST過來的JSON資料
                var rawdata = Request.Content.ReadAsStringAsync().Result;
                //序列化成物件
                LineMessageApiSDK.LineReceivedObject.LineReceivedMsg ReceivedObject = JsonConvert.DeserializeObject <LineMessageApiSDK.LineReceivedObject.LineReceivedMsg>(rawdata);
                //取得event物件
                var eventObj = ReceivedObject.events[0];

                LineMessageApiSDK.LineReceivedObject.UserProfile userprofile = null;
                string toid = string.Empty;
                //可以判斷傳送訊息者的類型
                switch (eventObj.source.type)
                {
                case SourceType.user:
                    //傳送訊息者為一般使用者時 可以利用userid取得 使用者資料
                    userprofile = channel.Get_User_Data(eventObj.source.userId);
                    toid        = eventObj.source.userId;
                    break;

                case SourceType.group:

                    toid = eventObj.source.groupId;
                    break;

                case SourceType.room:
                    toid = eventObj.source.roomId;
                    break;
                }


                //可以判斷事件類型
                switch (eventObj.type)
                {
                case EventType.message:
                    //使用者傳送訊息

                    //取得訊息類型
                    switch (eventObj.message.type)
                    {
                    case MessageType.text:
                        //被動回復文字訊息
                        channel.SendReplyMessage(eventObj.replyToken, new LineMessageApiSDK.LineMessageObject.TextMessage("你說:" + eventObj.message.text));
                        //主動推送訊息
                        if (userprofile == null)
                        {
                            channel.SendPushMessage(toid, new LineMessageApiSDK.LineMessageObject.TextMessage("第一次主動推送"), new LineMessageApiSDK.LineMessageObject.TextMessage("第二次主動推送"));
                        }
                        else
                        {
                            channel.SendPushMessage(userprofile.userId, new LineMessageApiSDK.LineMessageObject.TextMessage($"Hello {userprofile.displayName} 你是不是說{eventObj.message.text}"));
                            //推送貼圖
                            channel.SendPushMessage(userprofile.userId, new LineMessageApiSDK.LineMessageObject.StickerMessage(1, 1));
                        }
                        break;

                    case MessageType.image:
                        break;

                    case MessageType.video:
                        break;

                    case MessageType.audio:
                        break;

                    case MessageType.file:
                        break;

                    case MessageType.location:
                        break;

                    case MessageType.sticker:
                        break;

                    default:
                        break;
                    }


                    break;

                case EventType.follow:
                    break;

                case EventType.unfollow:
                    break;

                case EventType.join:
                    break;

                case EventType.leave:
                    break;

                case EventType.postback:
                    break;

                case EventType.beacon:
                    break;

                default:
                    break;
                }


                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public IHttpActionResult Post()
        {
            LineChannel ChannelObj = null;
            LineEvents  LineEvent  = null;

            if (ChannelObj == null)
            {
                if (LineChannel.VaridateSignature(Request, Channel_secret))
                {
                    ChannelObj = new LineChannel(Channel_Access_Token);
                    LineEvent  = JsonConvert.DeserializeObject <LineReceivedMsg>(Request.Content.ReadAsStringAsync().Result).events.FirstOrDefault();
                }
            }

            if (ChannelObj == null)
            {
                return(BadRequest());
            }

            if (LineEvent != null)
            {
                Models.LineUserSpeak dbModel = new Models.LineUserSpeak(LineEvent, ChannelObj);
                switch (LineEvent.type)
                {
                case EventType.message:

                    if (LineEvent.message.type == MessageType.text)
                    {
                        string strLineMsg = LineEvent.message.text;
                        if (strLineMsg == "$統計")
                        {
                            /*GET DATA*/
                            string msg = dbModel.GetReportsDefault(strConn);
                            ChannelObj.SendReplyMessage(LineEvent.replyToken, new NewLineMessageApi.MessageObj.TextMessage(msg));
                            dbModel = null;
                        }
                        else if (strLineMsg == "$功能" || strLineMsg.ToLower() == "$menu")
                        {
                            NewLineMessageApi.TemplatesMsg.CarouselMessage msgObj = GetCarouselMsg(strConn, LineEvent, ChannelObj);
                            ChannelObj.SendReplyMessage(LineEvent.replyToken, new NewLineMessageApi.MessageObj.TemplateMessage()
                            {
                                altText = "我要查資料", template = msgObj
                            });
                            dbModel = null;
                        }
                    }
                    if (dbModel != null)
                    {
                        /*save*/
                        dbModel.Save(strConn);
                    }
                    break;

                case EventType.follow:
                    break;

                case EventType.unfollow:
                    break;

                case EventType.join:
                    switch (LineEvent.source.type)
                    {
                    case SourceType.user:
                        break;

                    case SourceType.group:
                        if (LineEvent.source.groupId != "123")
                        {
                            ChannelObj.Leave(LineEvent.source.groupId, SourceType.group);
                        }
                        break;

                    case SourceType.room:
                        ChannelObj.Leave(LineEvent.source.roomId, SourceType.room);
                        break;

                    default:
                        break;
                    }
                    break;

                case EventType.leave:
                    break;

                case EventType.postback:
                    if (LineEvent.postback.data == "統計資料日期")
                    {
                        if (LineEvent.postback.Params != null)
                        {
                            var time = LineEvent.postback.Params.date;
                            if (time.HasValue)
                            {
                                ChannelObj.SendReplyMessage(LineEvent.replyToken, new NewLineMessageApi.MessageObj.TextMessage(dbModel.GetReportsDefault(strConn, time.Value)));
                            }
                        }
                    }

                    break;

                case EventType.beacon:
                    break;

                default:
                    break;
                }
            }
            return(Ok());
        }