gongbotrs/src/utils.rs
2025-05-02 14:30:07 +03:00

53 lines
1.2 KiB
Rust

use serde::{Deserialize, Serialize};
use teloxide::types::InlineKeyboardButton;
use crate::{
db::{callback_info::CallbackInfo, CallDB},
BotResult,
};
#[macro_export]
macro_rules! single_button_markup {
($button:expr) => {
InlineKeyboardMarkup {
inline_keyboard: vec![vec![$button]],
}
};
}
#[macro_export]
macro_rules! stacked_buttons_markup {
($( $button:expr ),+) => {
InlineKeyboardMarkup {
inline_keyboard: vec![
$(
vec![$button],
)*
],
}
};
}
pub async fn create_callback_button<C, D>(
literal: &str,
callback: C,
db: &mut D,
) -> BotResult<InlineKeyboardButton>
where
C: Serialize + for<'a> Deserialize<'a> + Send + Sync,
D: CallDB + Send,
{
let text = db
.get_literal_value(literal)
.await?
.unwrap_or("Please, set content of this message".into());
let ci = CallbackInfo::new_with_literal(callback, literal.to_string())
.store(db)
.await?;
Ok(InlineKeyboardButton::new(
text,
teloxide::types::InlineKeyboardButtonKind::CallbackData(ci.get_id()),
))
}