From 64d4b0af324f12d2130b4d16b1900c2a6457adf4 Mon Sep 17 00:00:00 2001 From: RogueException Date: Sat, 30 Apr 2016 22:45:26 -0300 Subject: [PATCH] Support nickname mentions in FindUsers --- src/Discord.Net/InternalExtensions.cs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Discord.Net/InternalExtensions.cs b/src/Discord.Net/InternalExtensions.cs index 1bf5ec492..9b9a2366d 100644 --- a/src/Discord.Net/InternalExtensions.cs +++ b/src/Discord.Net/InternalExtensions.cs @@ -10,19 +10,19 @@ namespace Discord { internal static class InternalExtensions { - internal static readonly IFormatProvider _format = CultureInfo.InvariantCulture; - - public static ulong ToId(this string value) => ulong.Parse(value, NumberStyles.None, _format); - public static ulong? ToNullableId(this string value) => value == null ? (ulong?)null : ulong.Parse(value, NumberStyles.None, _format); + internal static readonly IFormatProvider _format = CultureInfo.InvariantCulture; + + public static ulong ToId(this string value) => ulong.Parse(value, NumberStyles.None, _format); + public static ulong? ToNullableId(this string value) => value == null ? (ulong?)null : ulong.Parse(value, NumberStyles.None, _format); public static bool TryToId(this string value, out ulong result) => ulong.TryParse(value, NumberStyles.None, _format, out result); public static string ToIdString(this ulong value) => value.ToString(_format); - public static string ToIdString(this ulong? value) => value?.ToString(_format); - + public static string ToIdString(this ulong? value) => value?.ToString(_format); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool HasBit(this uint rawValue, byte bit) => ((rawValue >> bit) & 1U) == 1; - public static bool TryGetOrAdd(this ConcurrentDictionary d, + public static bool TryGetOrAdd(this ConcurrentDictionary d, TKey key, Func factory, out TValue result) { bool created = false; @@ -98,6 +98,16 @@ namespace Discord if (!exactMatch) { + if (name.Length >= 3 && name[0] == '<' && name[1] == '@' && name[2] == '!' && name[name.Length - 1] == '>') //Search by nickname'd mention + { + ulong id; + if (name.Substring(3, name.Length - 4).TryToId(out id)) + { + var user = users.Where(x => x.Id == id).FirstOrDefault(); + if (user != null) + query = query.Concat(new User[] { user }); + } + } if (name.Length >= 2 && name[0] == '<' && name[1] == '@' && name[name.Length - 1] == '>') //Search by raw mention { ulong id;