use crate::{errors::NoUserInfo, utils::validate_field, MainDialogue}; use entity::prelude::*; use sea_orm::prelude::*; use teloxide::{adaptors::Throttle, prelude::*}; /// Validates a new account #[inline] async fn check_new_account_name( bot: &Throttle, msg: &Message, db: &DatabaseConnection, name: &str, ) -> crate::Result> { let user_id = msg.from().ok_or(NoUserInfo)?.id.0; if Account::exists(user_id, name, db).await? { let msg = bot .send_message(msg.chat.id, "Account already exists") .await?; return Ok(Some(msg)); } if !validate_field(name) { let msg = bot .send_message(msg.chat.id, "Invalid account name. Try again") .await?; return Ok(Some(msg)); } Ok(None) } /// Handles GetNewName state pub async fn get_new_name( bot: Throttle, msg: Message, db: DatabaseConnection, dialogue: MainDialogue, next: super::PackagedHandler, ) -> crate::Result<()> { super::generic::generic( bot, msg, db, dialogue, |bot, msg, db, name| Box::pin(check_new_account_name(bot, msg, db, name)), "Couldn't get the text of the message. Send the name of the new account again", next, ) .await }