@@ -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) | |||
} | |||
} |
@@ -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 ""; | |||
@@ -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" : "")})"; | |||
} | |||
@@ -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" : "")})"; | |||
} | |||
@@ -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; | |||