From a2477424a5bc8e943579c67e0745838235a2875a Mon Sep 17 00:00:00 2001 From: StNicolay Date: Mon, 15 May 2023 18:14:21 +0300 Subject: [PATCH] Updated generic handler to handle the lack of the text of the message --- src/errors.rs | 4 ---- src/handlers/state/generic.rs | 14 +++++++++++--- src/handlers/state/get_account_name.rs | 7 ++----- src/handlers/state/get_login.rs | 7 ++----- src/handlers/state/get_master_pass.rs | 4 +--- src/handlers/state/get_password.rs | 7 ++----- 6 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/errors.rs b/src/errors.rs index 3b34c3f..20cb2af 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -2,10 +2,6 @@ #[error("No user info found")] pub struct NoUserInfo; -#[derive(thiserror::Error, Debug)] -#[error("Message text not found")] -pub struct NoMessageText; - #[derive(thiserror::Error, Debug)] #[error("Handler was already used")] pub struct HandlerUsed; diff --git a/src/handlers/state/generic.rs b/src/handlers/state/generic.rs index 3d043f2..6f0bf44 100644 --- a/src/handlers/state/generic.rs +++ b/src/handlers/state/generic.rs @@ -9,7 +9,6 @@ use teloxide::{adaptors::Throttle, prelude::*}; /// A generic state handler. It checks for "/cancel" messages and runs the provided validation function pub async fn generic( bot: Throttle, - text: String, msg: Message, db: DatabaseConnection, dialogue: crate::handlers::MainDialogue, @@ -27,7 +26,15 @@ where let handler = next.lock().await.take(); let previous = handler.as_ref().and_then(|h| h.previous.as_ref()); delete_optional(&bot, previous).await; - if text.trim_end() == "/cancel" { + let text = match msg.text() { + Some(text) => text.trim_end(), + None => { + bot.send_message(msg.chat.id, "Couldn't get the text of the message") + .await?; + return Ok(()); + } + }; + if text == "/cancel" { dialogue.exit().await?; bot.send_message(msg.chat.id, "Successfully cancelled") .reply_markup(deletion_markup()) @@ -41,7 +48,7 @@ where return Err(HandlerUsed.into()); } }; - match check(&bot, &msg, &db, &text).await { + match check(&bot, &msg, &db, text).await { Ok(true) => (), Ok(false) => { dialogue.exit().await?; @@ -52,6 +59,7 @@ where return Err(err); } }; + let text = text.to_owned(); if let Err(err) = (handler.handler)(bot, msg, db, dialogue.clone(), text).await { let _ = dialogue.exit().await; return Err(err); diff --git a/src/handlers/state/get_account_name.rs b/src/handlers/state/get_account_name.rs index aff5c92..1e271d2 100644 --- a/src/handlers/state/get_account_name.rs +++ b/src/handlers/state/get_account_name.rs @@ -1,9 +1,8 @@ use sea_orm::prelude::*; use teloxide::{adaptors::Throttle, prelude::*}; -use crate::{ - errors::NoMessageText, - handlers::{markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler}, +use crate::handlers::{ + markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler, }; /// Function to handle GetAccountName state @@ -14,10 +13,8 @@ pub async fn get_account_name( dialogue: MainDialogue, next: PackagedHandler, ) -> crate::Result<()> { - let text = msg.text().ok_or(NoMessageText)?.trim().to_owned(); super::generic::generic( bot, - text, msg, db, dialogue, diff --git a/src/handlers/state/get_login.rs b/src/handlers/state/get_login.rs index e55b07a..2e2e538 100644 --- a/src/handlers/state/get_login.rs +++ b/src/handlers/state/get_login.rs @@ -1,9 +1,8 @@ use sea_orm::prelude::*; use teloxide::{adaptors::Throttle, prelude::*}; -use crate::{ - errors::NoMessageText, - handlers::{markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler}, +use crate::handlers::{ + markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler, }; /// Function to handle GetLogin state @@ -14,10 +13,8 @@ pub async fn get_login( dialogue: MainDialogue, next: PackagedHandler, ) -> crate::Result<()> { - let text = msg.text().ok_or(NoMessageText)?.trim().to_owned(); super::generic::generic( bot, - text, msg, db, dialogue, diff --git a/src/handlers/state/get_master_pass.rs b/src/handlers/state/get_master_pass.rs index 5415856..bfcaf49 100644 --- a/src/handlers/state/get_master_pass.rs +++ b/src/handlers/state/get_master_pass.rs @@ -1,6 +1,6 @@ use crate::{ entity::prelude::MasterPass, - errors::{NoMessageText, NoUserInfo}, + errors::{NoUserInfo}, handlers::{markups::deletion_markup, MainDialogue, PackagedHandler}, }; use sea_orm::prelude::*; @@ -41,10 +41,8 @@ pub async fn get_master_pass( dialogue: MainDialogue, next: PackagedHandler, ) -> crate::Result<()> { - let text = msg.text().ok_or(NoMessageText)?.trim().to_owned(); super::generic::generic( bot, - text, msg, db, dialogue, diff --git a/src/handlers/state/get_password.rs b/src/handlers/state/get_password.rs index 708908b..bd9c34a 100644 --- a/src/handlers/state/get_password.rs +++ b/src/handlers/state/get_password.rs @@ -1,9 +1,8 @@ use sea_orm::prelude::*; use teloxide::{adaptors::Throttle, prelude::*}; -use crate::{ - errors::NoMessageText, - handlers::{markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler}, +use crate::handlers::{ + markups::deletion_markup, utils::validate_field, MainDialogue, PackagedHandler, }; /// Function to handle GetPassword state @@ -14,10 +13,8 @@ pub async fn get_password( dialogue: MainDialogue, next: PackagedHandler, ) -> crate::Result<()> { - let text = msg.text().ok_or(NoMessageText)?.trim().to_owned(); super::generic::generic( bot, - text, msg, db, dialogue,