Compare commits

..

No commits in common. "20b1e78aa3f753c5741088b6d4e50237c0268588" and "311187b6eb18a5ce1706a67e9abeecbda03be186" have entirely different histories.

9 changed files with 67 additions and 41 deletions

View File

@ -1,7 +1,5 @@
use telers::{ use telers::{
event::{telegram::HandlerResult, EventReturn}, event::{telegram::HandlerResult, EventReturn}, methods::BanChatMember, Bot
methods::BanChatMember,
Bot,
}; };
use tokio::time::{sleep, Duration as DurationSleep}; use tokio::time::{sleep, Duration as DurationSleep};
@ -27,7 +25,6 @@ pub async fn ban_member(
let user_id: i64 = user.get_id().unwrap(); let user_id: i64 = user.get_id().unwrap();
let callback = || async { bot.send(BanChatMember::new(chat_id, user_id)).await }; let callback = || async { bot.send(BanChatMember::new(chat_id, user_id)).await };
let demote_args: (&Bot, i64, i64) = (&bot, user_id, chat_id); let demote_args: (&Bot, i64, i64) = (&bot, user_id, chat_id);
sender_builder.set_text("Невозможно забанить пользователя."); sender_builder.set_text("Невозможно забанить пользователя.");

View File

@ -1,16 +1,19 @@
use telers::{event::telegram::HandlerResult, types::Message, Bot}; use telers::{
event::telegram::HandlerResult,
use crate::{ types::Message,
assets::files::{HELP_COMMAND_TEXT, PRIVACY_COMMAND_TEXT}, Bot,
utils::telegram::senders::send_html, };
use crate::{
utils::telegram::senders::send_html,
assets::files::{HELP_COMMAND_TEXT, PRIVACY_COMMAND_TEXT}
}; };
#[inline]
pub async fn help(bot: Bot, msg: Message) -> HandlerResult { pub async fn help(bot: Bot, msg: Message) -> HandlerResult {
send_html(bot, msg, HELP_COMMAND_TEXT).await send_html(bot, msg, HELP_COMMAND_TEXT).await
} }
#[inline]
pub async fn privacy(bot: Bot, msg: Message) -> HandlerResult { pub async fn privacy(bot: Bot, msg: Message) -> HandlerResult {
send_html(bot, msg, PRIVACY_COMMAND_TEXT).await send_html(bot, msg, PRIVACY_COMMAND_TEXT).await
} }

View File

@ -6,21 +6,35 @@ use telers::{
}; };
use crate::{ use crate::{
actions::unmute::unmute_member,
assets::files::UNMUTE_COMMAND_HELP, assets::files::UNMUTE_COMMAND_HELP,
actions::unmute::unmute_member,
types::{enums::target_user::TargetUser, structs::handler_entity::HandlerEntity}, types::{enums::target_user::TargetUser, structs::handler_entity::HandlerEntity},
utils::{ utils::{
general::cast_boxed_array::cast_boxed, general::cast_boxed_array::cast_boxed,
telegram::{args_parsers::get_user, data_getters::get_chat_data, senders::send_html}, telegram::{
args_parsers::get_user,
data_getters::get_chat_data,
senders::send_html
},
}, },
}; };
pub async fn unmute(bot: Bot, message: Message, command: CommandObject) -> HandlerResult { pub async fn unmute(bot: Bot, message: Message, command: CommandObject) -> HandlerResult {
if command.args.len() == 0 {
send_html(bot, message, UNMUTE_COMMAND_HELP).await?;
return Ok(EventReturn::Cancel);
}
let (chat_id, mut handler_entity): (i64, HandlerEntity) = get_chat_data(&bot, &message); let (chat_id, mut handler_entity): (i64, HandlerEntity) = get_chat_data(&bot, &message);
let args: Vec<&'static str> = cast_boxed(command.args); let args: Vec<&'static str> = cast_boxed(command.args);
let target_user: TargetUser = get_user(handler_entity.clone(), args.first().copied(), &mut 0); let target_user: TargetUser = get_user(
handler_entity.clone(),
args.first().copied(),
&mut 0,
);
if args.is_empty() && !target_user.exist(){ if args.is_empty() && !target_user.exist(){
send_html(bot, message, UNMUTE_COMMAND_HELP).await?; send_html(bot, message, UNMUTE_COMMAND_HELP).await?;
@ -36,3 +50,4 @@ pub async fn unmute(bot: Bot, message: Message, command: CommandObject) -> Handl
Ok(EventReturn::Finish) Ok(EventReturn::Finish)
} }

View File

@ -1 +1 @@
pub mod dice_handler; pub mod dice;

View File

@ -21,9 +21,9 @@ use endpoints::{
ban_command::ban, ban_command::ban,
info_commands::{help, privacy}, info_commands::{help, privacy},
mute_command::mute, mute_command::mute,
unmute_command::unmute, unmute_command::unmute
}, },
dice::dice_handler::dice_handler, dice::dice::dice_handler,
}; };
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
@ -46,16 +46,6 @@ fn logs() {
); );
} }
macro_rules! append_command {
($branch:expr, $($command:expr), *) => {
$($branch
.message
.register($command)
.filter(Command::one(stringify!($command)));
)*
}
}
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
logs(); logs();
@ -80,8 +70,30 @@ async fn main() {
let mut admin_commands = Router::new("admin_commands"); let mut admin_commands = Router::new("admin_commands");
let mut default_commands = Router::new("default_commands"); let mut default_commands = Router::new("default_commands");
append_command!(default_commands, help, privacy); default_commands
append_command!(admin_commands, unmute, mute, ban); .message
.register(help)
.filter(Command::one("help"));
default_commands
.message
.register(privacy)
.filter(Command::one("privacy"));
admin_commands
.message
.register(unmute)
.filter(Command::one("unmute"));
admin_commands
.message
.register(mute)
.filter(Command::one("mute"));
admin_commands
.message
.register(ban)
.filter(Command::one("ban"));
admin_commands admin_commands
.message .message
@ -103,7 +115,7 @@ async fn main() {
.unwrap(); .unwrap();
} }
Err(error) => { Err(error) => {
eprintln!("Error text: {:?}", error); println!("Error text: {:?}", error);
} }
} }
} }

