| @@ -2,10 +2,12 @@ | |||||
| { | { | ||||
| public enum TagHandling | 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) | |||||
| } | } | ||||
| } | } | ||||
| @@ -85,14 +85,17 @@ namespace Discord | |||||
| return false; | 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; | var tags = msg.Tags; | ||||
| int indexOffset = 0; | |||||
| int indexOffset = -startIndex; | |||||
| foreach (var tag in tags) | foreach (var tag in tags) | ||||
| { | { | ||||
| if (tag.Index < startIndex) | |||||
| continue; | |||||
| string newText = ""; | string newText = ""; | ||||
| switch (tag.Type) | switch (tag.Type) | ||||
| { | { | ||||
| @@ -139,12 +142,22 @@ namespace Discord | |||||
| if (user != null) | if (user != null) | ||||
| return $"@{guildUser?.Nickname ?? user?.Username}"; | return $"@{guildUser?.Nickname ?? user?.Username}"; | ||||
| else | else | ||||
| return $"@unknown-user"; | |||||
| return $""; | |||||
| case TagHandling.NameNoPrefix: | |||||
| if (user != null) | |||||
| return $"{guildUser?.Nickname ?? user?.Username}"; | |||||
| else | |||||
| return $""; | |||||
| case TagHandling.FullName: | case TagHandling.FullName: | ||||
| if (user != null) | if (user != null) | ||||
| return $"@{user.Username}#{user.Discriminator}"; | return $"@{user.Username}#{user.Discriminator}"; | ||||
| else | else | ||||
| return $"@unknown-user"; | |||||
| return $""; | |||||
| case TagHandling.FullNameNoPrefix: | |||||
| if (user != null) | |||||
| return $"{user.Username}#{user.Discriminator}"; | |||||
| else | |||||
| return $""; | |||||
| case TagHandling.Sanitize: | case TagHandling.Sanitize: | ||||
| if (guildUser != null && guildUser.Nickname == null) | if (guildUser != null && guildUser.Nickname == null) | ||||
| return MentionUser($"{SanitizeChar}{tag.Key}", false); | return MentionUser($"{SanitizeChar}{tag.Key}", false); | ||||
| @@ -166,7 +179,13 @@ namespace Discord | |||||
| if (channel != null) | if (channel != null) | ||||
| return $"#{channel.Name}"; | return $"#{channel.Name}"; | ||||
| else | else | ||||
| return $"#deleted-channel"; | |||||
| return $""; | |||||
| case TagHandling.NameNoPrefix: | |||||
| case TagHandling.FullNameNoPrefix: | |||||
| if (channel != null) | |||||
| return $"{channel.Name}"; | |||||
| else | |||||
| return $""; | |||||
| case TagHandling.Sanitize: | case TagHandling.Sanitize: | ||||
| return MentionChannel($"{SanitizeChar}{tag.Key}"); | return MentionChannel($"{SanitizeChar}{tag.Key}"); | ||||
| } | } | ||||
| @@ -185,7 +204,13 @@ namespace Discord | |||||
| if (role != null) | if (role != null) | ||||
| return $"@{role.Name}"; | return $"@{role.Name}"; | ||||
| else | else | ||||
| return $"@deleted-role"; | |||||
| return $""; | |||||
| case TagHandling.NameNoPrefix: | |||||
| case TagHandling.FullNameNoPrefix: | |||||
| if (role != null) | |||||
| return $"{role.Name}"; | |||||
| else | |||||
| return $""; | |||||
| case TagHandling.Sanitize: | case TagHandling.Sanitize: | ||||
| return MentionRole($"{SanitizeChar}{tag.Key}"); | return MentionRole($"{SanitizeChar}{tag.Key}"); | ||||
| } | } | ||||
| @@ -200,7 +225,9 @@ namespace Discord | |||||
| { | { | ||||
| case TagHandling.Name: | case TagHandling.Name: | ||||
| case TagHandling.FullName: | case TagHandling.FullName: | ||||
| return "@everyone"; | |||||
| case TagHandling.NameNoPrefix: | |||||
| case TagHandling.FullNameNoPrefix: | |||||
| return "everyone"; | |||||
| case TagHandling.Sanitize: | case TagHandling.Sanitize: | ||||
| return $"@{SanitizeChar}everyone"; | return $"@{SanitizeChar}everyone"; | ||||
| } | } | ||||
| @@ -215,9 +242,11 @@ namespace Discord | |||||
| { | { | ||||
| case TagHandling.Name: | case TagHandling.Name: | ||||
| case TagHandling.FullName: | case TagHandling.FullName: | ||||
| return "@everyone"; | |||||
| case TagHandling.NameNoPrefix: | |||||
| case TagHandling.FullNameNoPrefix: | |||||
| return "here"; | |||||
| case TagHandling.Sanitize: | case TagHandling.Sanitize: | ||||
| return $"@{SanitizeChar}everyone"; | |||||
| return $"@{SanitizeChar}here"; | |||||
| } | } | ||||
| } | } | ||||
| return ""; | return ""; | ||||
| @@ -232,8 +261,11 @@ namespace Discord | |||||
| case TagHandling.Name: | case TagHandling.Name: | ||||
| case TagHandling.FullName: | case TagHandling.FullName: | ||||
| return $":{emoji.Name}:"; | return $":{emoji.Name}:"; | ||||
| case TagHandling.NameNoPrefix: | |||||
| case TagHandling.FullNameNoPrefix: | |||||
| return $"{emoji.Name}"; | |||||
| case TagHandling.Sanitize: | case TagHandling.Sanitize: | ||||
| return $"<@{SanitizeChar}everyone"; | |||||
| return $"<{emoji.Id}{SanitizeChar}:{SanitizeChar}{emoji.Name}>"; | |||||
| } | } | ||||
| } | } | ||||
| return ""; | return ""; | ||||
| @@ -122,9 +122,12 @@ namespace Discord.Rest | |||||
| public Task UnpinAsync(RequestOptions options) | public Task UnpinAsync(RequestOptions options) | ||||
| => MessageHelper.UnpinAsync(this, Discord, 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, | public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, | ||||
| TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = 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" : "")})"; | private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")})"; | ||||
| } | } | ||||
| @@ -106,9 +106,12 @@ namespace Discord.Rpc | |||||
| public Task UnpinAsync(RequestOptions options) | public Task UnpinAsync(RequestOptions options) | ||||
| => MessageHelper.UnpinAsync(this, Discord, 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, | public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, | ||||
| TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = 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" : "")})"; | private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")})"; | ||||
| } | } | ||||
| @@ -118,9 +118,12 @@ namespace Discord.WebSocket | |||||
| public Task UnpinAsync(RequestOptions options = null) | public Task UnpinAsync(RequestOptions options = null) | ||||
| => MessageHelper.UnpinAsync(this, Discord, 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, | public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, | ||||
| TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = 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" : "")})"; | private string DebuggerDisplay => $"{Author}: {Content} ({Id}{(Attachments.Count > 0 ? $", {Attachments.Count} Attachments" : "")})"; | ||||
| internal new SocketUserMessage Clone() => MemberwiseClone() as SocketUserMessage; | internal new SocketUserMessage Clone() => MemberwiseClone() as SocketUserMessage; | ||||