aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2016-11-11 13:07:18 -0800
committerAustin Hellyer <[email protected]>2016-11-11 13:07:18 -0800
commita40d821a7cf0361bbffdedcb5f91761a1a285401 (patch)
treeb787a46ad5619bb29121f6134bff4f0005fa2f96 /src/client
parentAdd a clippy config (diff)
downloadserenity-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.rs12
-rw-r--r--src/client/event_store.rs1
-rw-r--r--src/client/http/mod.rs28
-rw-r--r--src/client/http/ratelimiting.rs1
-rw-r--r--src/client/mod.rs10
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