예제 #1
0
        public async Task HandleCallbackQSendNewMessage(Query query, SendCallbackData callbackData, Service service)
        {
            var nmModel = await _dbWorker.FindNmStoreAsync(query.From);

            if (nmModel == null)
            {
                return;
            }

            var userInfoQuery    = service.Oauth2Service.Userinfo.Get();
            var userinfoResponse = await userInfoQuery.ExecuteAsync();

            var userInfo = new UserInfo {
                Email = userinfoResponse.Email, Name = userinfoResponse.Name
            };
            var draft = await SaveDraftMailServer(service, nmModel, new List <IUserInfo> {
                userInfo
            });

            nmModel.DraftId = draft.Id;
            await _dbWorker.UpdateNmStoreRecordAsync(nmModel); //save draftId in database in case of exception

            var request  = service.GmailService.Users.Drafts.Send(draft, "me");
            var response = await request.ExecuteAsync();

            await _botActions.UpdateNewMailMessage(query.From, SendKeyboardState.SentSuccessful, nmModel, draft.Id);

            await _dbWorker.RemoveNmStoreAsync(nmModel);
        }
예제 #2
0
        public async Task HandleCallbackQContinueFromDraft(Query query, SendCallbackData callbackData)
        {
            var nmStore = await _dbWorker.FindNmStoreAsync(query.From);

            if (nmStore == null)
            {
                var draft = await Methods.GetDraft(query.From, callbackData.DraftId,
                                                   UsersResource.DraftsResource.GetRequest.FormatEnum.Full);

                nmStore = await _dbWorker.AddNewNmStoreAsync(query.From);

                var formattedMessage = new FormattedMessage(draft.Message);
                Methods.ComposeNmStateModel(nmStore, formattedMessage);
                var textMessage =
                    await _botActions.SpecifyNewMailMessage(query.From, SendKeyboardState.Continue, nmStore);

                nmStore.MessageId = textMessage.MessageId;
                nmStore.DraftId   = draft.Id;
                await _dbWorker.UpdateNmStoreRecordAsync(nmStore);

                await _botActions.DeleteMessage(query.From, query.Message.MessageId);
            }
            else
            {
                await _botActions.SaveAsDraftQuestionMessage(query.From, SendKeyboardState.Store);

                await _botActions.DeleteMessage(query.From, nmStore.MessageId);
            }
        }
예제 #3
0
 public override void CreateInlineKeyboard()
 {
     GeneralCallbackData = new SendCallbackData
     {
         MessageKeyboardState = State
     };
     ButtonsInitializer();
     base.InlineKeyboard = DefineInlineKeyboard();
 }
예제 #4
0
        public async Task HandleCallbackQNotSaveAsDraft(Query query, SendCallbackData callbackData)
        {
            var nmModel = await _dbWorker.FindNmStoreAsync(query.From);

            await _botActions.DeleteMessage(query.From, nmModel.MessageId);

            await _dbWorker.RemoveNmStoreAsync(nmModel);

            await _botActions.DraftSavedMessage(query.From, true);

            await _botActions.DeleteMessage(query.From, query.Message.MessageId);
        }
예제 #5
0
        public async Task HandleCallbackQAddSubject(Query query, SendCallbackData callbackData)
        {
            var model = await _dbWorker.FindNmStoreAsync(query.From);

            if (model == null)
            {
                await _botActions.SendLostInfoMessage(query.From);

                return;
            }

            await _botActions.ChangeSubjectForceReply(query.From);
        }
예제 #6
0
        public async Task HandleCallbackQContinueWithOld(Query query, SendCallbackData callbackData)
        {
            var nmModel = await _dbWorker.FindNmStoreAsync(query.From);

            await _botActions.DeleteMessage(query.From, nmModel.MessageId);

            await _botActions.DeleteMessage(query.From, query.Message.MessageId);

            var textMessage = await _botActions.SpecifyNewMailMessage(query.From, SendKeyboardState.Continue, nmModel);

            nmModel.MessageId = textMessage.MessageId;
            await _dbWorker.UpdateNmStoreRecordAsync(nmModel);
        }
예제 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="text"></param>
        /// <param name="command"></param>
        /// <param name="draftId"></param>
        /// <param name="row"></param>
        /// <param name="column"></param>
        /// <param name="forceCallbackData"></param>
        protected virtual InlineKeyboardButton InitButton(InlineKeyboardType type, string text, string command, string draftId = "",
                                                          NmStoreUnit row = default(NmStoreUnit), int column = -1, bool forceCallbackData = true)
        {
            if (!forceCallbackData)
            {
                return(base.InitButton(type, text, command));
            }
            var callbackData = new SendCallbackData(GeneralCallbackData)
            {
                Command   = command,
                MessageId = Model?.MessageId.ToString(),
                DraftId   = draftId,
                Row       = row,
                Column    = column
            };

            return(base.InitButton(type, text, callbackData));
        }
예제 #8
0
        public async Task HandleCallbackQSaveAsDraft(Service service, SendCallbackData callbackData)
        {
            var nmModel = await _dbWorker.FindNmStoreAsync(service.From);

            if (nmModel == null)
            {
                return;
            }
            var draft = await SaveDraftMailServer(service, nmModel);

            //save draftId in database in case of exception
            nmModel.DraftId = draft.Id;
            await _dbWorker.UpdateNmStoreRecordAsync(nmModel);

            await _botActions.UpdateNewMailMessage(service.From, SendKeyboardState.Drafted, nmModel, draft.Id);

            await _botActions.DraftSavedMessage(service.From);

            await _dbWorker.RemoveNmStoreAsync(nmModel);
        }
예제 #9
0
        public async Task HandleCallbackQRemoveItemNewMessage(Query query, SendCallbackData callbackData)
        {
            var nmModel = await _dbWorker.FindNmStoreAsync(query.From);

            if (nmModel == null)
            {
                return;
            }

            INmStoreModelRelation element;

            switch (callbackData.Row)
            {
            case NmStoreUnit.To:
                element = nmModel.To.ElementAt(callbackData.Column);
                var t = nmModel.To.Remove((ToModel)element);
                break;

            case NmStoreUnit.Cc:
                element = nmModel.Cc.ElementAt(callbackData.Column);
                nmModel.Cc.Remove((CcModel)element);
                break;

            case NmStoreUnit.Bcc:
                element = nmModel.Bcc.ElementAt(callbackData.Column);
                nmModel.Bcc.Remove((BccModel)element);
                break;

            case NmStoreUnit.File:
                element = nmModel.File.ElementAt(callbackData.Column);
                nmModel.File.Remove((FileModel)element);
                break;

            default:
                return;
            }
            await _dbWorker.UpdateNmStoreRecordAsync(nmModel);

            await _botActions.UpdateNewMailMessage(query.From, SendKeyboardState.Continue, nmModel);
        }