33 lines
1.0 KiB
Rust
33 lines
1.0 KiB
Rust
|
use crate::{entity::prelude::MasterPass, errors::NoUserInfo};
|
||
|
use sea_orm::prelude::*;
|
||
|
use teloxide::{adaptors::Throttle, dispatching::DpHandlerDescription, prelude::*};
|
||
|
|
||
|
async fn master_pass_exists(msg: Message, db: DatabaseConnection) -> Option<Option<String>> {
|
||
|
let user_id = match msg.from() {
|
||
|
Some(user) => user.id.0,
|
||
|
None => return Some(Some(NoUserInfo.to_string())),
|
||
|
};
|
||
|
match MasterPass::exists(user_id, &db).await {
|
||
|
Ok(true) => None,
|
||
|
Ok(false) => Some(None),
|
||
|
Err(err) => Some(Some(err.to_string())),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async fn notify_about_no_master_pass(
|
||
|
bot: Throttle<Bot>,
|
||
|
result: Option<String>,
|
||
|
msg: Message,
|
||
|
) -> crate::Result<()> {
|
||
|
if let Some(message) = result {
|
||
|
return Err(crate::Error::msg(message));
|
||
|
}
|
||
|
bot.send_message(msg.chat.id, "No master password set")
|
||
|
.await?;
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
pub fn get_handler() -> Handler<'static, DependencyMap, crate::Result<()>, DpHandlerDescription> {
|
||
|
dptree::filter_map_async(master_pass_exists).endpoint(notify_about_no_master_pass)
|
||
|
}
|