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.