예제 #1
0
        private async Task AskingInputCommentAsync(ContextState contextState, MessageEvent ev)
        {
            bool isValidMessage(out TextEventMessage textEventMessage)
            {
                if (ev.Message.Type != EventMessageType.Text)
                {
                    textEventMessage = null;
                    return(false);
                }

                textEventMessage = (TextEventMessage)ev.Message;
                return(LineMessages.IsYesOrNo(textEventMessage.Text));
            }

            if (!isValidMessage(out var text))
            {
                await contextState.Client.ReplyMessageAsync(ev.ReplyToken, LineMessages.GetConfirmMessage(LineMessages.AskCommentMessage));

                SetNextCallMethod(nameof(AskingInputCommentAsync));
                return;
            }

            if (LineMessages.IsYes(text.Text))
            {
                await contextState.Client.ReplyMessageAsync(ev.ReplyToken, LineMessages.GetInputCommentMessage());

                SetNextCallMethod(nameof(InputCommentAsync));
                return;
            }
            else
            {
                await FinishInputAsync(contextState, ev);
            }
        }
예제 #2
0
        protected override async Task ExecuteImplAsync(ContextState context, MessageEvent messageEvent)
        {
            var textMessage = (TextEventMessage)messageEvent.Message;

            context.Settings.YourName = textMessage.Text.Trim();
            await context.Client.ReplyMessageAsync(messageEvent.ReplyToken, LineMessages.GetFinishGreetingMessage(context.Settings.YourName));

            context.Settings.ChatStatus = ChatStatusType.General;
        }
예제 #3
0
        private async Task FinishInputAsync(ContextState contextState, MessageEvent ev, LocationLog locationLog = null)
        {
            locationLog = locationLog ?? await LocationLog.GetLocationLogByUserIdAsync(contextState.StateStoreTable, ev.Source.UserId);

            if (locationLog == null)
            {
                await ReplyUnknownMessageAsync(contextState, ev);

                return;
            }

            await contextState.Client.ReplyMessageAsync(ev.ReplyToken, LineMessages.GetFinishInputMessage(contextState.Settings, locationLog));

            SetNextCallMethod(nameof(InitializeAsync));
        }
예제 #4
0
        private async Task ExecuteLocationMessageAsync(ContextState contextState, MessageEvent messageEvent)
        {
            var locationMessage = (LocationEventMessage)messageEvent.Message;
            var locationLog     = new LocationLog
            {
                RowKey    = messageEvent.Source.UserId,
                Latitude  = locationMessage.Latitude,
                Longitude = locationMessage.Longitude,
                Name      = locationMessage.Title,
                Address   = locationMessage.Address,
            };

            await contextState.StateStoreTable.ExecuteAsync(TableOperation.InsertOrReplace(locationLog));

            await contextState.Client.ReplyMessageAsync(messageEvent.ReplyToken, LineMessages.GetConfirmMessage(LineMessages.AskCommentMessage));

            SetNextCallMethod(nameof(AskingInputCommentAsync));
        }
예제 #5
0
        protected override async Task ExecuteImplAsync(
            ContextState contextState,
            MessageEvent messageEvent)
        {
            var m = (TextEventMessage)messageEvent.Message;

            if (m.Text == "その他")
            {
                await contextState.Client.ReplyMessageAsync(messageEvent.ReplyToken, LineMessages.GetManualInputMessage());

                contextState.Settings.ChatStatus = ChatStatusType.ManualInputYourName;
                return;
            }

            contextState.Settings.YourName = m.Text.Trim();
            await contextState.Client.ReplyMessageAsync(messageEvent.ReplyToken, LineMessages.GetFinishGreetingMessage(contextState.Settings.YourName));

            contextState.Settings.ChatStatus = ChatStatusType.General;
        }
예제 #6
0
        private async Task ExecuteTextMessageAsync(ContextState contextState, MessageEvent messageEvent)
        {
            var text = ((TextEventMessage)messageEvent.Message).Text;

            switch (LineMessages.DetectIntent(text))
            {
            case IntentType.ChangeName:
                await contextState.Client.ReplyMessageAsync(messageEvent.ReplyToken, LineMessages.GetAskYourNameMessage());

                contextState.Settings.ChatStatus = ChatStatusType.AskingYourName;
                break;

            case IntentType.ShowHistory:
                await ShowHistoryAsync(contextState, messageEvent);

                break;

            default:
                throw new InvalidOperationException($"Unknown intent: {text}");
            }
        }
예제 #7
0
 private async Task ShowHistoryAsync(ContextState contextState, MessageEvent messageEvent)
 {
     var histories = JsonConvert.DeserializeObject <List <DateTimeOffset> >(contextState.Settings.HistoryJson ?? "[]");
     await contextState.Client.ReplyMessageAsync(messageEvent.ReplyToken, LineMessages.GetHistoriesMessage(histories));
 }
예제 #8
0
        private async Task ReplyUnknownMessageAsync(ContextState contextState, MessageEvent messageEvent)
        {
            await contextState.Client.ReplyMessageAsync(messageEvent.ReplyToken, LineMessages.GetReplyMessageForUnknownMessageType());

            SetNextCallMethod(nameof(InitializeAsync));
        }
예제 #9
0
        protected override async Task ExecuteImplAsync(ContextState contextState, ReplyableEvent ev)
        {
            await contextState.Client.ReplyMessageAsync(ev.ReplyToken, LineMessages.GetGreetingMessage());

            contextState.Settings.ChatStatus = ChatStatusType.General;
        }