Browse Source

Added prefixless TagHandling, added startIndex to resolve, fixed bugs.

tags/1.0-rc
RogueException 8 years ago
parent
commit
853f8f2e6b
5 changed files with 62 additions and 19 deletions
  1. +7
    -5
      src/Discord.Net.Core/Entities/Messages/TagHandling.cs
  2. +43
    -11
      src/Discord.Net.Core/Utils/MentionUtils.cs
  3. +4
    -1
      src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs
  4. +4
    -1
      src/Discord.Net.Rpc/Entities/Messages/RpcUserMessage.cs
  5. +4
    -1
      src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs

+ 7
- 5
src/Discord.Net.Core/Entities/Messages/TagHandling.cs View File

@@ -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)
} }
} }

+ 43
- 11
src/Discord.Net.Core/Utils/MentionUtils.cs View File

@@ -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 "";


+ 4
- 1
src/Discord.Net.Rest/Entities/Messages/RestUserMessage.cs View File

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


+ 4
- 1
src/Discord.Net.Rpc/Entities/Messages/RpcUserMessage.cs View File

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


+ 4
- 1
src/Discord.Net.WebSocket/Entities/Messages/SocketUserMessage.cs View File

@@ -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;


Loading…
Cancel
Save