diff options
| author | Mei Boudreau <[email protected]> | 2017-10-05 11:06:12 -0400 |
|---|---|---|
| committer | alex <[email protected]> | 2017-10-05 17:06:12 +0200 |
| commit | 91c8ec4ae7540956a714ce9584074538b45467cc (patch) | |
| tree | e69f7117f8da7179894a22b896664a2ebd77e1f0 /src | |
| parent | Merge branch 'v0.4.1' into v0.5.0 (diff) | |
| download | serenity-91c8ec4ae7540956a714ce9584074538b45467cc.tar.xz serenity-91c8ec4ae7540956a714ce9584074538b45467cc.zip | |
Change default_channel to return a pointer (#179)
Diffstat (limited to 'src')
| -rw-r--r-- | src/model/guild/member.rs | 4 | ||||
| -rw-r--r-- | src/model/guild/mod.rs | 10 |
2 files changed, 8 insertions, 6 deletions
diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs index 09474f9..70289b9 100644 --- a/src/model/guild/member.rs +++ b/src/model/guild/member.rs @@ -297,9 +297,11 @@ impl Member { None => return Err(From::from(ModelError::ItemMissing)), }; + let default_channel_reader = default_channel.read().unwrap(); + Ok( guild - .permissions_for(default_channel.id, self.user.read().unwrap().id), + .permissions_for(default_channel_reader.id, self.user.read().unwrap().id), ) } diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs index 3979cd9..df8bd2c 100644 --- a/src/model/guild/mod.rs +++ b/src/model/guild/mod.rs @@ -127,12 +127,12 @@ impl Guild { /// Returns the "default" channel of the guild. /// (This returns the first channel that can be read by the bot, if there isn't one, /// returns `None`) - pub fn default_channel(&self) -> Option<GuildChannel> { + pub fn default_channel(&self) -> Option<Arc<RwLock<GuildChannel>>> { let uid = CACHE.read().unwrap().user.id; for (cid, channel) in &self.channels { if self.permissions_for(*cid, uid).read_messages() { - return Some(channel.read().unwrap().clone()); + return Some(channel.clone()); } } @@ -144,11 +144,11 @@ impl Guild { /// returns `None`) /// Note however that this is very costy if used in a server with lots of channels, /// members, or both. - pub fn default_channel_guaranteed(&self) -> Option<GuildChannel> { + pub fn default_channel_guaranteed(&self) -> Option<Arc<RwLock<GuildChannel>>> { for (cid, channel) in &self.channels { for memid in self.members.keys() { if self.permissions_for(*cid, *memid).read_messages() { - return Some(channel.read().unwrap().clone()); + return Some(channel.clone()); } } } @@ -168,7 +168,7 @@ impl Guild { None => return Err(Error::Model(ModelError::ItemMissing)), }; - let perms = self.permissions_for(default_channel.id, member.user.read().unwrap().id); + let perms = self.permissions_for(default_channel.read().unwrap().id, member.user.read().unwrap().id); permissions.remove(perms); Ok(permissions.is_empty()) |