diff --git a/src/irc_discord.rs b/src/irc_discord.rs index ef4d807..b875a39 100644 --- a/src/irc_discord.rs +++ b/src/irc_discord.rs @@ -7,6 +7,7 @@ use tokio::sync::{mpsc::unbounded_channel, Mutex}; use tokio_stream::wrappers::UnboundedReceiverStream; use serenity::{ + cache::Cache, futures::StreamExt, http::Http, model::{ @@ -14,6 +15,7 @@ use serenity::{ webhook::Webhook, }, prelude::*, + utils::{content_safe, ContentSafeOptions}, }; use crate::{regex, OptionReplacer}; @@ -33,6 +35,7 @@ macro_rules! unwrap_or_continue { pub async fn irc_loop( mut client: IrcClient, http: Arc, + cache: Arc, mapping: Arc>, webhooks: HashMap, members: Arc>>, @@ -101,9 +104,21 @@ pub async fn irc_loop( let members_lock = members.lock().await; - let computed = + let mut computed = irc_to_discord_processing(message, &*members_lock, &mut id_cache, channels); + computed = { + let opts = ContentSafeOptions::new() + .clean_role(false) + .clean_user(false) + .clean_channel(false) + .show_discriminator(false) + .clean_here(true) // setting these to true explicitly isn't needed, + .clean_everyone(true); // but i did it anyway for readability + + content_safe(&cache, computed, &opts).await + }; + if let Some(webhook) = webhooks.get(channel) { let avatar = &*avatar_cache.entry(nickname.to_owned()).or_insert_with(|| { members_lock.iter().find_map(|member| { diff --git a/src/main.rs b/src/main.rs index 88d6de2..9f8fdd0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -107,6 +107,7 @@ async fn main() -> anyhow::Result<()> { let irc_client = IrcClient::from_config(config).await?; let http = discord_client.cache_and_http.http.clone(); + let cache = discord_client.cache_and_http.cache.clone(); let members = Arc::new(Mutex::new({ let channel_id = ChannelId::from(*conf.channels.iter().next().unwrap().1); @@ -144,7 +145,7 @@ async fn main() -> anyhow::Result<()> { } select! { - r = irc_loop(irc_client, http.clone(), channels.clone(), webhooks_transformed, members) => r.unwrap(), + r = irc_loop(irc_client, http.clone(), cache.clone(), channels.clone(), webhooks_transformed, members) => r.unwrap(), r = discord_client.start() => r.unwrap(), _ = terminate_signal() => { for (_, &v) in channels.iter() {