feat: add message logger
This commit is contained in:
parent
8376c45c2d
commit
7e96bced41
3 changed files with 101 additions and 2 deletions
79
src/handlers/event/message_logger.rs
Normal file
79
src/handlers/event/message_logger.rs
Normal 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(())
|
||||||
|
}
|
|
@ -5,9 +5,10 @@ use log::*;
|
||||||
use poise::serenity_prelude::{Activity, Context, OnlineStatus};
|
use poise::serenity_prelude::{Activity, Context, OnlineStatus};
|
||||||
use poise::{Event, FrameworkContext};
|
use poise::{Event, FrameworkContext};
|
||||||
|
|
||||||
mod delete;
|
mod delete_on_reaction;
|
||||||
mod eta;
|
mod eta;
|
||||||
mod expand_link;
|
mod expand_link;
|
||||||
|
mod message_logger;
|
||||||
pub mod pluralkit;
|
pub mod pluralkit;
|
||||||
mod support_onboard;
|
mod support_onboard;
|
||||||
|
|
||||||
|
@ -46,11 +47,30 @@ pub async fn handle(
|
||||||
return Ok(());
|
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?;
|
eta::handle(ctx, new_message).await?;
|
||||||
expand_link::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?,
|
Event::ThreadCreate { thread } => support_onboard::handle(ctx, thread).await?,
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue