diff --git a/src/Discord.Net.Core/DiscordConfig.cs b/src/Discord.Net.Core/DiscordConfig.cs
index 34bfc5e62..7c535ce1e 100644
--- a/src/Discord.Net.Core/DiscordConfig.cs
+++ b/src/Discord.Net.Core/DiscordConfig.cs
@@ -187,5 +187,10 @@ namespace Discord
/// This will still require a stable clock on your system.
///
public bool UseInteractionSnowflakeDate { get; set; } = true;
+
+ ///
+ /// Gets or sets if any user's override formats the string in respect to bidirectional unicode.
+ ///
+ 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..8a7b21da7 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestUser.cs
@@ -16,6 +16,8 @@ namespace Discord.Rest
public class RestUser : RestEntity, IUser, IUpdateable
{
#region RestUser
+ private readonly bool _useBidirectionalUnicode;
+
///
public bool IsBot { get; private set; }
///
@@ -51,6 +53,7 @@ namespace Discord.Rest
internal RestUser(BaseDiscordClient discord, ulong id)
: base(discord, id)
{
+ _useBidirectionalUnicode = discord.FormatUsersInBidirectionalUnicode;
}
internal static RestUser Create(BaseDiscordClient discord, Model model)
=> Create(discord, null, model, null);
@@ -129,8 +132,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, _useBidirectionalUnicode);
+
+ private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this, _useBidirectionalUnicode)} ({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..40d16594e 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs
@@ -17,6 +17,7 @@ namespace Discord.WebSocket
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public abstract class SocketUser : SocketEntity, IUser
{
+ private readonly bool _useBidirectionalUnicode;
///
public abstract bool IsBot { get; internal set; }
///
@@ -56,6 +57,7 @@ namespace Discord.WebSocket
internal SocketUser(DiscordSocketClient discord, ulong id)
: base(discord, id)
{
+ _useBidirectionalUnicode = discord.FormatUsersInBidirectionalUnicode;
}
internal virtual bool Update(ClientState state, Model model)
{
@@ -117,8 +119,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, _useBidirectionalUnicode);
+ private string DebuggerDisplay => $"{Format.UsernameAndDiscriminator(this, _useBidirectionalUnicode)} ({Id}{(IsBot ? ", Bot" : "")})";
internal SocketUser Clone() => MemberwiseClone() as SocketUser;
}
}