Skip to content

Commit

Permalink
feat: add message logger
Browse files Browse the repository at this point in the history
  • Loading branch information
getchoo committed Dec 8, 2023
1 parent 8376c45 commit 7e96bce
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 2 deletions.
File renamed without changes.
79 changes: 79 additions & 0 deletions src/handlers/event/message_logger.rs
Original file line number Diff line number Diff line change
@@ -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(())
}
24 changes: 22 additions & 2 deletions src/handlers/event/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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?,

Expand Down

0 comments on commit 7e96bce

Please sign in to comment.