diff options
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/mod.rs | 25 |
1 files changed, 25 insertions, 0 deletions
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<u64> { } } +/// 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<u64> { + 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`. /// |