feat: add message logger

This commit is contained in:
seth 2023-12-07 22:18:36 -05:00
parent 8376c45c2d
commit 7e96bced41
No known key found for this signature in database
GPG key ID: D31BD0D494BBEE86
3 changed files with 101 additions and 2 deletions

View file

@ -0,0 +1,79 @@
use crate::consts::COLORS;
use crate::Data;
use color_eyre::eyre::{eyre, Result};
use log::debug;
use poise::serenity_prelude::{
ChannelId, Colour, Http, Message, MessageId, MessageUpdateEvent, User,
};
#[allow(unused_variables)]
pub async fn log_msg<T>(user: &User, content: String, color: T) -> Result<()>
where
T: Into<Colour>,
{
todo!()
}
pub async fn handle_create(data: &Data, msg: &Message) -> Result<()> {
let channel_id = msg.channel_id;
let message_id = msg.id;
let content = &msg.content;
let author_id = msg.author.id;
debug!("Logging message {message_id}");
data.storage
.store_message(&channel_id, &message_id, content.to_string(), author_id)
.await?;
Ok(())
}
pub async fn handle_update(data: &Data, event: &MessageUpdateEvent) -> Result<()> {
let stored = data
.storage
.get_message(&event.channel_id, &event.id)
.await?;
let new_content = event.content.as_ref().ok_or_else(|| {
eyre!("Couldn't get content from event! Is the MESSAGE_CONTENT intent enabled?")
})?;
let author = event
.author
.as_ref()
.ok_or_else(|| eyre!("Couldn't get author from message!"))?;
if new_content != &stored.content {
log_msg(author, new_content.to_string(), COLORS["yellow"]).await?;
debug!("Updating message {}", event.id);
data.storage
.store_message(
&event.channel_id,
&event.id,
new_content.to_string(),
author.id,
)
.await?;
}
Ok(())
}
pub async fn handle_delete(
http: impl AsRef<Http>,
data: &Data,
channel_id: &ChannelId,
message_id: &MessageId,
) -> Result<()> {
let stored = data.storage.get_message(channel_id, message_id).await?;
let user = http.as_ref().get_user(*stored.author.as_u64()).await?;
log_msg(&user, stored.content, COLORS["red"]).await?;
debug!("Deleting message {message_id}");
data.storage.delete_message(channel_id, message_id).await?;
Ok(())
}

View file

@ -5,9 +5,10 @@ use log::*;
use poise::serenity_prelude::{Activity, Context, OnlineStatus};
use poise::{Event, FrameworkContext};
mod delete;
mod delete_on_reaction;
mod eta;
mod expand_link;
mod message_logger;
pub mod pluralkit;
mod support_onboard;
@ -46,11 +47,30 @@ pub async fn handle(
return Ok(());
}
// store all new messages to monitor edits and deletes
message_logger::handle_create(data, new_message).await?;
eta::handle(ctx, new_message).await?;
expand_link::handle(ctx, new_message).await?;
}
Event::ReactionAdd { add_reaction } => delete::handle(ctx, add_reaction).await?,
Event::MessageDelete {
channel_id,
deleted_message_id,
guild_id: _,
} => message_logger::handle_delete(ctx, data, channel_id, deleted_message_id).await?,
Event::MessageUpdate {
old_if_available: _,
new: _,
event,
} => {
message_logger::handle_update(data, event).await?;
}
Event::ReactionAdd { add_reaction } => {
delete_on_reaction::handle(ctx, add_reaction).await?
}
Event::ThreadCreate { thread } => support_onboard::handle(ctx, thread).await?,