From a46a703f7cf41dadb6c2c362acec1eea0de0aa6e Mon Sep 17 00:00:00 2001 From: groche97 Date: Sun, 12 Nov 2023 20:26:12 +0100 Subject: [PATCH] add from in the replay spoiler message --- src/main.rs | 1 + src/pole_dialogue/mod.rs | 8 +------- src/spoiler_mangas/mod.rs | 19 +++++++++++++------ src/telegram_utils/mod.rs | 6 ++++++ 4 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 src/telegram_utils/mod.rs diff --git a/src/main.rs b/src/main.rs index 6490085..790453d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod pole_dialogue; mod ban_stiker; mod database; mod spoiler_mangas; +mod telegram_utils; #[derive(BotCommands, Clone)] #[command(rename_rule = "lowercase", description = "These commands are supported:")] diff --git a/src/pole_dialogue/mod.rs b/src/pole_dialogue/mod.rs index 2e191b5..bbd9250 100644 --- a/src/pole_dialogue/mod.rs +++ b/src/pole_dialogue/mod.rs @@ -2,6 +2,7 @@ use teloxide::prelude::*; use chrono::Local; use std::cmp::Ordering::Equal; use std::str; +use crate::telegram_utils::*; mod database; fn change_day(last_day: &str) -> bool{ @@ -32,13 +33,6 @@ fn do_fail(group_id: &str, user_id: &str, user_name: &str){ data.write_points(group_id, user_id, user_name, &Local::now().format("%Y-%m-%d").to_string(),Rewards::FAIL as i64); } -fn get_alias(msg: &teloxide::prelude::Message) -> String { - match &msg.from().unwrap().username { - Some(alias) => format!("@{}",alias), - None => format!("{}",&*msg.from().unwrap().first_name), - } -} - fn check_user_points(msg: &teloxide::prelude::Message, rw: Rewards) -> bool{ let data: database::DatabasePole = database::DatabasePole::get_database(); let ret = data.check_user_pole(&msg.chat.id.to_string(), diff --git a/src/spoiler_mangas/mod.rs b/src/spoiler_mangas/mod.rs index 9794809..0932679 100644 --- a/src/spoiler_mangas/mod.rs +++ b/src/spoiler_mangas/mod.rs @@ -9,11 +9,12 @@ use teloxide::{ use image::{DynamicImage,GenericImageView}; use std::io::Cursor; use tokio::io::BufStream; +use crate::telegram_utils::*; const TOLERANCE: i16 = 10; const PERCENT_ACEPTANCE: u8 = 5; const WHITE : u8 = 160; -const WHITE_ACEPTANCE: u8 = 50; +const WHITE_ACEPTANCE: u8 = 40; fn check_percent(img: DynamicImage) -> (u8,u8) { let mut cont = 0; @@ -38,32 +39,37 @@ fn check_percent(img: DynamicImage) -> (u8,u8) { pub fn append_text(new_msg: MultipartRequest, old_msg: Message) -> MultipartRequest { match old_msg.caption() { Some(caption) => { + let mut msg_from = get_alias(&old_msg); + msg_from.push_str(": "); + msg_from = String::from("Mensaje de ") + &msg_from; + let from_offset = msg_from.encode_utf16().count(); //new_msg.caption(caption).caption_entities(generate_entity_spoiler(caption.len())).has_spoiler(true) - new_msg.caption(caption).caption_entities(generate_captions(old_msg.caption_entities().unwrap().to_vec(),caption.encode_utf16().count())) + new_msg.caption(msg_from + caption).caption_entities(generate_captions(old_msg.caption_entities().unwrap().to_vec(),caption.encode_utf16().count(), from_offset)) }, None => new_msg, } } -pub fn generate_captions(captions: Vec, len: usize) -> Vec { +pub fn generate_captions(captions: Vec, len: usize, offset: usize) -> Vec { let mut ret = Vec::new(); let mut last_hole = 0; - for cap in captions { + for mut cap in captions { match cap.kind { MessageEntityKind::TextMention { user: ref User } => { if cap.offset == 0 { last_hole = cap.length; }else if cap.offset >= last_hole { - ret.push(MessageEntity::spoiler(last_hole,cap.offset-last_hole)); + ret.push(MessageEntity::spoiler(last_hole+offset,cap.offset-last_hole)); last_hole = cap.offset + cap.length; } + cap.offset += offset; ret.push(cap.clone()); }, _ => continue, } } if last_hole < len { - ret.push(MessageEntity::spoiler(last_hole,len - last_hole)); + ret.push(MessageEntity::spoiler(last_hole+offset,len - last_hole)); } ret } @@ -121,3 +127,4 @@ pub async fn check_image(msg: Message, bot: Bot) -> anyhow::Result<()> { None => Ok(()), } } + diff --git a/src/telegram_utils/mod.rs b/src/telegram_utils/mod.rs new file mode 100644 index 0000000..c347980 --- /dev/null +++ b/src/telegram_utils/mod.rs @@ -0,0 +1,6 @@ +pub fn get_alias(msg: &teloxide::prelude::Message) -> String { + match &msg.from().unwrap().username { + Some(alias) => format!("@{}",alias), + None => format!("{}",&*msg.from().unwrap().first_name), + } +}