예제 #1
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.GET_ATTACHMENT_COMMAND"/>.
        /// Downloads from gmail server attachment defined in <paramref name="callbackData"/> to temp folder and send in to telegram recipient by
        /// <see cref="BotActions.SendAttachmentToChat"/> method.
        /// </summary>
        /// <param name="callbackData"></param>
        /// <param name="service"></param>
        /// <returns></returns>
        public async Task HandleCallbackQGetAttachment(Service service, GetCallbackData callbackData)
        {
            var formattedMessage = await Methods.GetMessage(service, callbackData.MessageId);

            var attachmentInfo = new List <AttachmentInfo>(formattedMessage.Attachments)[callbackData.AttachmentIndex];
            var attachment     = await Methods.GetAttachment(service, callbackData.MessageId, attachmentInfo.Id);

            if (attachment.Length > _botSettings.MaxAttachmentSizeBytes)
            {
                await _botActions.SendErrorAboutMaxAttachmentSizeToChat(service.From, attachmentInfo.FileName);
            }

            string randomFolder   = Tools.RandomString(8);
            var    tempDirName    = Path.Combine(_botSettings.AttachmentsTempFolder, randomFolder);
            var    attachFullName = Path.Combine(tempDirName, attachmentInfo.FileName);

            try
            {
                Methods.CreateDirectory(tempDirName);
                await Methods.WriteAttachmentToTemp(attachFullName, attachment);

                await _botActions.SendAttachmentToChat(service.From, attachFullName, attachmentInfo.FileName);
            }
            finally
            {
                var dInfo = new DirectoryInfo(tempDirName);
                if (dInfo.Exists)
                {
                    await dInfo.DeleteAsync(true);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.IGNORE_COMMAND"/>.
        /// Adds senders email address to db.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="service"></param>
        /// <param name="callbackData"></param>
        /// <returns></returns>
        public async Task HandleCallbackQIgnore(Query query, Service service, GetCallbackData callbackData)
        {
            var formattedMessage = await Methods.GetMessage(service, callbackData.MessageId);

            await _dbWorker.AddToIgnoreListAsync(query.From, formattedMessage.From.Email);

            await
            _botActions.UpdateMessage(query.From, query.Message.MessageId, callbackData.MessageKeyboardState,
                                      formattedMessage, callbackData.Page, true);
        }
예제 #3
0
 public override void CreateInlineKeyboard()
 {
     GeneralCallbackData = new GetCallbackData
     {
         MessageId            = Message.MessageId,
         Page                 = Page,
         MessageKeyboardState = State
     };
     ButtonsInitializer();
     base.InlineKeyboard = DefineInlineKeyboard();
 }
예제 #4
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.TO_SPAM_COMMAND"/>.
        /// This method adds "SPAM" label to message and calls <see cref="BotActions.UpdateMessage"/> method for message with <paramref name="callbackData"/>.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="callbackData"></param>
        /// <returns></returns>
        public async Task HandleCallbackQToSpam(Query query, GetCallbackData callbackData)
        {
            var formattedMessage =
                await
                Methods.ModifyMessageLabelsAsync(ModifyLabelsAction.Add, query.From, callbackData.MessageId, null, "SPAM");

            var isIgnored = await _dbWorker.IsPresentInIgnoreListAsync(query.From, formattedMessage.From.Email);

            await
            _botActions.UpdateMessage(query.From, query.Message.MessageId, callbackData.MessageKeyboardState,
                                      formattedMessage, callbackData.Page, isIgnored);
        }
예제 #5
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.NEXTPAGE_COMMAND"/>.
        /// This method calls <see cref="BotActions.UpdateMessage"/> method for message with <paramref name="callbackData"/> where Page property decreased by 1.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="service"></param>
        /// <param name="callbackData"></param>
        /// <returns></returns>
        public async Task HandleCallbackQPrevPage(Query query, Service service, GetCallbackData callbackData)
        {
            var formattedMessage = await Methods.GetMessage(service, callbackData.MessageId);

            if (callbackData.Page < 2)
            {
                throw new InvalidOperationException("Execution of this method is not permissible in this situation");
            }
            var isIgnored = await _dbWorker.IsPresentInIgnoreListAsync(query.From, formattedMessage.From.Email);

            var newPage = callbackData.Page - 1;
            await
            _botActions.UpdateMessage(query.From, query.Message.MessageId, callbackData.MessageKeyboardState,
                                      formattedMessage, newPage, isIgnored);
        }
예제 #6
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.HIDE_ACTIONS_COMMAND"/>.
        /// This method calls <see cref="BotActions.UpdateMessage"/> method for message with <paramref name="callbackData"/>
        /// which <see cref="GetCallbackData.MessageKeyboardState"/> equals <see langword="MessageKeyboardState.Minimized"/> or
        /// <see langword="MessageKeyboardState.Maximized"/> which updates it on the set <see cref="GetCallbackData.Page"/>.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="service"></param>
        /// <param name="callbackData"></param>
        /// <returns></returns>
        public async Task HandleCallbackQHideActions(Query query, Service service, GetCallbackData callbackData)
        {
            if (callbackData.MessageKeyboardState.EqualsAny(GetKeyboardState.Minimized, GetKeyboardState.Maximized))
            {
                throw new ArgumentException("Must be a MinimizedActions or MaximizedActions state.",
                                            nameof(callbackData.MessageKeyboardState));
            }

            var formattedMessage = await Methods.GetMessage(service, callbackData.MessageId);

            var isIgnored = await _dbWorker.IsPresentInIgnoreListAsync(query.From, formattedMessage.From.Email);

            var newState = callbackData.MessageKeyboardState == GetKeyboardState.MinimizedActions
                ? GetKeyboardState.Minimized
                : GetKeyboardState.Maximized;
            await
            _botActions.UpdateMessage(query.From, query.Message.MessageId, newState, formattedMessage,
                                      callbackData.Page, isIgnored);
        }
예제 #7
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.EXPAND_ACTIONS_COMMAND"/>.
        /// This method calls <see cref="BotActions.UpdateMessage"/> method for message with <paramref name="callbackData"/>
        /// which <see cref="GetCallbackData.MessageKeyboardState"/> equals <see langword="MessageKeyboardState.MinimizedActions"/> or
        /// <see langword="MessageKeyboardState.MaximizedActions"/> which updates it on the set <see cref="GetCallbackData.Page"/>.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="callbackData"></param>
        /// <returns></returns>
        public async Task HandleCallbackQExpandActions(Query query, GetCallbackData callbackData)
        {
            if (callbackData.MessageKeyboardState.EqualsAny(GetKeyboardState.MinimizedActions,
                                                            GetKeyboardState.MaximizedActions))
            {
                throw new ArgumentException("Must be a Minimized or Maximized state.",
                                            nameof(callbackData.MessageKeyboardState));
            }

            var formattedMessage =
                await
                Methods.ModifyMessageLabelsAsync(ModifyLabelsAction.Remove, query.From, callbackData.MessageId, null,
                                                 "UNREAD");

            var isIgnored = await _dbWorker.IsPresentInIgnoreListAsync(query.From, formattedMessage.From.Email);

            var newState = callbackData.MessageKeyboardState == GetKeyboardState.Minimized
                ? GetKeyboardState.MinimizedActions
                : GetKeyboardState.MaximizedActions;
            await
            _botActions.UpdateMessage(query.From, query.Message.MessageId, newState, formattedMessage,
                                      callbackData.Page, isIgnored);
        }
예제 #8
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.HIDE_ATTACHMENTS_COMMAND"/>.
        /// This method calls <see cref="BotActions.UpdateMessage"/> method for message with <paramref name="callbackData"/> where <see cref="GetCallbackData.MessageKeyboardState"/>
        /// equals <see cref="GetKeyboardState.Minimized"/> (restores the original state).
        /// </summary>
        /// <param name="query"></param>
        /// <param name="service"></param>
        /// <param name="callbackData"></param>
        /// <returns></returns>
        public async Task HandleCallbackQHideAttachments(Query query, Service service, GetCallbackData callbackData)
        {
            var formattedMessage = await Methods.GetMessage(service, callbackData.MessageId);

            var newState = GetKeyboardState.Minimized;
            await _botActions.UpdateMessage(query.From, query.Message.MessageId, newState, formattedMessage);
        }
예제 #9
0
        /// <summary>
        /// Handles <see cref="Query"/> <see cref="CallbackCommand.SHOW_ATTACHMENTS_COMMAND"/>.
        /// This method calls <see cref="BotActions.SendAttachmentsListMessage"/> method for message with <paramref name="callbackData"/> where <see cref="GetCallbackData.MessageKeyboardState"/>
        /// equals <see cref="GetKeyboardState.Attachments"/>.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="callbackData"></param>
        /// <returns></returns>
        public async Task HandleCallbackQShowAttachments(Query query, Service service, GetCallbackData callbackData)
        {
            var message = await Methods.GetMessage(service, callbackData.MessageId);

            var newState = GetKeyboardState.Attachments;
            await _botActions.SendAttachmentsListMessage(query.From, query.Message.MessageId, message, newState);
        }