Compare commits

..

1 Commits

Author SHA1 Message Date
bluepython508
99e5a44e40 Add tool to remove embeds for clocktower.live links 2025-12-28 23:12:30 +00:00
2 changed files with 13 additions and 25 deletions

4
.envrc
View File

@@ -1,4 +1,4 @@
use flake use flake
export DISCORD_TOKEN_FILE=./token export DISCORD_TOKEN_FILE=./token-prod
export DB_FILE=db.sqlite export DB_FILE=db-prod.sqlite

View File

@@ -1,4 +1,4 @@
use std::{io, path::Path, time::Duration}; use std::{io, path::Path};
use ::serenity::all::{ChannelId, EditMessage, 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};
@@ -392,17 +392,12 @@ async fn register_commands(
} }
#[tracing::instrument(skip(ctx))] #[tracing::instrument(skip(ctx))]
async fn handle_message( async fn handle_message(ctx: impl AsRef<serenity::Http>, message: &serenity::Message) -> Result<()> {
ctx: impl AsRef<serenity::Http>, for embed in &message.embeds {
message: &serenity::Message, if embed.url.as_ref().is_some_and(|url| url.contains("https://clocktower.live")) {
) -> Result<()> {
tracing::info!("Got message: {}", message.content);
if message.content.contains("https://clocktower.live") {
let mut message = message.clone(); let mut message = message.clone();
tokio::time::sleep(Duration::from_secs(2)).await; message.edit(&ctx.as_ref(), EditMessage::new().suppress_embeds(true)).await?;
message }
.edit(&ctx.as_ref(), EditMessage::new().suppress_embeds(true))
.await?;
} }
Ok(()) Ok(())
} }
@@ -414,13 +409,8 @@ async fn on_event(
_: &Data, _: &Data,
) -> Result<()> { ) -> Result<()> {
match event { match event {
serenity::FullEvent::GuildCreate { guild, is_new: _ } => { serenity::FullEvent::GuildCreate { guild, is_new: _ } => register_commands(ctx, framework.options, guild.id).await?,
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?,
}
serenity::FullEvent::Message { new_message: msg }
| serenity::FullEvent::MessageUpdate { new: Some(msg), .. } => {
handle_message(ctx, msg).await?
}
_ => {} _ => {}
} }
Ok(()) Ok(())
@@ -446,10 +436,8 @@ 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 = serenity::GatewayIntents::non_privileged() let intents =
| serenity::GatewayIntents::GUILD_MEMBERS serenity::GatewayIntents::non_privileged() | serenity::GatewayIntents::GUILD_MEMBERS | serenity::GatewayIntents::GUILD_MESSAGES;
| serenity::GatewayIntents::GUILD_MESSAGES
| serenity::GatewayIntents::MESSAGE_CONTENT;
let framework = poise::Framework::builder() let framework = poise::Framework::builder()
.options(poise::FrameworkOptions { .options(poise::FrameworkOptions {