Refactor reactions to use api::options

This commit is contained in:
Flori Weber 2023-06-11 19:13:38 +02:00
parent 876cbd319d
commit 8d6fab0858
1 changed files with 58 additions and 93 deletions

View File

@ -1,10 +1,6 @@
use reqwest::Client; use reqwest::Client;
use crate::{ use crate::{api::handle_request, errors::ChorusLibError, instance::UserMeta, types};
instance::UserMeta,
limit::LimitedRequester,
types::{self},
};
/** /**
Useful metadata for working with [`types::Reaction`], bundled together nicely. Useful metadata for working with [`types::Reaction`], bundled together nicely.
@ -23,33 +19,28 @@ impl ReactionMeta {
* `user` - A mutable reference to a [`UserMeta`] instance. * `user` - A mutable reference to a [`UserMeta`] instance.
# Returns # Returns
A `Result` containing a [`reqwest::Response`] or a [`crate::errors::ChorusLibError`]. An `Option` [`crate::errors::ChorusLibError`] if something went wrong.
Fires a `Message Reaction Remove All` Gateway event. Fires a `Message Reaction Remove All` Gateway event.
# Reference # Reference
See [https://discord.com/developers/docs/resources/channel#delete-all-reactions](https://discord.com/developers/docs/resources/channel#delete-all-reactions) See [https://discord.com/developers/docs/resources/channel#delete-all-reactions](https://discord.com/developers/docs/resources/channel#delete-all-reactions)
*/ */
pub async fn delete_all( pub async fn delete_all(&self, user: &mut UserMeta) -> Option<ChorusLibError> {
&self, let belongs_to = user.belongs_to.borrow();
user: &mut UserMeta,
) -> Result<reqwest::Response, crate::errors::ChorusLibError> {
let mut belongs_to = user.belongs_to.borrow_mut();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/", "{}/channels/{}/messages/{}/reactions/",
belongs_to.urls.get_api(), belongs_to.urls.get_api(),
self.channel_id, self.channel_id,
self.message_id self.message_id
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
LimitedRequester::new() match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
.await Ok(_) => None,
.send_request( Err(e) => Some(ChorusLibError::InvalidResponseError {
request, error: e.to_string(),
crate::api::limits::LimitType::Channel, }),
&mut belongs_to.limits, }
&mut user.limits,
)
.await
} }
/** /**
@ -62,17 +53,13 @@ impl ReactionMeta {
* `user` - A mutable reference to a [`UserMeta`] instance. * `user` - A mutable reference to a [`UserMeta`] instance.
# Returns # Returns
A `Result` containing a [`reqwest::Response`] or a [`crate::errors::ChorusLibError`]. A [`crate::errors::ChorusLibError`] if something went wrong.
# Reference # Reference
See [https://discord.com/developers/docs/resources/channel#get-reactions](https://discord.com/developers/docs/resources/channel#get-reactions) See [https://discord.com/developers/docs/resources/channel#get-reactions](https://discord.com/developers/docs/resources/channel#get-reactions)
*/ */
pub async fn get( pub async fn get(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
&self, let belongs_to = user.belongs_to.borrow();
emoji: &str,
user: &mut UserMeta,
) -> Result<reqwest::Response, crate::errors::ChorusLibError> {
let mut belongs_to = user.belongs_to.borrow_mut();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/", "{}/channels/{}/messages/{}/reactions/{}/",
belongs_to.urls.get_api(), belongs_to.urls.get_api(),
@ -80,16 +67,14 @@ impl ReactionMeta {
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().get(url).bearer_auth(user.token()); let request = Client::new().get(url).bearer_auth(user.token());
LimitedRequester::new() match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
.await Ok(_) => None,
.send_request( Err(e) => Some(ChorusLibError::InvalidResponseError {
request, error: e.to_string(),
crate::api::limits::LimitType::Channel, }),
&mut belongs_to.limits, }
&mut user.limits,
)
.await
} }
/** /**
@ -103,18 +88,14 @@ impl ReactionMeta {
* `user` - A mutable reference to a [`UserMeta`] instance. * `user` - A mutable reference to a [`UserMeta`] instance.
# Returns # Returns
A `Result` containing a [`reqwest::Response`] or a [`crate::errors::ChorusLibError`]. A [`crate::errors::ChorusLibError`] if something went wrong.
Fires a `Message Reaction Remove Emoji` Gateway event. Fires a `Message Reaction Remove Emoji` Gateway event.
# Reference # Reference
See [https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji](https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji) See [https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji](https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji)
*/ */
pub async fn delete_emoji( pub async fn delete_emoji(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
&self, let belongs_to = user.belongs_to.borrow();
emoji: &str,
user: &mut UserMeta,
) -> Result<reqwest::Response, crate::errors::ChorusLibError> {
let mut belongs_to = user.belongs_to.borrow_mut();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/", "{}/channels/{}/messages/{}/reactions/{}/",
belongs_to.urls.get_api(), belongs_to.urls.get_api(),
@ -122,16 +103,14 @@ impl ReactionMeta {
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
LimitedRequester::new() match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
.await Ok(_) => None,
.send_request( Err(e) => Some(ChorusLibError::InvalidResponseError {
request, error: e.to_string(),
crate::api::limits::LimitType::Channel, }),
&mut belongs_to.limits, }
&mut user.limits,
)
.await
} }
/** /**
@ -155,12 +134,8 @@ impl ReactionMeta {
# Reference # Reference
See [https://discord.com/developers/docs/resources/channel#create-reaction](https://discord.com/developers/docs/resources/channel#create-reaction) See [https://discord.com/developers/docs/resources/channel#create-reaction](https://discord.com/developers/docs/resources/channel#create-reaction)
*/ */
pub async fn create( pub async fn create(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
&self, let belongs_to = user.belongs_to.borrow();
emoji: &str,
user: &mut UserMeta,
) -> Result<reqwest::Response, crate::errors::ChorusLibError> {
let mut belongs_to = user.belongs_to.borrow_mut();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/@me/", "{}/channels/{}/messages/{}/reactions/{}/@me/",
belongs_to.urls.get_api(), belongs_to.urls.get_api(),
@ -168,16 +143,14 @@ impl ReactionMeta {
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().put(url).bearer_auth(user.token()); let request = Client::new().put(url).bearer_auth(user.token());
LimitedRequester::new() match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
.await Ok(_) => None,
.send_request( Err(e) => Some(ChorusLibError::InvalidResponseError {
request, error: e.to_string(),
crate::api::limits::LimitType::Channel, }),
&mut belongs_to.limits, }
&mut user.limits,
)
.await
} }
/** /**
@ -197,12 +170,8 @@ impl ReactionMeta {
# Reference # Reference
See [https://discord.com/developers/docs/resources/channel#delete-own-reaction](https://discord.com/developers/docs/resources/channel#delete-own-reaction) See [https://discord.com/developers/docs/resources/channel#delete-own-reaction](https://discord.com/developers/docs/resources/channel#delete-own-reaction)
*/ */
pub async fn remove( pub async fn remove(&self, emoji: &str, user: &mut UserMeta) -> Option<ChorusLibError> {
&self, let belongs_to = user.belongs_to.borrow();
emoji: &str,
user: &mut UserMeta,
) -> Result<reqwest::Response, crate::errors::ChorusLibError> {
let mut belongs_to = user.belongs_to.borrow_mut();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/@me/", "{}/channels/{}/messages/{}/reactions/{}/@me/",
belongs_to.urls.get_api(), belongs_to.urls.get_api(),
@ -210,16 +179,14 @@ impl ReactionMeta {
self.message_id, self.message_id,
emoji emoji
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
LimitedRequester::new() match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
.await Ok(_) => None,
.send_request( Err(e) => Some(ChorusLibError::InvalidResponseError {
request, error: e.to_string(),
crate::api::limits::LimitType::Channel, }),
&mut belongs_to.limits, }
&mut user.limits,
)
.await
} }
/** /**
@ -247,8 +214,8 @@ impl ReactionMeta {
user_id: &str, user_id: &str,
emoji: &str, emoji: &str,
user: &mut UserMeta, user: &mut UserMeta,
) -> Result<reqwest::Response, crate::errors::ChorusLibError> { ) -> Option<ChorusLibError> {
let mut belongs_to = user.belongs_to.borrow_mut(); let belongs_to = user.belongs_to.borrow();
let url = format!( let url = format!(
"{}/channels/{}/messages/{}/reactions/{}/{}", "{}/channels/{}/messages/{}/reactions/{}/{}",
belongs_to.urls.get_api(), belongs_to.urls.get_api(),
@ -257,15 +224,13 @@ impl ReactionMeta {
emoji, emoji,
user_id user_id
); );
drop(belongs_to);
let request = Client::new().delete(url).bearer_auth(user.token()); let request = Client::new().delete(url).bearer_auth(user.token());
LimitedRequester::new() match handle_request(request, user, crate::api::limits::LimitType::Channel).await {
.await Ok(_) => None,
.send_request( Err(e) => Some(ChorusLibError::InvalidResponseError {
request, error: e.to_string(),
crate::api::limits::LimitType::Channel, }),
&mut belongs_to.limits, }
&mut user.limits,
)
.await
} }
} }