diff --git a/src/Discord.Net.Core/DiscordConfig.cs b/src/Discord.Net.Core/DiscordConfig.cs
index 34bfc5e62..006a1ca17 100644
--- a/src/Discord.Net.Core/DiscordConfig.cs
+++ b/src/Discord.Net.Core/DiscordConfig.cs
@@ -187,5 +187,15 @@ namespace Discord
/// This will still require a stable clock on your system.
///
public bool UseInteractionSnowflakeDate { get; set; } = true;
+
+ ///
+ /// Gets or sets if the Rest/Socket user override formats the string in respect to bidirectional unicode.
+ ///
+ ///
+ /// By default, the returned value will be "?Discord?#1234", to work with bidirectional usernames.
+ ///
+ /// If set to , this value will be "Discord#1234".
+ ///
+ public bool FormatUsersInBidirectionalUnicode { get; set; } = true;
}
}
diff --git a/src/Discord.Net.Core/Format.cs b/src/Discord.Net.Core/Format.cs
index a5951aa73..dc2a06540 100644
--- a/src/Discord.Net.Core/Format.cs
+++ b/src/Discord.Net.Core/Format.cs
@@ -107,13 +107,16 @@ namespace Discord
}
///
- /// Formats a user's username + discriminator while maintaining bidirectional unicode
+ /// Formats a user's username + discriminator.
///
+ /// To format the string in bidirectional unicode or not
/// The user whos username and discriminator to format
/// The username + discriminator
- public static string UsernameAndDiscriminator(IUser user)
+ public static string UsernameAndDiscriminator(IUser user, bool doBidirectional)
{
- return $"\u2066{user.Username}\u2069#{user.Discriminator}";
+ return doBidirectional
+ ? $"\u2066{user.Username}\u2069#{user.Discriminator}"
+ : $"{user.Username}#{user.Discriminator}";
}
}
}
diff --git a/src/Discord.Net.Rest/BaseDiscordClient.cs b/src/Discord.Net.Rest/BaseDiscordClient.cs
index 2bf08e3c7..75f477c7c 100644
--- a/src/Discord.Net.Rest/BaseDiscordClient.cs
+++ b/src/Discord.Net.Rest/BaseDiscordClient.cs
@@ -36,6 +36,7 @@ namespace Discord.Rest
///
public TokenType TokenType => ApiClient.AuthTokenType;
internal bool UseInteractionSnowflakeDate { get; private set; }
+ internal bool FormatUsersInBidirectionalUnicode { get; private set; }
/// Creates a new REST-only Discord client.
internal BaseDiscordClient(DiscordRestConfig config, API.DiscordRestApiClient client)
@@ -49,6 +50,7 @@ namespace Discord.Rest
_isFirstLogin = config.DisplayInitialLog;
UseInteractionSnowflakeDate = config.UseInteractionSnowflakeDate;
+ FormatUsersInBidirectionalUnicode = config.FormatUsersInBidirectionalUnicode;
ApiClient.RequestQueue.RateLimitTriggered += async (id, info, endpoint) =>
{
diff --git a/src/Discord.Net.Rest/Entities/Users/RestUser.cs b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
index 70f990fe7..dfdb53815 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
@@ -129,8 +129,10 @@ namespace Discord.Rest
///
/// A string that resolves to Username#Discriminator of the user.
///
- public override string ToString() => Format.UsernameAndDiscriminator(this);
- private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this)} ({Id}{(IsBot ? ", Bot" : "")})";
+ public override string ToString()
+ => Format.UsernameAndDiscriminator(this, Discord.FormatUsersInBidirectionalUnicode);
+
+ private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this, Discord.FormatUsersInBidirectionalUnicode)} ({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 35121d666..d70e61739 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
@@ -117,8 +117,8 @@ namespace Discord.WebSocket
///
/// The full name of the user.
///
- public override string ToString() => Format.UsernameAndDiscriminator(this);
- private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this)} ({Id}{(IsBot ? ", Bot" : "")})";
+ public override string ToString() => Format.UsernameAndDiscriminator(this, Discord.FormatUsersInBidirectionalUnicode);
+ private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this, Discord.FormatUsersInBidirectionalUnicode)} ({Id}{(IsBot ? ", Bot" : "")})";
internal SocketUser Clone() => MemberwiseClone() as SocketUser;
}
}