Change MessageHandle to be a struct wrapping the IDs

Signed-off-by: trivernis <trivernis@protonmail.com>
pull/9/head
trivernis 3 years ago
parent 45d2ac84b1
commit abc97bea45
Signed by: Trivernis
GPG Key ID: DFFFCC2C7A02DB45

@ -1,4 +1,28 @@
use crate::menu::traits::EventDrivenMessage;
use serenity::model::id::{ChannelId, MessageId};
pub type MessageHandle = (u64, u64);
pub type BoxedEventDrivenMessage = Box<dyn EventDrivenMessage>;
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq, Eq, Hash)]
pub struct MessageHandle {
pub channel_id: u64,
pub message_id: u64,
}
impl MessageHandle {
/// Creates a new message handle
pub fn new(channel_id: ChannelId, message_id: MessageId) -> Self {
Self {
message_id: message_id.0,
channel_id: channel_id.0,
}
}
/// Creates a new message handle from raw ids
pub fn from_raw_ids(channel_id: u64, message_id: u64) -> Self {
Self {
message_id,
channel_id,
}
}
}

@ -74,9 +74,10 @@ pub async fn handle_message_delete(
let mut listeners_lock = listeners.lock().await;
log::trace!("Listener locked.");
if let Some(msg) = listeners_lock.get(&(channel_id.0, message_id.0)) {
let handle = MessageHandle::new(channel_id, message_id);
if let Some(msg) = listeners_lock.get(&handle) {
affected_messages.push(Arc::clone(msg));
listeners_lock.remove(&(channel_id.0, message_id.0));
listeners_lock.remove(&handle);
}
}
log::trace!("Listener unlocked");
@ -102,9 +103,10 @@ pub async fn handle_message_delete_bulk(
log::trace!("Listener locked.");
for message_id in message_ids {
if let Some(msg) = listeners_lock.get_mut(&(channel_id.0, message_id.0)) {
let handle = MessageHandle::new(channel_id, *message_id);
if let Some(msg) = listeners_lock.get_mut(&handle) {
affected_messages.push(Arc::clone(msg));
listeners_lock.remove(&(channel_id.0, message_id.0));
listeners_lock.remove(&handle);
}
}
}
@ -126,10 +128,9 @@ pub async fn handle_reaction_add(ctx: &Context, reaction: &Reaction) -> Serenity
let mut listeners_lock = listeners.lock().await;
log::trace!("Listener locked.");
let message_id = reaction.message_id;
let channel_id = reaction.channel_id;
let handle = MessageHandle::new(reaction.channel_id, reaction.message_id);
if let Some(msg) = listeners_lock.get_mut(&(channel_id.0, message_id.0)) {
if let Some(msg) = listeners_lock.get_mut(&handle) {
affected_messages.push(Arc::clone(&msg));
}
}
@ -151,10 +152,9 @@ pub async fn handle_reaction_remove(ctx: &Context, reaction: &Reaction) -> Seren
let mut listeners_lock = listeners.lock().await;
log::trace!("Listener locked.");
let message_id = reaction.message_id;
let channel_id = reaction.channel_id;
let handle = MessageHandle::new(reaction.channel_id, reaction.message_id);
if let Some(msg) = listeners_lock.get_mut(&(channel_id.0, message_id.0)) {
if let Some(msg) = listeners_lock.get_mut(&handle) {
affected_messages.push(Arc::clone(&msg));
}
}

@ -76,7 +76,7 @@ impl<'a> Menu<'a> {
/// Removes all reactions from the menu
pub(crate) async fn close(&mut self, http: &Http) -> SerenityUtilsResult<()> {
log::debug!("Closing menu...");
http.delete_message_reactions(self.message.0, self.message.1)
http.delete_message_reactions(self.message.channel_id, self.message.message_id)
.await?;
self.closed = true;
Ok(())
@ -84,7 +84,10 @@ impl<'a> Menu<'a> {
/// Returns the message of the menu
pub async fn get_message(&self, ctx: &Context) -> SerenityUtilsResult<Message> {
let msg = ctx.http.get_message(self.message.0, self.message.1).await?;
let msg = ctx
.http
.get_message(self.message.channel_id, self.message.message_id)
.await?;
Ok(msg)
}
@ -248,7 +251,11 @@ impl MenuBuilder {
}
/// builds the menu
pub async fn build(self, ctx: &Context, channel_id: ChannelId) -> SerenityUtilsResult<()> {
pub async fn build(
self,
ctx: &Context,
channel_id: ChannelId,
) -> SerenityUtilsResult<MessageHandle> {
log::debug!("Building menu...");
let mut current_page = self
.pages
@ -268,8 +275,10 @@ impl MenuBuilder {
controls.sort_by_key(|(_, a)| a.position);
log::debug!("Creating menu...");
let message_handle = MessageHandle::new(message.channel_id, message.id);
let menu = Menu {
message: (message.channel_id.0, message.id.0),
message: message_handle,
pages: self.pages,
current_page: self.current_page,
controls: self.controls,
@ -281,10 +290,7 @@ impl MenuBuilder {
{
let mut listeners_lock = listeners.lock().await;
log::trace!("Listeners locked.");
listeners_lock.insert(
(message.channel_id.0, message.id.0),
Arc::new(Mutex::new(Box::new(menu))),
);
listeners_lock.insert(message_handle, Arc::new(Mutex::new(Box::new(menu))));
}
log::debug!("Adding controls...");
@ -295,6 +301,6 @@ impl MenuBuilder {
}
log::debug!("Menu successfully created.");
Ok(())
Ok(message_handle)
}
}

@ -9,4 +9,5 @@ pub use menu::{
ActionContainer, ControlActionArc, Menu, MenuBuilder, CLOSE_MENU_EMOJI, NEXT_PAGE_EMOJI,
PREVIOUS_PAGE_EMOJI,
};
pub use traits::EventDrivenMessage;

Loading…
Cancel
Save