diff options
| author | Zeyla Hellyer <[email protected]> | 2017-10-10 20:08:11 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-10-10 20:08:11 -0700 |
| commit | 93e0a4215c915b98cf433ac6d0bcfbc60f0168ec (patch) | |
| tree | 727111506d1f89cd8a511b8b79c102131222421f /src/framework | |
| parent | Resume on resumable session invalidations (diff) | |
| download | serenity-93e0a4215c915b98cf433ac6d0bcfbc60f0168ec.tar.xz serenity-93e0a4215c915b98cf433ac6d0bcfbc60f0168ec.zip | |
Switch to parking_lot::{Mutex, RwLock}
Switch to the `parking_lot` crate's implementations of
`std::sync::Mutex` and `std::sync::RwLock`, which are more efficient.
A writeup on why `parking_lot` is more efficient can be read here:
<https://github.com/Amanieu/parking_lot>
Upgrade path:
Modify `mutex.lock().unwrap()` usage to `mutex.lock()` (not needing to
unwrap or handle a result), and
`rwlock.read().unwrap()`/`rwlock.write().unwrap()` usage to
`rwlock.read()` and `rwlock.write()`.
For example, modify:
```rust
use serenity::CACHE;
println!("{}", CACHE.read().unwrap().user.id);
```
to:
```rust
use serenity::CACHE;
println!("{}", CACHE.read().user.id);
```
Diffstat (limited to 'src/framework')
| -rw-r--r-- | src/framework/standard/help_commands.rs | 14 | ||||
| -rw-r--r-- | src/framework/standard/mod.rs | 5 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/framework/standard/help_commands.rs b/src/framework/standard/help_commands.rs index 9bae941..dbf25a9 100644 --- a/src/framework/standard/help_commands.rs +++ b/src/framework/standard/help_commands.rs @@ -51,7 +51,7 @@ fn remove_aliases(cmds: &HashMap<String, CommandOrAlias>) -> HashMap<&String, &I result } -/// Checks whether a user is member of required roles +/// Checks whether a user is member of required roles /// and given the required permissions. fn has_all_requirements(cmd: &Command, guild: &Guild, member: &Member, msg: &Message) -> bool { if cmd.allowed_roles.is_empty() { @@ -102,7 +102,8 @@ pub fn with_embeds(_: &mut Context, CommandOrAlias::Command(ref cmd) => { if !cmd.allowed_roles.is_empty() { if let Some(guild) = msg.guild() { - let guild = guild.read().unwrap(); + let guild = guild.read(); + if let Some(member) = guild.members.get(&msg.author.id) { if let Ok(permissions) = member.permissions() { if !permissions.administrator() && @@ -209,7 +210,8 @@ pub fn with_embeds(_: &mut Context, if cmd.help_available { if let Some(guild) = msg.guild() { - let guild = guild.read().unwrap(); + let guild = guild.read(); + if let Some(member) = guild.members.get(&msg.author.id) { if let Ok(permissions) = member.permissions() { if cmd.help_available && @@ -275,7 +277,8 @@ pub fn plain(_: &mut Context, CommandOrAlias::Command(ref cmd) => { if !cmd.allowed_roles.is_empty() { if let Some(guild) = msg.guild() { - let guild = guild.read().unwrap(); + let guild = guild.read(); + if let Some(member) = guild.members.get(&msg.author.id) { if let Ok(permissions) = member.permissions() { if !permissions.administrator() && @@ -362,7 +365,8 @@ pub fn plain(_: &mut Context, for name in command_names { let cmd = &commands[name]; if let Some(guild) = msg.guild() { - let guild = guild.read().unwrap(); + let guild = guild.read(); + if let Some(member) = guild.members.get(&msg.author.id) { if let Ok(permissions) = member.permissions() { if cmd.help_available && diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs index a44c6e7..c3f0d70 100644 --- a/src/framework/standard/mod.rs +++ b/src/framework/standard/mod.rs @@ -400,7 +400,7 @@ impl StandardFramework { #[cfg(feature = "cache")] fn is_blocked_guild(&self, message: &Message) -> bool { - if let Some(Channel::Guild(channel)) = CACHE.read().unwrap().channel(message.channel_id) { + if let Some(Channel::Guild(channel)) = CACHE.read().channel(message.channel_id) { let guild_id = channel.with(|g| g.guild_id); if self.configuration.blocked_guilds.contains(&guild_id) { return true; @@ -510,7 +510,8 @@ impl StandardFramework { } else { if !command.allowed_roles.is_empty() { if let Some(guild) = message.guild() { - let guild = guild.read().unwrap(); + let guild = guild.read(); + if let Some(member) = guild.members.get(&message.author.id) { if let Ok(permissions) = member.permissions() { if !permissions.administrator() { |