| @@ -19,6 +19,14 @@ namespace Discord | |||
| /// <summary> Parses a provided user mention string. </summary> | |||
| public static ulong ParseUser(string mentionText) | |||
| { | |||
| ulong id; | |||
| if (TryParseUser(mentionText, out id)) | |||
| return id; | |||
| throw new ArgumentException("Invalid mention format", nameof(mentionText)); | |||
| } | |||
| /// <summary> Tries to parse a provided user mention string. </summary> | |||
| 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; | |||
| } | |||
| /// <summary> Parses a provided channel mention string. </summary> | |||
| public static ulong ParseChannel(string mentionText) | |||
| { | |||
| ulong id; | |||
| if (TryParseChannel(mentionText, out id)) | |||
| return id; | |||
| throw new ArgumentException("Invalid mention format", nameof(mentionText)); | |||
| } | |||
| /// <summary>Tries to parse a provided channel mention string. </summary> | |||
| 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; | |||
| } | |||
| /// <summary> Parses a provided role mention string. </summary> | |||
| public static ulong ParseRole(string mentionText) | |||
| { | |||
| ulong id; | |||
| if (TryParseRole(mentionText, out id)) | |||
| return id; | |||
| throw new ArgumentException("Invalid mention format", nameof(mentionText)); | |||
| } | |||
| /// <summary>Tries to parse a provided role mention string. </summary> | |||
| 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; | |||
| } | |||
| /// <summary> Gets the ids of all users mentioned in a provided text.</summary> | |||