Added prefixless TagHandling, added startIndex to resolve, fixed bugs.
This commit is contained in:
@@ -2,10 +2,12 @@
|
|||||||
{
|
{
|
||||||
public enum TagHandling
|
public enum TagHandling
|
||||||
{
|
{
|
||||||
Ignore = 0,
|
Ignore = 0, //<@53905483156684800> -> <@53905483156684800>
|
||||||
Remove,
|
Remove, //<@53905483156684800> ->
|
||||||
Name,
|
Name, //<@53905483156684800> -> @Voltana
|
||||||
FullName,
|
NameNoPrefix, //<@53905483156684800> -> Voltana
|
||||||
Sanitize
|
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user