diff options
| author | tahahawa <[email protected]> | 2017-12-24 10:39:11 -0500 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-12-24 07:39:11 -0800 |
| commit | a7b67df6d77f5acacf83710807b231866397d551 (patch) | |
| tree | 4862489c26775ec9fe791bdf8bb2318458c22ac3 /src/model | |
| parent | Add `iter_quoted` (diff) | |
| download | serenity-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.rs | 23 |
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)) }) } |