diff options
| author | acdenisSK <[email protected]> | 2017-10-24 18:10:10 +0200 |
|---|---|---|
| committer | acdenisSK <[email protected]> | 2017-10-24 18:10:10 +0200 |
| commit | ef60c3cd5b93d61ff8200f5f6871b449bf7dccb5 (patch) | |
| tree | ff9ec9e09dc363c05c6b582380a120ca47290a9f /src/model | |
| parent | Remove `on_` prefix to EventHandler tymethods (diff) | |
| parent | Fall back to `str::parse` if `parse_username` fails (diff) | |
| download | serenity-ef60c3cd5b93d61ff8200f5f6871b449bf7dccb5.tar.xz serenity-ef60c3cd5b93d61ff8200f5f6871b449bf7dccb5.zip | |
Merge v0.4.2
Diffstat (limited to 'src/model')
| -rw-r--r-- | src/model/channel/channel_id.rs | 10 | ||||
| -rw-r--r-- | src/model/channel/guild_channel.rs | 2 | ||||
| -rw-r--r-- | src/model/channel/mod.rs | 11 | ||||
| -rw-r--r-- | src/model/event.rs | 4 | ||||
| -rw-r--r-- | src/model/guild/guild_id.rs | 23 | ||||
| -rw-r--r-- | src/model/guild/mod.rs | 20 | ||||
| -rw-r--r-- | src/model/misc.rs | 7 | ||||
| -rw-r--r-- | src/model/user.rs | 24 |
8 files changed, 90 insertions, 11 deletions
diff --git a/src/model/channel/channel_id.rs b/src/model/channel/channel_id.rs index 3bed660..158ebcf 100644 --- a/src/model/channel/channel_id.rs +++ b/src/model/channel/channel_id.rs @@ -124,10 +124,14 @@ impl ChannelId { .into_iter() .map(|message_id| message_id.as_ref().0) .collect::<Vec<u64>>(); + + if ids.len() == 1 { + self.delete_message(ids[0]) + } else { + let map = json!({ "messages": ids }); - let map = json!({ "messages": ids }); - - http::delete_messages(self.0, &map) + http::delete_messages(self.0, &map) + } } /// Deletes all permission overrides in the channel from a member or role. diff --git a/src/model/channel/guild_channel.rs b/src/model/channel/guild_channel.rs index dacbfac..3f09bd7 100644 --- a/src/model/channel/guild_channel.rs +++ b/src/model/channel/guild_channel.rs @@ -260,7 +260,7 @@ impl GuildChannel { /// [`Channel::delete_messages`]: enum.Channel.html#method.delete_messages /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html #[inline] - pub fn delete_messages<'a, It: IntoIterator<Item=&'a MessageId>>(&self, message_ids: It) -> Result<()> { + pub fn delete_messages<T: AsRef<MessageId>, It: IntoIterator<Item=T>>(&self, message_ids: It) -> Result<()> { self.id.delete_messages(message_ids) } diff --git a/src/model/channel/mod.rs b/src/model/channel/mod.rs index f7ecc0f..ae46805 100644 --- a/src/model/channel/mod.rs +++ b/src/model/channel/mod.rs @@ -67,6 +67,7 @@ impl Channel { /// [`Message::react`]: struct.Message.html#method.react /// [Add Reactions]: permissions/constant.ADD_REACTIONS.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn create_reaction<M, R>(&self, message_id: M, reaction_type: R) -> Result<()> where M: Into<MessageId>, R: Into<ReactionType> { @@ -110,6 +111,7 @@ impl Channel { /// [`Message::delete`]: struct.Message.html#method.delete /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn delete_message<M: Into<MessageId>>(&self, message_id: M) -> Result<()> { self.id().delete_message(message_id) @@ -123,6 +125,7 @@ impl Channel { /// [`Reaction`]: struct.Reaction.html /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn delete_reaction<M, R>(&self, message_id: M, @@ -154,6 +157,7 @@ impl Channel { /// [`Message`]: struct.Message.html /// [`the limit`]: ../builder/struct.CreateMessage.html#method.content #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn edit_message<F, M>(&self, message_id: M, f: F) -> Result<Message> where F: FnOnce(CreateMessage) -> CreateMessage, M: Into<MessageId> { @@ -181,6 +185,7 @@ impl Channel { /// /// [Read Message History]: permissions/constant.READ_MESSAGE_HISTORY.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn message<M: Into<MessageId>>(&self, message_id: M) -> Result<Message> { self.id().message(message_id) @@ -203,6 +208,7 @@ impl Channel { /// /// [Read Message History]: permissions/constant.READ_MESSAGE_HISTORY.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn messages<F>(&self, f: F) -> Result<Vec<Message>> where F: FnOnce(GetMessages) -> GetMessages { @@ -226,6 +232,7 @@ impl Channel { /// [`User`]: struct.User.html /// [Read Message History]: permissions/constant.READ_MESSAGE_HISTORY.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn reaction_users<M, R, U>(&self, message_id: M, @@ -264,6 +271,7 @@ impl Channel { /// [`ChannelId`]: struct.ChannelId.html /// [`ModelError::MessageTooLong`]: enum.ModelError.html#variant.MessageTooLong #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn say(&self, content: &str) -> Result<Message> { self.id().say(content) } @@ -286,6 +294,7 @@ impl Channel { /// [Attach Files]: permissions/constant.ATTACH_FILES.html /// [Send Messages]: permissions/constant.SEND_MESSAGES.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn send_files<'a, F, T, It: IntoIterator<Item=T>>(&self, files: It, f: F) -> Result<Message> where F: FnOnce(CreateMessage) -> CreateMessage, T: Into<AttachmentType<'a>> { @@ -312,6 +321,7 @@ impl Channel { /// [`CreateMessage`]: ../builder/struct.CreateMessage.html /// [Send Messages]: permissions/constant.SEND_MESSAGES.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn send_message<F>(&self, f: F) -> Result<Message> where F: FnOnce(CreateMessage) -> CreateMessage { @@ -325,6 +335,7 @@ impl Channel { /// [`Message`]: struct.Message.html /// [Manage Messages]: permissions/constant.MANAGE_MESSAGES.html #[cfg(feature = "model")] + #[deprecated(since = "0.4.2", note = "Use the inner channel's method")] #[inline] pub fn unpin<M: Into<MessageId>>(&self, message_id: M) -> Result<()> { self.id().unpin(message_id) diff --git a/src/model/event.rs b/src/model/event.rs index 90a6828..aea05b1 100644 --- a/src/model/event.rs +++ b/src/model/event.rs @@ -404,7 +404,9 @@ impl CacheUpdate for GuildEmojisUpdateEvent { fn update(&mut self, cache: &mut Cache) -> Option<()> { cache.guilds.get_mut(&self.guild_id).map(|guild| { - guild.with_mut(|g| g.emojis.extend(self.emojis.clone())) + guild.with_mut(|g| { + g.emojis.clone_from(&self.emojis) + }); }); None diff --git a/src/model/guild/guild_id.rs b/src/model/guild/guild_id.rs index 2771fc8..7a851bb 100644 --- a/src/model/guild/guild_id.rs +++ b/src/model/guild/guild_id.rs @@ -110,7 +110,7 @@ impl GuildId { pub fn create_channel(&self, name: &str, kind: ChannelType) -> Result<GuildChannel> { let map = json!({ "name": name, - "type": kind.name(), + "type": kind as u8, }); http::create_channel(self.0, &map) @@ -311,6 +311,27 @@ impl GuildId { http::edit_role(self.0, role_id.into().0, &map) } + /// Edits the order of [`Role`]s + /// Requires the [Manage Roles] permission. + /// + /// # Examples + /// + /// Change the order of a role: + /// + /// ```rust,ignore + /// use serenity::model::{GuildId, RoleId}; + /// GuildId(7).edit_role_position(RoleId(8), 2); + /// ``` + /// + /// [`Role`]: struct.Role.html + /// [Manage Roles]: permissions/constant.MANAGE_ROLES.html + #[inline] + pub fn edit_role_position<R>(&self, role_id: R, position: u64) -> Result<Vec<Role>> + where R: Into<RoleId> { + http::edit_role_position(self.0, role_id.into().0, position) + } + + /// Search the cache for the guild. #[cfg(feature = "cache")] pub fn find(&self) -> Option<Arc<RwLock<Guild>>> { CACHE.read().guild(*self) } diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs index a90445a..7aeb98f 100644 --- a/src/model/guild/mod.rs +++ b/src/model/guild/mod.rs @@ -600,6 +600,26 @@ impl Guild { self.id.edit_role(role_id, f) } + /// Edits the order of [`Role`]s + /// Requires the [Manage Roles] permission. + /// + /// # Examples + /// + /// Change the order of a role: + /// + /// ```rust,ignore + /// use serenity::model::RoleId; + /// guild.edit_role_position(RoleId(8), 2); + /// ``` + /// + /// [`Role`]: struct.Role.html + /// [Manage Roles]: permissions/constant.MANAGE_ROLES.html + #[inline] + pub fn edit_role_position<R>(&self, role_id: R, position: u64) -> Result<Vec<Role>> + where R: Into<RoleId> { + self.id.edit_role_position(role_id, position) + } + /// Gets a partial amount of guild data by its Id. /// /// Requires that the current user be in the guild. diff --git a/src/model/misc.rs b/src/model/misc.rs index af49a76..3398a14 100644 --- a/src/model/misc.rs +++ b/src/model/misc.rs @@ -125,9 +125,10 @@ impl FromStr for UserId { type Err = UserIdParseError; fn from_str(s: &str) -> StdResult<Self, Self::Err> { - utils::parse_username(s) - .ok_or_else(|| UserIdParseError::InvalidFormat) - .map(UserId) + Ok(match utils::parse_username(s) + Some(id) => UserId(id), + None => s.parse::<u64>().map(UserId).map_err(|_| UserIdParseError::InvalidFormat) + }) } } diff --git a/src/model/user.rs b/src/model/user.rs index 0d8388d..1bf69e4 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -349,7 +349,7 @@ impl Default for OnlineStatus { } /// Information about a user. -#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Hash)] +#[derive(Clone, Debug, Deserialize)] pub struct User { /// The unique Id of the user. Can be used to calculate the account's /// cration date. @@ -371,6 +371,22 @@ pub struct User { pub name: String, } +use std::hash::{Hash, Hasher}; + +impl PartialEq for User { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + } +} + +impl Eq for User {} + +impl Hash for User { + fn hash<H: Hasher>(&self, hasher: &mut H) { + self.id.hash(hasher); + } +} + #[cfg(feature = "model")] impl User { /// Returns the formatted URL of the user's icon, if one exists. @@ -584,7 +600,11 @@ impl User { CACHE.read() .guilds .get(&_guild_id) - .map(|g| g.read().roles.contains_key(&role_id)) + .map(|g| { + g.read().unwrap().members.get(&self.id) + .map(|m| m.roles.contains(&role_id)) + .unwrap_or(false) + }) .unwrap_or(false) } else { true |