feat: replace link

Changed files
+46
src
event_handler
+2
src/event_handler/mod.rs
··· 3 3 4 4 mod code_expantion; 5 5 mod kitten; 6 + mod replace_link; 6 7 7 8 use crate::types::Data; 8 9 ··· 16 17 17 18 code_expantion::handle(ctx, event, client).await?; 18 19 kitten::handle(ctx, event, client).await?; 20 + replace_link::handle(ctx, event, client).await?; 19 21 20 22 Ok(()) 21 23 }
+44
src/event_handler/replace_link.rs
··· 1 + use color_eyre::eyre::Result; 2 + use poise::serenity_prelude::{Context, FullEvent}; 3 + use regex::Regex; 4 + use reqwest::Client; 5 + use serenity::all::EditMessage; 6 + 7 + pub async fn handle(ctx: &Context, event: &FullEvent, _client: &Client) -> Result<()> { 8 + if let FullEvent::Message { new_message } = event { 9 + let regex = Regex::new(r"(https?:\/\/(?:www\.)?(x\.com|twitter\.com|reddit\.com|instagram\.com|tiktok\.com)\/[^\s]+)").unwrap(); 10 + let mut links: Vec<String> = Vec::new(); 11 + 12 + for capture in regex.find_iter(&new_message.content) { 13 + let url = capture.as_str(); 14 + 15 + let modified_url = url 16 + .replace("https://x.com", "https://fxtwitter.com") 17 + .replace("https://twitter.com", "https://fxtwitter.com") 18 + .replace("https://www.reddit.com", "https://rxddit.com") 19 + .replace("https://reddit.com", "https://rxddit.com") 20 + .replace("https://www.instagram.com", "https://ddinstagram.com") 21 + .replace("https://instagram.com", "https://ddinstagram.com") 22 + .replace("https://www.tiktok.com", "https://tfxktok.com") 23 + .replace("https://tiktok.com", "https://tfxktok.com"); 24 + 25 + links.push(modified_url); 26 + } 27 + 28 + let message_id = new_message.id; 29 + let channel_id = new_message.channel_id; 30 + 31 + if !links.is_empty() { 32 + let _ = channel_id 33 + .edit_message( 34 + ctx.http.clone(), 35 + message_id, 36 + EditMessage::new().suppress_embeds(true), 37 + ) 38 + .await; 39 + let _ = new_message.reply(ctx.http.clone(), links.join("\n")).await; 40 + } 41 + } 42 + 43 + Ok(()) 44 + }