From dcde486aace4db8cf1e8c0febab0aa2e5402a623 Mon Sep 17 00:00:00 2001 From: RogueException Date: Thu, 6 Oct 2016 09:20:25 -0300 Subject: [PATCH] Fixed crash when resolving a message with multiple tags --- src/Discord.Net.Core/Utils/MentionUtils.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Discord.Net.Core/Utils/MentionUtils.cs b/src/Discord.Net.Core/Utils/MentionUtils.cs index 58e3650fe..006658643 100644 --- a/src/Discord.Net.Core/Utils/MentionUtils.cs +++ b/src/Discord.Net.Core/Utils/MentionUtils.cs @@ -121,8 +121,8 @@ namespace Discord newText = ResolveEmoji(tag, emojiHandling); break; } - text.Remove(tag.Index, tag.Length); - text.Insert(tag.Index, newText); + text.Remove(tag.Index + indexOffset, tag.Length); + text.Insert(tag.Index + indexOffset, newText); indexOffset += newText.Length - tag.Length; } return text.ToString(); @@ -132,20 +132,24 @@ namespace Discord if (mode != TagHandling.Remove) { var user = tag.Value as IUser; + var guildUser = user as IGuildUser; switch (mode) { case TagHandling.Name: if (user != null) - return $"@{(user as IGuildUser)?.Nickname ?? user?.Username}"; + return $"@{guildUser?.Nickname ?? user?.Username}"; else return $"@unknown-user"; case TagHandling.FullName: if (user != null) - return $"@{(user as IGuildUser)?.Nickname ?? user?.Username}#{user.Discriminator}"; + return $"@{guildUser?.Nickname ?? user?.Username}#{user.Discriminator}"; else return $"@unknown-user"; case TagHandling.Sanitize: - return MentionUser($"{SanitizeChar}{tag.Key}"); + if (guildUser != null && guildUser.Nickname == null) + return MentionUser($"{SanitizeChar}{tag.Key}", false); + else + return MentionUser($"{SanitizeChar}{tag.Key}", true); } } return "";