diff --git a/.envrc b/.envrc index 7189e29..5d8b0dd 100644 --- a/.envrc +++ b/.envrc @@ -1,4 +1,4 @@ use flake -export DISCORD_TOKEN_FILE=./token-prod -export DB_FILE=db-prod.sqlite +export DISCORD_TOKEN_FILE=./token +export DB_FILE=db.sqlite diff --git a/src/main.rs b/src/main.rs index 5bc833f..500e51e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ -use std::{io, path::Path}; +use std::{io, path::Path, time::Duration}; -use ::serenity::all::{ChannelId, GuildId, Mentionable, UserId}; +use ::serenity::all::{ChannelId, EditMessage, GuildId, Mentionable, UserId}; use eyre::{Context as _, Error, OptionExt, Result}; use futures::{FutureExt, StreamExt, TryStreamExt}; use poise::serenity_prelude as serenity; @@ -391,15 +391,38 @@ async fn register_commands( Ok(()) } +#[tracing::instrument(skip(ctx))] +async fn handle_message( + ctx: impl AsRef, + message: &serenity::Message, +) -> Result<()> { + tracing::info!("Got message: {}", message.content); + if message.content.contains("https://clocktower.live") { + let mut message = message.clone(); + tokio::time::sleep(Duration::from_secs(2)).await; + message + .edit(&ctx.as_ref(), EditMessage::new().suppress_embeds(true)) + .await?; + } + Ok(()) +} + async fn on_event( ctx: &serenity::Context, event: &serenity::FullEvent, framework: poise::FrameworkContext<'_, Data, Error>, _: &Data, ) -> Result<()> { - if let serenity::FullEvent::GuildCreate { guild, is_new: _ } = event { - register_commands(ctx, framework.options, guild.id).await?; - }; + match event { + 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(()) } @@ -423,8 +446,10 @@ async fn main() -> Result<()> { ) .wrap_err("A Discord token is required")?; let dbfile = std::env::var_os("DB_FILE").ok_or_eyre("A database file is required")?; - let intents = - serenity::GatewayIntents::non_privileged() | serenity::GatewayIntents::GUILD_MEMBERS; + let intents = serenity::GatewayIntents::non_privileged() + | serenity::GatewayIntents::GUILD_MEMBERS + | serenity::GatewayIntents::GUILD_MESSAGES + | serenity::GatewayIntents::MESSAGE_CONTENT; let framework = poise::Framework::builder() .options(poise::FrameworkOptions {