145 lines
4.2 KiB
Rust
145 lines
4.2 KiB
Rust
use teloxide::{prelude::*, utils::command::BotCommands};
|
|
use std::sync::Arc;
|
|
mod check_permissions;
|
|
mod pole_dialogue;
|
|
mod ban_stiker;
|
|
mod database;
|
|
mod spoiler_mangas;
|
|
mod telegram_utils;
|
|
mod rewrite_links;
|
|
|
|
#[derive(BotCommands, Clone)]
|
|
#[command(rename_rule = "lowercase", description = "These commands are supported:")]
|
|
enum Command {
|
|
#[command(description = "ban a stiker")]
|
|
Torquemada,
|
|
#[command(description = "display this text.")]
|
|
Help,
|
|
#[command(description = "list pole points" )]
|
|
Top
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
run().await;
|
|
}
|
|
|
|
async fn run(){
|
|
//teloxide::enable_logging!();
|
|
pretty_env_logger::init();
|
|
log::info!("Starting bot");
|
|
let bot = Bot::from_env();
|
|
let permissions = Arc::new(check_permissions::group_permissions::new());
|
|
let p1 = Arc::clone(&permissions);
|
|
let p2 = Arc::clone(&permissions);
|
|
//Command::repl(bot.clone(), answer).await;
|
|
let handler = Update::filter_message()
|
|
.branch(
|
|
dptree::filter(move |msg: Message| !p1.compare(&msg.chat.id.to_string()))
|
|
.endpoint(|msg: Message, bot: Bot| async move {
|
|
if !msg.chat.is_private() {
|
|
println!("{}",msg.chat.id.0);
|
|
bot.leave_chat(msg.chat.id).await?;
|
|
}
|
|
Ok(())
|
|
}
|
|
),
|
|
|
|
)
|
|
.branch(
|
|
dptree::filter(|msg: Message| is_channel_user(msg))
|
|
.endpoint(|msg: Message, bot: Bot| async move {
|
|
bot.delete_message(msg.chat.id, msg.id).await?;
|
|
Ok(())
|
|
}
|
|
),
|
|
)
|
|
.branch(
|
|
Update::filter_message()
|
|
.filter_command::<Command>()
|
|
.endpoint(|msg: Message, bot: Bot, command: Command | answer(bot, msg, command)),
|
|
)
|
|
.branch(
|
|
dptree::filter(|msg: Message| is_media(msg.clone()) && ban_stiker::check_media(msg))
|
|
.endpoint(|msg: Message, bot: Bot| async move {
|
|
bot.delete_message(msg.chat.id, msg.id).await?;
|
|
Ok(())
|
|
}
|
|
),
|
|
)
|
|
.branch(
|
|
dptree::filter(move |msg: Message| (is_photo(msg.clone()) && p2.compar_party(&msg.chat.id.to_string())))
|
|
.endpoint(|msg: Message, bot: Bot| spoiler_mangas::check_image(msg, bot)),
|
|
)
|
|
.branch(
|
|
dptree::filter(move |msg: Message| rewrite_links::check_contain_links::contain_links(msg.clone()))
|
|
.endpoint(|msg: Message, bot: Bot| rewrite_links::check_contain_links::fix_links(msg, bot)),
|
|
)
|
|
.branch(
|
|
dptree::filter(move |msg: Message| permissions.compar_party(&msg.chat.id.to_string()))
|
|
.endpoint(|msg: Message, bot: Bot| pole_dialogue::exe_pole(msg, bot)),
|
|
);
|
|
Dispatcher::builder(
|
|
bot,
|
|
handler,
|
|
)
|
|
.build()
|
|
.dispatch()
|
|
.await;
|
|
}
|
|
|
|
async fn answer(
|
|
bot: Bot,
|
|
msg: Message,
|
|
command: Command,
|
|
) -> anyhow::Result<()> {
|
|
match command {
|
|
Command::Torquemada => {
|
|
match ban_stiker::ban_media(msg.clone(), bot.clone()).await {
|
|
Ok(_o) => bot.send_message(msg.chat.id, "Otro fichero que se va a la hoguera").await?,
|
|
Err(e) => bot.send_message(msg.chat.id, e.to_string()).await?,
|
|
}
|
|
},
|
|
Command::Help => bot.send_message(msg.chat.id, Command::descriptions().to_string()).await?,
|
|
Command::Top => pole_dialogue::get_top(msg, bot).await?,
|
|
};
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn is_media(msg: Message) -> bool {
|
|
is_stiker(msg.clone()) || is_gif(msg.clone()) || is_photo(msg.clone())
|
|
|
|
}
|
|
|
|
fn is_stiker(msg: Message) -> bool {
|
|
match msg.sticker() {
|
|
Some(s) => true,
|
|
None => false,
|
|
}
|
|
|
|
}
|
|
|
|
fn is_gif(msg: Message) -> bool {
|
|
match msg.animation() {
|
|
Some(s) => true,
|
|
None => false,
|
|
}
|
|
|
|
}
|
|
|
|
fn is_photo(msg: Message) -> bool {
|
|
match msg.photo() {
|
|
Some(s) => true,
|
|
None => false,
|
|
}
|
|
|
|
}
|
|
|
|
fn is_channel_user(msg: Message)->bool{
|
|
match msg.from() {
|
|
Some(u) => u.is_channel(),
|
|
None => false,
|
|
}
|
|
}
|