/// <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); } } }
/// <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); }
public override void CreateInlineKeyboard() { GeneralCallbackData = new GetCallbackData { MessageId = Message.MessageId, Page = Page, MessageKeyboardState = State }; ButtonsInitializer(); base.InlineKeyboard = DefineInlineKeyboard(); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }