diff --git a/src/Discord.Net.Core/Format.cs b/src/Discord.Net.Core/Format.cs
index 63f9d15a6..73be20108 100644
--- a/src/Discord.Net.Core/Format.cs
+++ b/src/Discord.Net.Core/Format.cs
@@ -104,5 +104,15 @@ namespace Discord
var newText = Regex.Replace(text, @"(\*|_|`|~|>|\\)", "");
return newText;
}
+
+ ///
+ /// Formats a user's username + discriminator while maintaining bidirectional unicode
+ ///
+ /// The user whos username and discriminator to format
+ /// The username + discriminator
+ public static string UsernameAndDiscriminator(IUser user)
+ {
+ return $"\u2066{user.Username}\u2069#{user.Discriminator}";
+ }
}
}
diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
index 872bab392..9cf42814c 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
@@ -128,8 +128,8 @@ namespace Discord.Rest
///
/// A string that resolves to Username#Discriminator of the user.
///
- public override string ToString() => $"{Username}#{Discriminator}";
- private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})";
+ public override string ToString() => Format.UsernameAndDiscriminator(this);
+ private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this)} ({Id}{(IsBot ? ", Bot" : "")})";
#endregion
#region IUser
diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
index 025daf29a..5e5e5cf0c 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
@@ -109,8 +109,8 @@ namespace Discord.WebSocket
///
/// The full name of the user.
///
- public override string ToString() => $"{Username}#{Discriminator}";
- private string DebuggerDisplay => $"{Username}#{Discriminator} ({Id}{(IsBot ? ", Bot" : "")})";
+ public override string ToString() => Format.UsernameAndDiscriminator(this);
+ private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this)} ({Id}{(IsBot ? ", Bot" : "")})";
internal SocketUser Clone() => MemberwiseClone() as SocketUser;
}
}