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.