diff options
| author | Austin Hellyer <[email protected]> | 2016-11-11 13:07:18 -0800 |
|---|---|---|
| committer | Austin Hellyer <[email protected]> | 2016-11-11 13:07:18 -0800 |
| commit | a40d821a7cf0361bbffdedcb5f91761a1a285401 (patch) | |
| tree | b787a46ad5619bb29121f6134bff4f0005fa2f96 /src/client | |
| parent | Add a clippy config (diff) | |
| download | serenity-a40d821a7cf0361bbffdedcb5f91761a1a285401.tar.xz serenity-a40d821a7cf0361bbffdedcb5f91761a1a285401.zip | |
Add delete_message_reactions + register event
Add the `delete_message_reactions` endpoint
(`DELETE /channels/{}/messages/{}/reactions`) and implement a method on
the `Message` struct for easy access, `delete_reactions`.
Register the `MESSAGE_REACTION_REMOVE_ALL` event and add an event
handler.
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/dispatch.rs | 12 | ||||
| -rw-r--r-- | src/client/event_store.rs | 1 | ||||
| -rw-r--r-- | src/client/http/mod.rs | 28 | ||||
| -rw-r--r-- | src/client/http/ratelimiting.rs | 1 | ||||
| -rw-r--r-- | src/client/mod.rs | 10 |
5 files changed, 52 insertions, 0 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index a629f33..875b9b3 100644 --- a/src/client/dispatch.rs +++ b/src/client/dispatch.rs @@ -513,6 +513,18 @@ pub fn dispatch(event: Result<Event>, }); } }, + Ok(Event::ReactionRemoveAll(event)) => { + if let Some(ref handler) = handler!(on_reaction_remove_all, event_store) { + let context = context(Some(event.channel_id), + conn, + login_type); + let handler = handler.clone(); + + thread::spawn(move || { + (handler)(context, event.channel_id, event.message_id); + }); + } + }, Ok(Event::Ready(event)) => { if let Some(ref handler) = handler!(on_ready, event_store) { update!(update_with_ready, event); diff --git a/src/client/event_store.rs b/src/client/event_store.rs index 57f8dee..576fe29 100644 --- a/src/client/event_store.rs +++ b/src/client/event_store.rs @@ -57,6 +57,7 @@ pub struct EventStore { pub on_message_delete_bulk: Option<Arc<Fn(Context, ChannelId, Vec<MessageId>) + Send + Sync + 'static>>, pub on_reaction_add: Option<Arc<Fn(Context, Reaction) + Send + Sync + 'static>>, pub on_reaction_remove: Option<Arc<Fn(Context, Reaction) + Send + Sync + 'static>>, + pub on_reaction_remove_all: Option<Arc<Fn(Context, ChannelId, MessageId) + Send + Sync + 'static>>, pub on_message_update: Option<Arc<Fn(Context, MessageUpdateEvent) + Send + Sync + 'static>>, pub on_note_update: Option<Arc<Fn(Context, UserId, String) + Send + Sync + 'static>>, pub on_presence_replace: Option<Arc<Fn(Context, Vec<Presence>) + Send + Sync + 'static>>, diff --git a/src/client/http/mod.rs b/src/client/http/mod.rs index fa7e874..94fccce 100644 --- a/src/client/http/mod.rs +++ b/src/client/http/mod.rs @@ -282,6 +282,34 @@ pub fn delete_messages(channel_id: u64, map: Value) -> Result<()> { channel_id)) } +/// Delete all of the [`Reaction`]s associated with a [`Message`]. +/// +/// # Examples +/// +/// ```rust,no_run +/// use serenity::client::http; +/// use serenity::model::{ChannelId, MessageId}; +/// +/// let channel_id = ChannelId(7); +/// let message_id = MessageId(8); +/// +/// match http::delete_message_reactions(channel_id.0, message_id.0) { +/// Ok(()) => println!("Reactions deleted"), +/// Err(why) => println!("Error deleting reactions: {:?}", why), +/// } +/// ``` +/// +/// [`Message`]: ../../model/struct.Message.html +/// [`Reaction`]: ../../model/struct.Reaction.html +pub fn delete_message_reactions(channel_id: u64, message_id: u64) + -> Result<()> { + verify(204, request!(Route::ChannelsIdMessagesIdReactions(channel_id), + delete, + "/channels/{}/messages/{}/reactions", + channel_id, + message_id)) +} + pub fn delete_permission(channel_id: u64, target_id: u64) -> Result<()> { verify(204, request!(Route::ChannelsIdPermissionsOverwriteId(channel_id), diff --git a/src/client/http/ratelimiting.rs b/src/client/http/ratelimiting.rs index 9928535..0302a7d 100644 --- a/src/client/http/ratelimiting.rs +++ b/src/client/http/ratelimiting.rs @@ -62,6 +62,7 @@ pub enum Route { ChannelsIdMessagesBulkDelete(u64), ChannelsIdMessagesId(u64), ChannelsIdMessagesIdAck(u64), + ChannelsIdMessagesIdReactions(u64), ChannelsIdMessagesIdReactionsUserIdType(u64), ChannelsIdPermissionsOverwriteId(u64), ChannelsIdPins(u64), diff --git a/src/client/mod.rs b/src/client/mod.rs index 77ec3e1..4db7a4e 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -713,6 +713,16 @@ impl Client { .on_reaction_remove = Some(Arc::new(handler)) } + /// Attached a handler for when a [`ReactionRemoveAll`] is received. + /// + /// [`ReactionRemoveAll`]: ../model/enum.Event.html#variant.ReactionRemoveAll + pub fn on_reaction_remove_all<F>(&mut self, handler: F) + where F: Fn(Context, ChannelId, MessageId) + Send + Sync + 'static { + self.event_store.lock() + .unwrap() + .on_reaction_remove_all = Some(Arc::new(handler)) + } + /// Register an event to be called whenever a Ready event is received. /// /// Registering a handler for the ready event is good for noting when your |