46 lines
1.4 KiB
Rust
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(())
|
|
}
|