use crate::prelude::*; use arrayvec::ArrayString; use cryptography::passwords::generate_passwords; use std::fmt::Write; use teloxide::types::ParseMode; use tokio::task::spawn_blocking; const MESSAGE_HEADER: &str = "Passwords:"; const PASSWORD_LENGTH: usize = 32; const PASSWORD_PADDING_LENGTH: usize = 3; const AMOUNT_OF_PASSWORDS: usize = 10; type PasswordArray = [ArrayString; AMOUNT_OF_PASSWORDS]; const BUFFER_LENGTH: usize = MESSAGE_HEADER.len() + (PASSWORD_LENGTH + PASSWORD_PADDING_LENGTH) * AMOUNT_OF_PASSWORDS; /// Handles /`gen_password` command by generating 10 copyable passwords and sending them to the user #[inline] pub async fn gen_password(bot: Throttle, msg: Message) -> crate::Result<()> { let mut message: ArrayString = MESSAGE_HEADER.try_into().unwrap(); let passwords: PasswordArray = spawn_blocking(generate_passwords).await?; for password in passwords { write!(message, "\n`{password}`").unwrap(); } bot.send_message(msg.chat.id, message.as_str()) .parse_mode(ParseMode::MarkdownV2) .reply_markup(deletion_markup()) .await?; Ok(()) }