aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authortahahawa <[email protected]>2017-12-24 10:39:11 -0500
committerZeyla Hellyer <[email protected]>2017-12-24 07:39:11 -0800
commita7b67df6d77f5acacf83710807b231866397d551 (patch)
tree4862489c26775ec9fe791bdf8bb2318458c22ac3 /src/model
parentAdd `iter_quoted` (diff)
downloadserenity-a7b67df6d77f5acacf83710807b231866397d551.tar.xz
serenity-a7b67df6d77f5acacf83710807b231866397d551.zip
Fix Guild::member_named and add tests
Use rfind, in case there's more '#' in username than just the discriminator Split at pos+1 instead of pos and remove the trailing '#' in the split.0 (Name) Fix bug with parsing
Diffstat (limited to 'src/model')
-rw-r--r--src/model/guild/mod.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs
index c4c40b7..44a911c 100644
--- a/src/model/guild/mod.rs
+++ b/src/model/guild/mod.rs
@@ -737,15 +737,22 @@ impl Guild {
///
/// - **username**: "zey"
/// - **username and discriminator**: "zey#5479"
- /// - **nickname**: "zeyla" or "zeylas#nick"
///
/// [`Member`]: struct.Member.html
pub fn member_named(&self, name: &str) -> Option<&Member> {
- let (name, discrim) = if let Some(pos) = name.find('#') {
- let split = name.split_at(pos);
+ let (name, discrim) = if let Some(pos) = name.rfind('#') {
+ let split = name.split_at(pos + 1);
- match split.1.parse::<u16>() {
- Ok(discrim_int) => (split.0, Some(discrim_int)),
+ let split2 = (
+ match split.0.get(0..split.0.len() - 1) {
+ Some(s) => s,
+ None => "",
+ },
+ split.1,
+ );
+
+ match split2.1.parse::<u16>() {
+ Ok(discrim_int) => (split2.0, Some(discrim_int)),
Err(_) => (name, None),
}
} else {
@@ -764,9 +771,9 @@ impl Guild {
name_matches && discrim_matches
})
.or_else(|| {
- self.members.values().find(|member| {
- member.nick.as_ref().map_or(false, |nick| nick == name)
- })
+ self.members
+ .values()
+ .find(|member| member.nick.as_ref().map_or(false, |nick| nick == name))
})
}