From 853f8f2e6b8810d4ad1e9a6f6dbde7a44d822389 Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 16 Nov 2016 07:36:29 -0400 Subject: [PATCH] Added prefixless TagHandling, added startIndex to resolve, fixed bugs. --- .../Entities/Messages/TagHandling.cs | 12 +++-- src/Discord.Net.Core/Utils/MentionUtils.cs | 54 +++++++++++++++---- .../Entities/Messages/RestUserMessage.cs | 5 +- .../Entities/Messages/RpcUserMessage.cs | 5 +- .../Entities/Messages/SocketUserMessage.cs | 5 +- 5 files changed, 62 insertions(+), 19 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Messages/TagHandling.cs b/src/Discord.Net.Core/Entities/Messages/TagHandling.cs index 3572a37a5..492f05879 100644 --- a/src/Discord.Net.Core/Entities/Messages/TagHandling.cs +++ b/src/Discord.Net.Core/Entities/Messages/TagHandling.cs @@ -2,10 +2,12 @@ { public enum TagHandling { - Ignore = 0, - Remove, - Name, - FullName, - Sanitize + Ignore = 0, //<@53905483156684800> -> <@53905483156684800> + Remove, //<@53905483156684800> -> + Name, //<@53905483156684800> -> @Voltana + NameNoPrefix, //<@53905483156684800> -> Voltana + FullName, //<@53905483156684800> -> @Voltana#8252 + FullNameNoPrefix, //<@53905483156684800> -> Voltana#8252 + Sanitize //<@53905483156684800> -> <@53905483156684800> (w/ nbsp) } } diff --git a/src/Discord.Net.Core/Utils/MentionUtils.cs b/src/Discord.Net.Core/Utils/MentionUtils.cs index 1b1408852..4d9add8fd 100644 --- a/src/Discord.Net.Core/Utils/MentionUtils.cs +++ b/src/Discord.Net.Core/Utils/MentionUtils.cs @@ -85,14 +85,17 @@ namespace Discord return false; } - internal static string Resolve(IMessage msg, TagHandling userHandling, TagHandling channelHandling, TagHandling roleHandling, TagHandling everyoneHandling, TagHandling emojiHandling) + internal static string Resolve(IMessage msg, int startIndex, TagHandling userHandling, TagHandling channelHandling, TagHandling roleHandling, TagHandling everyoneHandling, TagHandling emojiHandling) { - var text = new StringBuilder(msg.Content); + var text = new StringBuilder(msg.Content.Substring(startIndex)); var tags = msg.Tags; - int indexOffset = 0; + int indexOffset = -startIndex; foreach (var tag in tags) { + if (tag.Index < startIndex) + continue; + string newText = ""; switch (tag.Type) { @@ -139,12 +142,22 @@ namespace Discord if (user != null) return $"@{guildUser?.Nickname ?? user?.Username}"; else - return $"@unknown-user"; + return $""; + case TagHandling.NameNoPrefix: + if (user != null) + return $"{guildUser?.Nickname ?? user?.Username}"; + else + return $""; case TagHandling.FullName: if (user != null) return $"@{user.Username}#{user.Discriminator}"; else - return $"@unknown-user"; + return $""; + case TagHandling.FullNameNoPrefix: + if (user != null) + return $"{user.Username}#{user.Discriminator}"; + else + return $""; case TagHandling.Sanitize: if (guildUser != null && guildUser.Nickname == null) return MentionUser($"{SanitizeChar}{tag.Key}", false); @@ -166,7 +179,13 @@ namespace Discord if (channel != null) return $"#{channel.Name}"; else - return $"#deleted-channel"; + return $""; + case TagHandling.NameNoPrefix: + case TagHandling.FullNameNoPrefix: + if (channel != null) + return $"{channel.Name}"; + else + return $""; case TagHandling.Sanitize: return MentionChannel($"{SanitizeChar}{tag.Key}"); } @@ -185,7 +204,13 @@ namespace Discord if (role != null) return $"@{role.Name}"; else - return $"@deleted-role"; + return $""; + case TagHandling.NameNoPrefix: + case TagHandling.FullNameNoPrefix: + if (role != null) + return $"{role.Name}"; + else + return $""; case TagHandling.Sanitize: return MentionRole($"{SanitizeChar}{tag.Key}"); } @@ -200,7 +225,9 @@ namespace Discord { case TagHandling.Name: case TagHandling.FullName: - return "@everyone"; + case TagHandling.NameNoPrefix: + case TagHandling.FullNameNoPrefix: + return "everyone"; case TagHandling.Sanitize: return $"@{SanitizeChar}everyone"; } @@ -215,9 +242,11 @@ namespace Discord { case TagHandling.Name: case TagHandling.FullName: - return "@everyone"; + case TagHandling.NameNoPrefix: + case TagHandling.FullNameNoPrefix: + return "here"; case TagHandling.Sanitize: - return $"@{SanitizeChar}everyone"; + return $"@{SanitizeChar}here"; } } return ""; @@ -232,8 +261,11 @@ namespace Discord case TagHandling.Name: case TagHandling.FullName: return $":{emoji.Name}:"; + case TagHandling.NameNoPrefix: + case TagHandling.FullNameNoPrefix: + return $"{emoji.Name}"; case TagHandling.Sanitize: - return $"<@{SanitizeChar}everyone"; + return $"<{emoji.Id}{SanitizeChar}:{SanitizeChar}{emoji.Name}>"; } } return ""; diff --git a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs index d3d3b6fce..d3b5d77c6 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs @@ -122,9 +122,12 @@ namespace Discord.Rest public Task UnpinAsync(RequestOptions options) => MessageHelper.UnpinAsync(this, Discord, options); + public string Resolve(int startIndex, TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, + TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) + => MentionUtils.Resolve(this, startIndex, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) - => MentionUtils.Resolve(this, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); + => MentionUtils.Resolve(this, 0, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")})"; } diff --git a/src/Discord.Net.Rpc/Entities/Messages/RpcUserMessage.cs b/src/Discord.Net.Rpc/Entities/Messages/RpcUserMessage.cs index edfa60484..3fc489ff9 100644 --- a/src/Discord.Net.Rpc/Entities/Messages/RpcUserMessage.cs +++ b/src/Discord.Net.Rpc/Entities/Messages/RpcUserMessage.cs @@ -106,9 +106,12 @@ namespace Discord.Rpc public Task UnpinAsync(RequestOptions options) => MessageHelper.UnpinAsync(this, Discord, options); + public string Resolve(int startIndex, TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, + TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) + => MentionUtils.Resolve(this, startIndex, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) - => MentionUtils.Resolve(this, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); + => MentionUtils.Resolve(this, 0, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")})"; } diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs index db9b82ebd..2261076f7 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs @@ -118,9 +118,12 @@ namespace Discord.WebSocket public Task UnpinAsync(RequestOptions options = null) => MessageHelper.UnpinAsync(this, Discord, options); + public string Resolve(int startIndex, TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, + TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) + => MentionUtils.Resolve(this, startIndex, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) - => MentionUtils.Resolve(this, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); + => MentionUtils.Resolve(this, 0, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling); private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")})"; internal new SocketUserMessage Clone() => MemberwiseClone() as SocketUserMessage;