From dc6ee3510a9ff3fa7d03136b74e1f78eae4fc9dd Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 13 Jul 2016 13:43:47 -0300 Subject: [PATCH] Cleaned up MentionUtils --- src/Discord.Net/Entities/Messages/Message.cs | 5 ++-- src/Discord.Net/Utilities/MentionUtils.cs | 26 +++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/Discord.Net/Entities/Messages/Message.cs b/src/Discord.Net/Entities/Messages/Message.cs index 32a4303da..db3929af3 100644 --- a/src/Discord.Net/Entities/Messages/Message.cs +++ b/src/Discord.Net/Entities/Messages/Message.cs @@ -114,7 +114,7 @@ namespace Discord if (guildChannel != null) { - MentionedUsers = MentionUtils.GetUserMentions(text, Channel.IsAttached ? Channel : null, MentionedUsers); + MentionedUsers = MentionUtils.GetUserMentions(text, Channel, MentionedUsers); MentionedChannelIds = MentionUtils.GetChannelMentions(text, guildChannel.Guild); MentionedRoles = MentionUtils.GetRoleMentions(text, guildChannel.Guild); } @@ -173,8 +173,7 @@ namespace Discord text = MentionUtils.ResolveUserMentions(text, Channel, MentionedUsers, userMode); if (guild != null) { - if (guild.IsAttached) //It's too expensive to do a channel lookup in REST mode - text = MentionUtils.ResolveChannelMentions(text, guild); + text = MentionUtils.ResolveChannelMentions(text, guild); text = MentionUtils.ResolveRoleMentions(text, guild, MentionedRoles); } return text; diff --git a/src/Discord.Net/Utilities/MentionUtils.cs b/src/Discord.Net/Utilities/MentionUtils.cs index 96ed6c61a..b089bc753 100644 --- a/src/Discord.Net/Utilities/MentionUtils.cs +++ b/src/Discord.Net/Utilities/MentionUtils.cs @@ -99,7 +99,7 @@ namespace Discord if (ulong.TryParse(match.Groups[1].Value, NumberStyles.None, CultureInfo.InvariantCulture, out id)) { IUser user = null; - if (channel != null) + if (channel.IsAttached) //Waiting this sync is safe because it's using a cache user = channel.GetUserAsync(id).GetAwaiter().GetResult() as IUser; if (user == null) { @@ -195,18 +195,22 @@ namespace Discord } internal static string ResolveChannelMentions(string text, IGuild guild) { - return _channelRegex.Replace(text, new MatchEvaluator(e => + if (guild.IsAttached) //It's too expensive to do a channel lookup in REST mode { - ulong id; - if (ulong.TryParse(e.Groups[1].Value, NumberStyles.None, CultureInfo.InvariantCulture, out id)) + return _channelRegex.Replace(text, new MatchEvaluator(e => { - IGuildChannel channel = null; - channel = guild.GetChannelAsync(id).GetAwaiter().GetResult(); - if (channel != null) - return '#' + channel.Name; - } - return e.Value; - })); + ulong id; + if (ulong.TryParse(e.Groups[1].Value, NumberStyles.None, CultureInfo.InvariantCulture, out id)) + { + IGuildChannel channel = null; + channel = guild.GetChannelAsync(id).GetAwaiter().GetResult(); + if (channel != null) + return '#' + channel.Name; + } + return e.Value; + })); + } + return text; } internal static string ResolveRoleMentions(string text, IGuild guild, IReadOnlyCollection mentions) {