pass_manager/src/handlers/state/get_document.rs

46 lines
1.4 KiB
Rust

use crate::{
errors::HandlerUsed,
handlers::{markups::deletion_markup, utils::delete_optional, MainDialogue, PackagedHandler},
};
use sea_orm::prelude::*;
use teloxide::{adaptors::Throttle, prelude::*};
/// Function to handle get_document state. It doesn't actually validate anything
pub async fn get_document(
bot: Throttle<Bot>,
msg: Message,
db: DatabaseConnection,
dialogue: MainDialogue,
next: PackagedHandler<()>,
) -> crate::Result<()> {
let handler = next.lock().await.take();
let previous = handler.as_ref().and_then(|h| h.previous.as_ref());
delete_optional(&bot, previous).await;
if let Some("/cancel") = msg.text().map(str::trim_end) {
dialogue.exit().await?;
bot.send_message(msg.chat.id, "Successfully cancelled")
.reply_markup(deletion_markup())
.await?;
return Ok(());
}
let handler = match handler {
Some(handler) => handler,
None => {
let _ = dialogue.exit().await;
return Err(HandlerUsed.into());
}
};
if msg.document().is_none() {
bot.send_message(msg.chat.id, "You didn't send a file")
.reply_markup(deletion_markup())
.await?;
dialogue.exit().await?;
return Ok(());
}
if let Err(err) = (handler.handler)(bot, msg, db, dialogue.clone(), ()).await {
let _ = dialogue.exit().await;
return Err(err);
}
Ok(())
}