diff options
| author | Nathan Perry <avaglir@gmail.com> | 2019-03-10 03:04:06 -0400 |
|---|---|---|
| committer | Nathan Perry <avaglir@gmail.com> | 2019-03-10 03:04:06 -0400 |
| commit | 006c5e12bb2ad35512c0f510a8fd915ba813d42c (patch) | |
| tree | 22d5d6c80c97848291a7ced23a3854b6b9398be4 | |
| parent | c39a52e635e0f66c34e8ec013c76b4ffa0935fdc (diff) | |
improve user id parsing
| -rw-r--r-- | src/game.rs | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/game.rs b/src/game.rs index e98683f..442c937 100644 --- a/src/game.rs +++ b/src/game.rs @@ -162,11 +162,37 @@ enum UserLookupError { } fn get_user_id<S: AsRef<str>>(g: &Guild, s: S) -> StdResult<UserId, UserLookupError> { - let s = s.as_ref().trim_start_matches("@").to_owned(); - let mut possible = g.members_nick_containing(&s, false, false); - possible.extend(g.members_username_containing(&s, false, false)); + let s = s.as_ref().trim_start_matches("@").to_lowercase(); - let opts = possible.into_iter() + if let Some(info) = USER_INFO_MAP.get(&s) { + return Ok(UserId(info.discord_user_id)); + } + + let nicks = g.members_nick_containing(&s, false, false); + + { + let exact_match = nicks + .iter() + .find(|m| m.user.read().name.to_lowercase() == s); + + if let Some(m) = exact_match { + return Ok(m.user_id()); + } + } + + let usernames = g.members_username_containing(&s, false, false); + + { + let exact_match = usernames + .iter() + .find(|m| m.user.read().name.to_lowercase() == s); + + if let Some(m) = exact_match { + return Ok(m.user_id()); + } + } + + let opts = nicks.into_iter().chain(usernames.into_iter()) .map(|member| member.user_id()) .collect::<FnvHashSet<_>>(); @@ -207,6 +233,8 @@ fn game(_ctx: &mut Context, msg: &Message, args: Args, min_status: GameStatus) - let possible = get_user_id(guild.borrow(), &u); + debug!("parsed userid {:?}", possible); + match possible { Err(UserLookupError::NotFound) => { let _ = send(msg.channel_id, &format!("didn't recognize {}", &u), msg.tts); @@ -404,6 +432,8 @@ fn updategaem(_ctx: &mut Context, msg: &Message, mut args: Args) -> Result<()> { get_user_id(guild.borrow(), arg_user.unwrap()).map_err(Error::from)? }; + debug!("parsed userid {:?}", user); + let username = match DISCORD_MAP.get(&user) { Some(s) => s, None => return send(msg.channel_id, "WHO THE FUCK ARE YE", msg.tts), |
