Moved dispatching into a sepparate module

This commit is contained in:
2024-05-07 12:29:13 +03:00
parent 5871943c01
commit 913d90f077
9 changed files with 119 additions and 119 deletions
+80
View File
@@ -0,0 +1,80 @@
mod default;
mod delete_mesage_handler;
mod filter_user_info;
mod master_password_check;
use crate::{
callbacks::{self, CallbackCommand},
commands::{self, Command},
errors, locales,
prelude::*,
state::{self, State},
};
use teloxide::{
adaptors::throttle::Limits,
dispatching::{dialogue::InMemStorage, filter_command, DefaultKey},
dptree::{case, deps},
};
pub fn get_dispatcher(
token: String,
db: Pool,
) -> Dispatcher<Throttle<Bot>, crate::Error, DefaultKey> {
let bot = Bot::new(token).throttle(Limits::default());
let command_handler = filter_command::<Command, _>()
.branch(case![Command::Start].endpoint(commands::start))
.branch(case![Command::Help].endpoint(commands::help))
.branch(case![Command::SetMasterPass].endpoint(commands::set_master_pass))
.branch(case![Command::GenPassword].endpoint(commands::gen_password))
.branch(case![Command::Cancel].endpoint(commands::cancel))
// This branch filters out the users that don't have a master password set
.branch(master_password_check::get_handler())
.branch(case![Command::Menu].endpoint(commands::menu))
.branch(case![Command::AddAccount].endpoint(commands::add_account))
.branch(case![Command::GetAccount].endpoint(commands::get_account))
.branch(case![Command::GetAccounts].endpoint(commands::get_accounts))
.branch(case![Command::Delete].endpoint(commands::delete))
.branch(case![Command::DeleteAll].endpoint(commands::delete_all))
.branch(case![Command::Export].endpoint(commands::export))
.branch(case![Command::Import].endpoint(commands::import))
.chain(case![Command::ChangeLanguage].endpoint(commands::change_language));
let message_handler = Update::filter_message()
.map_async(delete_mesage_handler::delete_message)
// Filters out the messages without user information
.branch(filter_user_info::get_handler())
.branch(case![State::GetNewName(next)].endpoint(state::get_new_name))
.branch(case![State::GetMasterPass(next)].endpoint(state::get_master_pass))
.branch(case![State::GetNewMasterPass(next)].endpoint(state::get_new_master_pass))
.branch(case![State::GetLogin(next)].endpoint(state::get_login))
.branch(case![State::GetPassword(next)].endpoint(state::get_password))
.branch(case![State::GetUser(next)].endpoint(state::get_user))
.branch(command_handler)
.endpoint(default::default);
let callback_handler = Update::filter_callback_query()
.filter_map(CallbackCommand::from_query)
.branch(case![CallbackCommand::DeleteMessage].endpoint(callbacks::delete_message))
.branch(master_password_check::get_handler())
.branch(case![CallbackCommand::GetMenu].endpoint(callbacks::get_menu))
.branch(case![CallbackCommand::Get(hash)].endpoint(callbacks::get))
.branch(case![CallbackCommand::Decrypt(hash)].endpoint(callbacks::decrypt))
.branch(
case![CallbackCommand::DeleteAccount { name, is_command }].endpoint(callbacks::delete),
)
.branch(case![CallbackCommand::Alter(hash, field)].endpoint(callbacks::alter))
.chain(case![CallbackCommand::ChangeLocale(locale)].endpoint(callbacks::change_locale));
let handler = dptree::entry()
.map_async(locales::Locale::from_update)
.enter_dialogue::<Update, InMemStorage<State>, State>()
.branch(message_handler)
.chain(callback_handler);
Dispatcher::builder(bot, handler)
.dependencies(deps![db, InMemStorage::<State>::new()])
.error_handler(std::sync::Arc::from(errors::ErrorHandler))
.enable_ctrlc_handler()
.build()
}