diff options
| author | Zeyla Hellyer <[email protected]> | 2018-05-28 16:34:38 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2018-05-28 16:34:38 -0700 |
| commit | 6b5f3b98084b86b00e3f7e78b5eb9512e75e78a0 (patch) | |
| tree | 4011d56b63d88999eb8169e332c54f3eafe972ae /src/model/webhook.rs | |
| parent | Make Message Builder use &mut self instead of self (diff) | |
| parent | Futures shard manager #298 (WIP) (#300) (diff) | |
| download | serenity-6b5f3b98084b86b00e3f7e78b5eb9512e75e78a0.tar.xz serenity-6b5f3b98084b86b00e3f7e78b5eb9512e75e78a0.zip | |
Merge branch 'futures' into v0.6.x
Diffstat (limited to 'src/model/webhook.rs')
| -rw-r--r-- | src/model/webhook.rs | 200 |
1 files changed, 2 insertions, 198 deletions
diff --git a/src/model/webhook.rs b/src/model/webhook.rs index 8f2c6b2..511a283 100644 --- a/src/model/webhook.rs +++ b/src/model/webhook.rs @@ -2,24 +2,13 @@ use super::{ id::{ - ChannelId, - GuildId, + ChannelId, + GuildId, WebhookId }, user::User }; -#[cfg(feature = "model")] -use builder::ExecuteWebhook; -#[cfg(feature = "model")] -use internal::prelude::*; -#[cfg(feature = "model")] -use std::mem; -#[cfg(feature = "model")] -use super::channel::Message; -#[cfg(feature = "model")] -use {http, utils}; - /// A representation of a webhook, which is a low-effort way to post messages to /// channels. They do not necessarily require a bot user or authentication to /// use. @@ -52,188 +41,3 @@ pub struct Webhook { /// **Note**: This is not received when getting a webhook by its token. pub user: Option<User>, } - -#[cfg(feature = "model")] -impl Webhook { - /// Deletes the webhook. - /// - /// As this calls the [`http::delete_webhook_with_token`] function, - /// authentication is not required. - /// - /// [`http::delete_webhook_with_token`]: ../http/fn.delete_webhook_with_token.html - #[inline] - pub fn delete(&self) -> Result<()> { http::delete_webhook_with_token(self.id.0, &self.token) } - - /// - /// Edits the webhook in-place. All fields are optional. - /// - /// To nullify the avatar, pass `Some("")`. Otherwise, passing `None` will - /// not modify the avatar. - /// - /// Refer to [`http::edit_webhook`] for httprictions on editing webhooks. - /// - /// As this calls the [`http::edit_webhook_with_token`] function, - /// authentication is not required. - /// - /// # Examples - /// - /// Editing a webhook's name: - /// - /// ```rust,no_run - /// use serenity::http; - /// - /// let id = 245037420704169985; - /// let token = "ig5AO-wdVWpCBtUUMxmgsWryqgsW3DChbKYOINftJ4DCrUbnkedoYZD0VOH1QLr-S3sV"; - /// - /// let mut webhook = http::get_webhook_with_token(id, token) - /// .expect("valid webhook"); - /// - /// let _ = webhook.edit(Some("new name"), None).expect("Error editing"); - /// ``` - /// - /// Setting a webhook's avatar: - /// - /// ```rust,no_run - /// use serenity::http; - /// - /// let id = 245037420704169985; - /// let token = "ig5AO-wdVWpCBtUUMxmgsWryqgsW3DChbKYOINftJ4DCrUbnkedoYZD0VOH1QLr-S3sV"; - /// - /// let mut webhook = http::get_webhook_with_token(id, token) - /// .expect("valid webhook"); - /// - /// let image = serenity::utils::read_image("./webhook_img.png") - /// .expect("Error reading image"); - /// - /// let _ = webhook.edit(None, Some(&image)).expect("Error editing"); - /// ``` - /// - /// [`http::edit_webhook`]: ../http/fn.edit_webhook.html - /// [`http::edit_webhook_with_token`]: ../http/fn.edit_webhook_with_token.html - pub fn edit(&mut self, name: Option<&str>, avatar: Option<&str>) -> Result<()> { - if name.is_none() && avatar.is_none() { - return Ok(()); - } - - let mut map = Map::new(); - - if let Some(avatar) = avatar { - map.insert( - "avatar".to_string(), - if avatar.is_empty() { - Value::Null - } else { - Value::String(avatar.to_string()) - }, - ); - } - - if let Some(name) = name { - map.insert("name".to_string(), Value::String(name.to_string())); - } - - match http::edit_webhook_with_token(self.id.0, &self.token, &map) { - Ok(replacement) => { - mem::replace(self, replacement); - - Ok(()) - }, - Err(why) => Err(why), - } - } - - /// Executes a webhook with the fields set via the given builder. - /// - /// The builder provides a method of setting only the fields you need, - /// without needing to pass a long set of arguments. - /// - /// # Examples - /// - /// Execute a webhook with message content of `test`: - /// - /// ```rust,no_run - /// use serenity::http; - /// - /// let id = 245037420704169985; - /// let token = "ig5AO-wdVWpCBtUUMxmgsWryqgsW3DChbKYOINftJ4DCrUbnkedoYZD0VOH1QLr-S3sV"; - /// - /// let mut webhook = http::get_webhook_with_token(id, token) - /// .expect("valid webhook"); - /// - /// let _ = webhook.execute(false, |mut w| { - /// w.content("test"); - /// - /// w - /// }); - /// ``` - /// - /// Execute a webhook with message content of `test`, overriding the - /// username to `serenity`, and sending an embed: - /// - /// ```rust,no_run - /// use serenity::http; - /// use serenity::model::channel::Embed; - /// - /// let id = 245037420704169985; - /// let token = "ig5AO-wdVWpCBtUUMxmgsWryqgsW3DChbKYOINftJ4DCrUbnkedoYZD0VOH1QLr-S3sV"; - /// - /// let mut webhook = http::get_webhook_with_token(id, token) - /// .expect("valid webhook"); - /// - /// let embed = Embed::fake(|mut e| { - /// e.title("Rust's website"); - /// e.description("Rust is a systems programming language that runs - /// blazingly fast, prevents segfaults, and guarantees - /// thread safety."); - /// e.url("https://rust-lang.org"); - /// - /// e - /// }); - /// - /// let _ = webhook.execute(false, |mut w| { - /// w.content("test"); - /// w.username("serenity"); - /// w.embeds(vec![embed]); - /// - /// w - /// }); - /// ``` - #[inline] - pub fn execute<F: FnOnce(ExecuteWebhook) -> ExecuteWebhook>(&self, - wait: bool, - f: F) - -> Result<Option<Message>> { - let map = utils::vecmap_to_json_map(f(ExecuteWebhook::default()).0); - - http::execute_webhook(self.id.0, &self.token, wait, &map) - } - - /// Retrieves the latest information about the webhook, editing the - /// webhook in-place. - /// - /// As this calls the [`http::get_webhook_with_token`] function, - /// authentication is not required. - /// - /// [`http::get_webhook_with_token`]: ../http/fn.get_webhook_with_token.html - pub fn refresh(&mut self) -> Result<()> { - match http::get_webhook_with_token(self.id.0, &self.token) { - Ok(replacement) => { - let _ = mem::replace(self, replacement); - - Ok(()) - }, - Err(why) => Err(why), - } - } -} - -#[cfg(feature = "model")] -impl WebhookId { - /// Retrieves the webhook by the Id. - /// - /// **Note**: Requires the [Manage Webhooks] permission. - /// - /// [Manage Webhooks]: permissions/constant.MANAGE_WEBHOOKS.html - #[inline] - pub fn get(&self) -> Result<Webhook> { http::get_webhook(self.0) } -} |