From d529cf79af4e493700aa9c69bbb690dbc47a80b8 Mon Sep 17 00:00:00 2001 From: acdenisSK Date: Fri, 21 Sep 2018 22:45:14 +0200 Subject: Generalise mention parsing Fixes #396 --- src/utils/mod.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/utils') diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 347e19a..2d1df4a 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -261,6 +261,31 @@ pub fn parse_channel(mention: &str) -> Option { } } +/// Retrieve the ID number out of a channel, role, or user mention. +/// +/// If the mention is invalid, `None` is returned. +/// +/// # Examples +/// +/// ```rust +/// use serenity::utils::parse_mention; +/// +/// assert_eq!(parse_mention("<@136510335967297536>"), Some(136510335967297536)); +/// assert_eq!(parse_mention("<@&137235212097683456>"), Some(137235212097683456)); +/// assert_eq!(parse_mention("<#137234234728251392>"), Some(137234234728251392)); +/// ``` +pub fn parse_mention(mention: &str) -> Option { + if mention.starts_with("<@&") { + parse_role(mention) + } else if mention.starts_with("<@") || mention.starts_with("<@!") { + parse_username(mention) + } else if mention.starts_with("<#") { + parse_channel(mention) + } else { + None + } +} + /// Retrieves the name and Id from an emoji mention, in the form of an /// `EmojiIdentifier`. /// -- cgit v1.2.3