From 443c43b643658025bbeb0aac1d570bbf8b6ca50f Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 18 Oct 2015 09:11:36 -0300 Subject: [PATCH] Renamed MessageCleaner to MentionHelper, added Mentionhelper.GetUserIds --- src/Discord.Net.Net45/Discord.Net.csproj | 7 +++- src/Discord.Net/Collections/Messages.cs | 4 -- src/Discord.Net/Helpers/MentionHelper.cs | 48 +++++++++++++++++++++++ src/Discord.Net/Helpers/MessageCleaner.cs | 43 -------------------- src/Discord.Net/Models/Message.cs | 2 +- 5 files changed, 54 insertions(+), 50 deletions(-) create mode 100644 src/Discord.Net/Helpers/MentionHelper.cs delete mode 100644 src/Discord.Net/Helpers/MessageCleaner.cs diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj index b9c24516b..063d12d7d 100644 --- a/src/Discord.Net.Net45/Discord.Net.csproj +++ b/src/Discord.Net.Net45/Discord.Net.csproj @@ -160,6 +160,9 @@ DiscordSimpleClientConfig.cs + + Enums\AvatarImageType.cs + Enums\ChannelTypes.cs @@ -184,8 +187,8 @@ Helpers\Mention.cs - - Helpers\MessageCleaner.cs + + Helpers\MentionHelper.cs Helpers\Shared\CollectionHelper.cs diff --git a/src/Discord.Net/Collections/Messages.cs b/src/Discord.Net/Collections/Messages.cs index 1a17bed1b..0943c8a9d 100644 --- a/src/Discord.Net/Collections/Messages.cs +++ b/src/Discord.Net/Collections/Messages.cs @@ -2,11 +2,9 @@ { public sealed class Messages : AsyncCollection { - private readonly MessageCleaner _msgCleaner; internal Messages(DiscordClient client, object writerLock) : base(client, writerLock) { - _msgCleaner = new MessageCleaner(client); } internal Message GetOrAdd(string id, string channelId, string userId) => GetOrAdd(id, () => new Message(_client, id, channelId, userId)); @@ -29,7 +27,5 @@ } internal Message this[string id] => Get(id); - - internal string CleanText(string text) => _msgCleaner.Clean(text); } } diff --git a/src/Discord.Net/Helpers/MentionHelper.cs b/src/Discord.Net/Helpers/MentionHelper.cs new file mode 100644 index 000000000..b630c61a3 --- /dev/null +++ b/src/Discord.Net/Helpers/MentionHelper.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; + +namespace Discord +{ + internal static class MentionHelper + { + private static readonly Regex _userRegex, _channelRegex; + + static MentionHelper() + { + _userRegex = new Regex(@"<@(\d+?)>", RegexOptions.Compiled); + _channelRegex = new Regex(@"<#(\d+?)>", RegexOptions.Compiled); + } + + public static string ConvertToNames(DiscordClient client, string text) + { + text = _userRegex.Replace(text, new MatchEvaluator(e => + { + string id = e.Value.Substring(2, e.Value.Length - 3); + var user = client.Users[id]; + if (user != null) + return '@' + user.Name; + else //User not found + return e.Value; + })); + text = _channelRegex.Replace(text, new MatchEvaluator(e => + { + string id = e.Value.Substring(2, e.Value.Length - 3); + var channel = client.Channels[id]; + if (channel != null) + return channel.Name; + else //Channel not found + return e.Value; + })); + return text; + } + + public static IEnumerable GetUserIds(string text) + { + return _userRegex.Matches(text) + .OfType() + .Select(x => x.Groups[1].Value) + .Where(x => x != null); + } + } +} diff --git a/src/Discord.Net/Helpers/MessageCleaner.cs b/src/Discord.Net/Helpers/MessageCleaner.cs deleted file mode 100644 index 4ccaf04e0..000000000 --- a/src/Discord.Net/Helpers/MessageCleaner.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Text.RegularExpressions; - -namespace Discord -{ - //TODO: Better name please? - internal class MessageCleaner - { - private readonly Regex _userRegex, _channelRegex; - private readonly MatchEvaluator _userRegexEvaluator, _channelRegexEvaluator; - - public MessageCleaner(DiscordClient client) - { - _userRegex = new Regex(@"<@\d+?>", RegexOptions.Compiled); - _userRegexEvaluator = new MatchEvaluator(e => - { - string id = e.Value.Substring(2, e.Value.Length - 3); - var user = client.Users[id]; - if (user != null) - return '@' + user.Name; - else //User not found - return e.Value; - }); - - _channelRegex = new Regex(@"<#\d+?>", RegexOptions.Compiled); - _channelRegexEvaluator = new MatchEvaluator(e => - { - string id = e.Value.Substring(2, e.Value.Length - 3); - var channel = client.Channels[id]; - if (channel != null) - return channel.Name; - else //Channel not found - return e.Value; - }); - } - - public string Clean(string text) - { - text = _userRegex.Replace(text, _userRegexEvaluator); - text = _channelRegex.Replace(text, _channelRegexEvaluator); - return text; - } - } -} diff --git a/src/Discord.Net/Models/Message.cs b/src/Discord.Net/Models/Message.cs index 3d00a1265..a23644448 100644 --- a/src/Discord.Net/Models/Message.cs +++ b/src/Discord.Net/Models/Message.cs @@ -114,7 +114,7 @@ namespace Discord public string RawText { get; private set; } /// Returns the content of this message with any special references such as mentions converted. /// This value is lazy loaded and only processed on first request. Each subsequent request will pull from cache. - public string Text => _cleanText != null ? _cleanText : (_cleanText = _client.Messages.CleanText(RawText)); + public string Text => _cleanText != null ? _cleanText : (_cleanText = MentionHelper.ConvertToNames(_client, RawText)); /// Returns the timestamp for when this message was sent. public DateTime Timestamp { get; private set; } /// Returns the timestamp for when this message was last edited.