30 lines
1.1 KiB
Rust
30 lines
1.1 KiB
Rust
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<PASSWORD_LENGTH>; 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<Bot>, msg: Message) -> crate::Result<()> {
|
|
let mut message: ArrayString<BUFFER_LENGTH> = 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(())
|
|
}
|