From d934a5a1ebafcaa30c2936b7000766cc5d1f22dc Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 26 Jun 2016 01:55:51 -0300 Subject: [PATCH] Added MentionUtils.TryParseXXX methods --- src/Discord.Net/Utilities/MentionUtils.cs | 55 ++++++++++++++++------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/src/Discord.Net/Utilities/MentionUtils.cs b/src/Discord.Net/Utilities/MentionUtils.cs index 0053792c2..1a092fd9c 100644 --- a/src/Discord.Net/Utilities/MentionUtils.cs +++ b/src/Discord.Net/Utilities/MentionUtils.cs @@ -19,6 +19,14 @@ namespace Discord /// Parses a provided user mention string. public static ulong ParseUser(string mentionText) + { + ulong id; + if (TryParseUser(mentionText, out id)) + return id; + throw new ArgumentException("Invalid mention format", nameof(mentionText)); + } + /// Tries to parse a provided user mention string. + public static bool TryParseUser(string mentionText, out ulong userId) { mentionText = mentionText.Trim(); if (mentionText.Length >= 3 && mentionText[0] == '<' && mentionText[1] == '@' && mentionText[mentionText.Length - 1] == '>') @@ -27,40 +35,57 @@ namespace Discord mentionText = mentionText.Substring(3, mentionText.Length - 4); //<@!123> else mentionText = mentionText.Substring(2, mentionText.Length - 3); //<@123> - - ulong id; - if (ulong.TryParse(mentionText, NumberStyles.None, CultureInfo.InvariantCulture, out id)) - return id; + + if (ulong.TryParse(mentionText, NumberStyles.None, CultureInfo.InvariantCulture, out userId)) + return true; } - throw new ArgumentException("Invalid mention format", nameof(mentionText)); + userId = 0; + return false; } + /// Parses a provided channel mention string. public static ulong ParseChannel(string mentionText) + { + ulong id; + if (TryParseChannel(mentionText, out id)) + return id; + throw new ArgumentException("Invalid mention format", nameof(mentionText)); + } + /// Tries to parse a provided channel mention string. + public static bool TryParseChannel(string mentionText, out ulong channelId) { mentionText = mentionText.Trim(); if (mentionText.Length >= 3 && mentionText[0] == '<' && mentionText[1] == '#' && mentionText[mentionText.Length - 1] == '>') { mentionText = mentionText.Substring(2, mentionText.Length - 3); //<#123> - - ulong id; - if (ulong.TryParse(mentionText, NumberStyles.None, CultureInfo.InvariantCulture, out id)) - return id; + + if (ulong.TryParse(mentionText, NumberStyles.None, CultureInfo.InvariantCulture, out channelId)) + return true; } - throw new ArgumentException("Invalid mention format", nameof(mentionText)); + channelId = 0; + return false; } /// Parses a provided role mention string. public static ulong ParseRole(string mentionText) + { + ulong id; + if (TryParseRole(mentionText, out id)) + return id; + throw new ArgumentException("Invalid mention format", nameof(mentionText)); + } + /// Tries to parse a provided role mention string. + public static bool TryParseRole(string mentionText, out ulong roleId) { mentionText = mentionText.Trim(); if (mentionText.Length >= 4 && mentionText[0] == '<' && mentionText[1] == '@' && mentionText[2] == '&' && mentionText[mentionText.Length - 1] == '>') { mentionText = mentionText.Substring(3, mentionText.Length - 4); //<@&123> - - ulong id; - if (ulong.TryParse(mentionText, NumberStyles.None, CultureInfo.InvariantCulture, out id)) - return id; + + if (ulong.TryParse(mentionText, NumberStyles.None, CultureInfo.InvariantCulture, out roleId)) + return true; } - throw new ArgumentException("Invalid mention format", nameof(mentionText)); + roleId = 0; + return false; } /// Gets the ids of all users mentioned in a provided text.