From df8e78aded7ce2c8653e81edeaaa026e7c44c713 Mon Sep 17 00:00:00 2001 From: Ashelyn Rose Date: Sat, 1 Mar 2025 18:29:08 -0700 Subject: Edit command --- src/system/types.rs | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) (limited to 'src/system/types.rs') diff --git a/src/system/types.rs b/src/system/types.rs index c4da066..5aaf59c 100644 --- a/src/system/types.rs +++ b/src/system/types.rs @@ -2,8 +2,9 @@ use regex::Regex; use twilight_http::Client; use twilight_gateway::Shard; use twilight_mention::ParseMention; -use twilight_model::id::{marker::UserMarker, Id}; -use std::sync::Arc; +use twilight_model::channel::Message; +use twilight_model::id::{marker::{ChannelMarker, UserMarker}, Id}; +use std::{collections::HashMap, sync::Arc}; use tokio::sync::Mutex; #[derive(Clone)] @@ -20,7 +21,8 @@ pub struct Member { pub struct System { pub followed_user: Id, pub command_prefix: String, - pub members: Vec + pub members: Vec, + pub message_cache: Arc, (Member, Message)>>> } #[derive(Clone)] @@ -40,16 +42,30 @@ impl System { pub async fn resolve_mention<'system>(&'system self, maybe_mention: Option<&str>) -> Option<&'system Member> { if let Some(mention) = maybe_mention { if let Ok(mention) = Id::::parse(mention) { - for member in &self.members { - let is_member = {member.user_id.lock().await.map(|id| id == mention).unwrap_or(false)}; - - if is_member { - return Some(&member) - } - } + return self.get_member_by_id(mention).await; } } None } + + pub async fn get_member_by_id<'system>(&'system self, search_id: Id) -> Option<&'system Member> { + for member in &self.members { + let is_member = {member.user_id.lock().await.map(|id| id == search_id).unwrap_or(false)}; + + if is_member { + return Some(&member) + } + } + + return None + } + + pub async fn cache_most_recent_message(&self, channel: Id, message: Message, member: Member) { + self.message_cache.lock().await.insert(channel, (member, message)); + } + + pub async fn get_most_recent_message(&self, channel: Id) -> Option<(Message, Member)> { + self.message_cache.lock().await.get(&channel).map(|(member, message)| (message.clone(), member.clone())) + } } -- cgit 1.4.1