Add tool to remove embeds for clocktower.live links
This commit is contained in:
4
.envrc
4
.envrc
@@ -1,4 +1,4 @@
|
|||||||
use flake
|
use flake
|
||||||
|
|
||||||
export DISCORD_TOKEN_FILE=./token-prod
|
export DISCORD_TOKEN_FILE=./token
|
||||||
export DB_FILE=db-prod.sqlite
|
export DB_FILE=db.sqlite
|
||||||
|
|||||||
41
src/main.rs
41
src/main.rs
@@ -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,42 @@ 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(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,8 +450,10 @@ 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::non_privileged() | serenity::GatewayIntents::GUILD_MEMBERS;
|
| serenity::GatewayIntents::GUILD_MEMBERS
|
||||||
|
| serenity::GatewayIntents::GUILD_MESSAGES
|
||||||
|
| serenity::GatewayIntents::MESSAGE_CONTENT;
|
||||||
|
|
||||||
let framework = poise::Framework::builder()
|
let framework = poise::Framework::builder()
|
||||||
.options(poise::FrameworkOptions {
|
.options(poise::FrameworkOptions {
|
||||||
|
|||||||
Reference in New Issue
Block a user