Add tool to remove embeds for clocktower.live links

This commit is contained in:
bluepython508
2025-12-28 23:12:25 +00:00
parent 3ba25db279
commit 99e5a44e40

View File

@@ -1,6 +1,6 @@
use std::{io, path::Path}; use std::{io, path::Path};
use ::serenity::all::{ChannelId, GuildId, Mentionable, UserId}; use ::serenity::all::{ChannelId, EditMessage, GuildId, Mentionable, UserId};
use eyre::{Context as _, Error, OptionExt, Result}; use eyre::{Context as _, Error, OptionExt, Result};
use futures::{FutureExt, StreamExt, TryStreamExt}; use futures::{FutureExt, StreamExt, TryStreamExt};
use poise::serenity_prelude as serenity; use poise::serenity_prelude as serenity;
@@ -391,15 +391,28 @@ async fn register_commands(
Ok(()) Ok(())
} }
#[tracing::instrument(skip(ctx))]
async fn handle_message(ctx: impl AsRef<serenity::Http>, message: &serenity::Message) -> Result<()> {
for embed in &message.embeds {
if embed.url.as_ref().is_some_and(|url| url.contains("https://clocktower.live")) {
let mut message = message.clone();
message.edit(&ctx.as_ref(), EditMessage::new().suppress_embeds(true)).await?;
}
}
Ok(())
}
async fn on_event( async fn on_event(
ctx: &serenity::Context, ctx: &serenity::Context,
event: &serenity::FullEvent, event: &serenity::FullEvent,
framework: poise::FrameworkContext<'_, Data, Error>, framework: poise::FrameworkContext<'_, Data, Error>,
_: &Data, _: &Data,
) -> Result<()> { ) -> Result<()> {
if let serenity::FullEvent::GuildCreate { guild, is_new: _ } = event { match event {
register_commands(ctx, framework.options, guild.id).await?; serenity::FullEvent::GuildCreate { guild, is_new: _ } => register_commands(ctx, framework.options, guild.id).await?,
}; serenity::FullEvent::Message { new_message: msg } | serenity::FullEvent::MessageUpdate { new: Some(msg), .. } => handle_message(ctx, msg).await?,
_ => {}
}
Ok(()) Ok(())
} }
@@ -424,7 +437,7 @@ async fn main() -> Result<()> {
.wrap_err("A Discord token is required")?; .wrap_err("A Discord token is required")?;
let dbfile = std::env::var_os("DB_FILE").ok_or_eyre("A database file is required")?; let dbfile = std::env::var_os("DB_FILE").ok_or_eyre("A database file is required")?;
let intents = let intents =
serenity::GatewayIntents::non_privileged() | serenity::GatewayIntents::GUILD_MEMBERS; serenity::GatewayIntents::non_privileged() | serenity::GatewayIntents::GUILD_MEMBERS | serenity::GatewayIntents::GUILD_MESSAGES;
let framework = poise::Framework::builder() let framework = poise::Framework::builder()
.options(poise::FrameworkOptions { .options(poise::FrameworkOptions {