View File

@ -27,7 +27,6 @@ impl TimeMetrics {
_ => Self::Days(duration), _ => Self::Days(duration),
} }
} }
pub fn extract(self) -> i64 { pub fn extract(self) -> i64 {
match self { match self {
Self::Minutes(min) => min, Self::Minutes(min) => min,
@ -37,7 +36,6 @@ impl TimeMetrics {
Self::Mounths(mon) => mon, Self::Mounths(mon) => mon,
} }
} }
pub fn get_word_declensions(self) -> (impl Into<String>, impl Into<String>, impl Into<String>) { pub fn get_word_declensions(self) -> (impl Into<String>, impl Into<String>, impl Into<String>) {
match self { match self {
Self::Minutes(_) => ("минута", "минуты", "минут"), Self::Minutes(_) => ("минута", "минуты", "минут"),

View File

@ -1,6 +1,7 @@
use telers::types::chat_member::ChatMember; use telers::types::chat_member::ChatMember;
pub fn is_admin(all_admin_members: &[ChatMember], user_id: i64) -> bool { pub fn is_admin(all_admin_members: &Vec<ChatMember>, user_id: i64) -> bool {
//fix: moderators with non full rights can use admin commands now.
all_admin_members all_admin_members
.iter() .iter()
.any(|admin: &ChatMember| match admin { .any(|admin: &ChatMember| match admin {

View File

@ -3,7 +3,7 @@ use telers::{errors::SessionErrorKind as ErrorKind, event::EventReturn, types::C
use crate::types::structs::message_sender::MessageSender; use crate::types::structs::message_sender::MessageSender;
use std::future::Future; use std::future::Future;
use super::{admin_check::is_admin, data_getters::get_all_admins, rights_control::demote_user}; use super::{admin_check::is_admin, rights_control::demote_user, data_getters::get_all_admins};
const DEMOTE_FAILURE_MESSAGE: &str = "Команда не может быть выполнена: \ const DEMOTE_FAILURE_MESSAGE: &str = "Команда не может быть выполнена: \
не удалось удалить административные привилегии пользователя."; не удалось удалить административные привилегии пользователя.";