Added delete command and fixed memory deletion for /add_account
This commit is contained in:
		@@ -38,7 +38,8 @@ async fn get_password(
 | 
				
			|||||||
    password: String,
 | 
					    password: String,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
					    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
				
			||||||
    bot.send_message(msg.chat.id, "Send master password")
 | 
					    let previous = bot
 | 
				
			||||||
 | 
					        .send_message(msg.chat.id, "Send master password")
 | 
				
			||||||
        .await?;
 | 
					        .await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetMasterPass(package_handler(
 | 
					        .update(State::GetMasterPass(package_handler(
 | 
				
			||||||
@@ -70,7 +71,7 @@ async fn get_login(
 | 
				
			|||||||
    login: String,
 | 
					    login: String,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
					    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
				
			||||||
    bot.send_message(msg.chat.id, "Send password").await?;
 | 
					    let previous = bot.send_message(msg.chat.id, "Send password").await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetPassword(package_handler(
 | 
					        .update(State::GetPassword(package_handler(
 | 
				
			||||||
            move |bot, msg, db, dialogue, password| {
 | 
					            move |bot, msg, db, dialogue, password| {
 | 
				
			||||||
@@ -90,7 +91,7 @@ async fn get_account_name(
 | 
				
			|||||||
    name: String,
 | 
					    name: String,
 | 
				
			||||||
) -> crate::Result<()> {
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
					    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
				
			||||||
    bot.send_message(msg.chat.id, "Send login").await?;
 | 
					    let previous = bot.send_message(msg.chat.id, "Send login").await?;
 | 
				
			||||||
    dialogue
 | 
					    dialogue
 | 
				
			||||||
        .update(State::GetLogin(package_handler(
 | 
					        .update(State::GetLogin(package_handler(
 | 
				
			||||||
            move |bot, msg, db, dialogue, login| {
 | 
					            move |bot, msg, db, dialogue, login| {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										67
									
								
								src/handlers/commands/delete.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								src/handlers/commands/delete.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					use crate::{
 | 
				
			||||||
 | 
					    entity::prelude::Account,
 | 
				
			||||||
 | 
					    handlers::{markups, utils::package_handler, MainDialogue, State},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					use sea_orm::prelude::*;
 | 
				
			||||||
 | 
					use teloxide::{adaptors::Throttle, prelude::*};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async fn get_master_pass(
 | 
				
			||||||
 | 
					    bot: Throttle<Bot>,
 | 
				
			||||||
 | 
					    msg: Message,
 | 
				
			||||||
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
 | 
					    previous: Message,
 | 
				
			||||||
 | 
					    name: String,
 | 
				
			||||||
 | 
					    _: String,
 | 
				
			||||||
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
 | 
					    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
				
			||||||
 | 
					    dialogue.exit().await?;
 | 
				
			||||||
 | 
					    let user_id = msg.from().unwrap().id.0;
 | 
				
			||||||
 | 
					    Account::delete_by_id((user_id, name)).exec(&db).await?;
 | 
				
			||||||
 | 
					    bot.send_message(msg.chat.id, "The account is successfully deleted")
 | 
				
			||||||
 | 
					        .await?;
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async fn get_account_name(
 | 
				
			||||||
 | 
					    bot: Throttle<Bot>,
 | 
				
			||||||
 | 
					    msg: Message,
 | 
				
			||||||
 | 
					    _: DatabaseConnection,
 | 
				
			||||||
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
 | 
					    previous: Message,
 | 
				
			||||||
 | 
					    name: String,
 | 
				
			||||||
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
 | 
					    let _ = bot.delete_message(previous.chat.id, previous.id).await;
 | 
				
			||||||
 | 
					    let previous = bot
 | 
				
			||||||
 | 
					        .send_message(msg.chat.id, "Send master password. Once you send correct master password the account is unrecoverable")
 | 
				
			||||||
 | 
					        .await?;
 | 
				
			||||||
 | 
					    dialogue
 | 
				
			||||||
 | 
					        .update(State::GetMasterPass(package_handler(
 | 
				
			||||||
 | 
					            move |bot, msg, db, dialogue, master_pass| {
 | 
				
			||||||
 | 
					                get_master_pass(bot, msg, db, dialogue, previous, name, master_pass)
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					        )))
 | 
				
			||||||
 | 
					        .await?;
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub async fn delete(
 | 
				
			||||||
 | 
					    bot: Throttle<Bot>,
 | 
				
			||||||
 | 
					    msg: Message,
 | 
				
			||||||
 | 
					    dialogue: MainDialogue,
 | 
				
			||||||
 | 
					    db: DatabaseConnection,
 | 
				
			||||||
 | 
					) -> crate::Result<()> {
 | 
				
			||||||
 | 
					    let markup = markups::account_markup(msg.from().unwrap().id.0, &db).await?;
 | 
				
			||||||
 | 
					    let previous = bot
 | 
				
			||||||
 | 
					        .send_message(msg.chat.id, "Send account name")
 | 
				
			||||||
 | 
					        .reply_markup(markup)
 | 
				
			||||||
 | 
					        .await?;
 | 
				
			||||||
 | 
					    dialogue
 | 
				
			||||||
 | 
					        .update(State::GetAccountName(package_handler(
 | 
				
			||||||
 | 
					            move |bot, msg, db, dialogue, name| {
 | 
				
			||||||
 | 
					                get_account_name(bot, msg, db, dialogue, previous, name)
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					        )))
 | 
				
			||||||
 | 
					        .await?;
 | 
				
			||||||
 | 
					    Ok(())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
mod add_account;
 | 
					mod add_account;
 | 
				
			||||||
mod default;
 | 
					mod default;
 | 
				
			||||||
 | 
					mod delete;
 | 
				
			||||||
mod get_account;
 | 
					mod get_account;
 | 
				
			||||||
mod get_accounts;
 | 
					mod get_accounts;
 | 
				
			||||||
mod help;
 | 
					mod help;
 | 
				
			||||||
@@ -7,6 +8,7 @@ mod set_master_pass;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
pub use add_account::add_account;
 | 
					pub use add_account::add_account;
 | 
				
			||||||
pub use default::default;
 | 
					pub use default::default;
 | 
				
			||||||
 | 
					pub use delete::delete;
 | 
				
			||||||
pub use get_account::get_account;
 | 
					pub use get_account::get_account;
 | 
				
			||||||
pub use get_accounts::get_accounts;
 | 
					pub use get_accounts::get_accounts;
 | 
				
			||||||
pub use help::help;
 | 
					pub use help::help;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,8 @@ enum Command {
 | 
				
			|||||||
    GetAccounts,
 | 
					    GetAccounts,
 | 
				
			||||||
    #[command()]
 | 
					    #[command()]
 | 
				
			||||||
    SetMasterPass,
 | 
					    SetMasterPass,
 | 
				
			||||||
 | 
					    #[command()]
 | 
				
			||||||
 | 
					    Delete,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type MainDialogue = Dialogue<State, InMemStorage<State>>;
 | 
					type MainDialogue = Dialogue<State, InMemStorage<State>>;
 | 
				
			||||||
@@ -70,7 +72,8 @@ pub fn get_dispatcher(
 | 
				
			|||||||
        .branch(case![Command::AddAccount].endpoint(commands::add_account))
 | 
					        .branch(case![Command::AddAccount].endpoint(commands::add_account))
 | 
				
			||||||
        .branch(case![Command::GetAccount].endpoint(commands::get_account))
 | 
					        .branch(case![Command::GetAccount].endpoint(commands::get_account))
 | 
				
			||||||
        .branch(case![Command::GetAccounts].endpoint(commands::get_accounts))
 | 
					        .branch(case![Command::GetAccounts].endpoint(commands::get_accounts))
 | 
				
			||||||
        .branch(case![Command::SetMasterPass].endpoint(commands::set_master_pass));
 | 
					        .branch(case![Command::SetMasterPass].endpoint(commands::set_master_pass))
 | 
				
			||||||
 | 
					        .branch(case![Command::Delete].endpoint(commands::delete));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let message_handler = Update::filter_message()
 | 
					    let message_handler = Update::filter_message()
 | 
				
			||||||
        .map_async(utils::delete_message)
 | 
					        .map_async(utils::delete_message)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user