From 9fdff0acc0162299e704a4e4b9143e6dfffa02bc Mon Sep 17 00:00:00 2001 From: Mishio595 Date: Sun, 16 Sep 2018 11:37:51 -0600 Subject: Old message is optionally passed with message_update event --- src/cache/mod.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/cache/mod.rs') diff --git a/src/cache/mod.rs b/src/cache/mod.rs index 780c364..41d66d4 100644 --- a/src/cache/mod.rs +++ b/src/cache/mod.rs @@ -576,6 +576,48 @@ impl Cache { }) } + /// Retrieves a [`Channel`]'s message from the cache based on the channel's and + /// message's given Ids. + /// + /// **Note**: This will clone the entire message. + /// + /// # Examples + /// + /// Retrieving the message object from a channel, in a + /// [`EventHandler::message`] context: + /// + /// ```rust,no_run + /// use serenity::CACHE; + /// + /// # use serenity::model::id::{ChannelId, MessageId}; + /// # let message = ChannelId(0).message(MessageId(1)).unwrap(); + /// + /// let cache = CACHE.read(); + /// let fetched_message = cache.message(message.channel_id, message.id); + /// match fetched_message { + /// Some(m) => { + /// assert_eq!(message.content, m.content); + /// }, + /// None => { + /// println!("No message found in cache."); + /// } + /// } + /// ``` + /// + /// [`EventHandler::message`]: ../client/trait.EventHandler.html#method.message + /// [`Channel`]: ../model/channel/struct.Channel.html + #[inline] + pub fn message(&self, channel_id: C, message_id: M) -> Option + where C: Into, M: Into { + self._message(channel_id.into(), message_id.into()) + } + + fn _message(&self, channel_id: ChannelId, message_id: MessageId) -> Option { + self.messages.get(&channel_id).and_then(|messages| { + messages.get(&message_id).cloned() + }) + } + /// Retrieves a [`PrivateChannel`] from the cache's [`private_channels`] /// map, if it exists. /// -- cgit v1.2.3