Moved dispatching into a sepparate module
This commit is contained in:
80
src/dispatching.rs
Normal file
80
src/dispatching.rs
Normal 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()
|
||||
}
|
@ -8,7 +8,6 @@ fn has_no_user_info(msg: Message) -> bool {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[allow(clippy::significant_drop_tightening)]
|
||||
async fn notify_about_no_user_info(
|
||||
bot: Throttle<Bot>,
|
||||
msg: Message,
|
||||
@ -28,15 +27,17 @@ async fn notify_about_no_user_info(
|
||||
| State::GetNewMasterPass(handler)
|
||||
| State::GetLogin(handler)
|
||||
| State::GetPassword(handler) => {
|
||||
let mut handler = handler.lock().await;
|
||||
handler
|
||||
.lock()
|
||||
.await
|
||||
.previous
|
||||
.alter_message(&bot, text, None, None)
|
||||
.await?;
|
||||
}
|
||||
State::GetUser(handler) => {
|
||||
let mut handler = handler.lock().await;
|
||||
handler
|
||||
.lock()
|
||||
.await
|
||||
.previous
|
||||
.alter_message(&bot, text, None, None)
|
||||
.await?;
|
85
src/main.rs
85
src/main.rs
@ -1,99 +1,18 @@
|
||||
mod callbacks;
|
||||
mod commands;
|
||||
mod cryptography;
|
||||
mod default;
|
||||
mod delete_mesage_handler;
|
||||
mod dispatching;
|
||||
mod entity;
|
||||
mod errors;
|
||||
mod filter_user_info;
|
||||
mod locales;
|
||||
mod macros;
|
||||
mod markups;
|
||||
mod master_password_check;
|
||||
mod models;
|
||||
mod prelude;
|
||||
mod state;
|
||||
|
||||
use anyhow::{Error, Result};
|
||||
|
||||
fn get_dispatcher(
|
||||
token: String,
|
||||
db: prelude::Pool,
|
||||
) -> teloxide::prelude::Dispatcher<
|
||||
teloxide::adaptors::Throttle<teloxide::Bot>,
|
||||
crate::Error,
|
||||
teloxide::dispatching::DefaultKey,
|
||||
> {
|
||||
use callbacks::CallbackCommand;
|
||||
use commands::Command;
|
||||
use state::State;
|
||||
use teloxide::{
|
||||
adaptors::throttle::Limits,
|
||||
dispatching::dialogue::InMemStorage,
|
||||
dptree::{case, deps},
|
||||
filter_command,
|
||||
prelude::*,
|
||||
};
|
||||
|
||||
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))
|
||||
.branch(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))
|
||||
.branch(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)
|
||||
.branch(callback_handler);
|
||||
|
||||
Dispatcher::builder(bot, handler)
|
||||
.dependencies(deps![db, InMemStorage::<State>::new()])
|
||||
.error_handler(std::sync::Arc::from(errors::ErrorHandler))
|
||||
.enable_ctrlc_handler()
|
||||
.build()
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
use std::env;
|
||||
@ -109,6 +28,6 @@ async fn main() -> Result<()> {
|
||||
|
||||
entity::migrate(&pool).await?;
|
||||
|
||||
get_dispatcher(token, pool).dispatch().await;
|
||||
dispatching::get_dispatcher(token, pool).dispatch().await;
|
||||
Ok(())
|
||||
}
|
||||
|
Reference in New Issue
Block a user