gluon/src/middlewares/admin_check_middleware.rs

56 lines
1.7 KiB
Rust
Raw Normal View History

2024-05-30 23:37:47 +03:00
use async_trait::async_trait;
use telers::{
errors::{EventErrorKind, HandlerError},
2024-08-31 22:41:18 +03:00
event::telegram::{HandlerRequest, HandlerResponse},
2024-08-31 22:30:42 +03:00
middlewares::{InnerMiddleware, Next}, types::Message,
2024-05-30 23:37:47 +03:00
};
use anyhow::Error as Reject;
use crate::{
types::structs::message_sender::MessageSender,
utils::telegram::{admin_check::is_admin, data_getters::get_all_admins},
2024-05-30 23:37:47 +03:00
};
#[derive(Default)]
pub struct AdminCheck {}
#[async_trait]
impl InnerMiddleware for AdminCheck {
async fn call(
&self,
request: HandlerRequest,
next: Next,
) -> Result<HandlerResponse, EventErrorKind> {
let (bot, message) = (request.clone().bot, request.clone().update);
2024-08-31 22:30:42 +03:00
let is_replying_dice: Option<Message> = match message.kind().message().unwrap() {
Message::Dice(dice) => dice.reply_to_message.clone(),
_ => None
};
2024-05-30 23:37:47 +03:00
let admins_list = get_all_admins(&bot, message.chat().unwrap().id())
.await
.unwrap();
let chat_id: i64 = message.chat_id().unwrap();
if is_admin(&admins_list, message.from().unwrap().id) {
2024-05-30 23:37:47 +03:00
let response = next(request).await?;
return Ok(response);
} else {
2024-08-31 22:30:42 +03:00
if is_replying_dice.is_some() {
MessageSender::builder(chat_id)
.text("Недостаточно прав для использования данной команды.")
2024-08-31 22:30:42 +03:00
.build().send(&bot)
2024-05-30 23:37:47 +03:00
.await
.unwrap();
2024-08-31 22:30:42 +03:00
}
2024-05-30 23:37:47 +03:00
return Err(EventErrorKind::Handler(HandlerError::new(Reject::msg(
"User isn't admin.".to_string(),
))));
}
}
}