diff --git a/ApplicationCommands/ExportModule.cs b/ApplicationCommands/ExportModule.cs index 77ca85b..815ac4c 100644 --- a/ApplicationCommands/ExportModule.cs +++ b/ApplicationCommands/ExportModule.cs @@ -40,7 +40,9 @@ public class ExportModule : BotModuleBase { if (user == null) continue; // User disappeared in the instant between getting list and processing writer.Write($"● {Common.MonthNames[item.BirthMonth]}-{item.BirthDay:00}: "); writer.Write(item.UserId); - writer.Write(" " + user.Username + "#" + user.Discriminator); + writer.Write(" " + user.Username); + if (user.DiscriminatorValue != 0) writer.Write($"#{user.Discriminator}"); + if (user.GlobalName != null) writer.Write($" ({user.GlobalName})"); if (user.Nickname != null) writer.Write(" - Nickname: " + user.Nickname); if (item.TimeZone != null) writer.Write(" | Time zone: " + item.TimeZone); writer.WriteLine(); @@ -67,16 +69,19 @@ public class ExportModule : BotModuleBase { } // Conforming to RFC 4180; with header - writer.Write("UserId,Username,Nickname,MonthDayDisp,Month,Day,TimeZone"); + writer.Write("UserId,Username,DisplayName,Nickname,MonthDayDisp,Month,Day,TimeZone"); writer.Write("\r\n"); // crlf line break is specified by the standard foreach (var item in list) { var user = guild.GetUser(item.UserId); if (user == null) continue; // User disappeared in the instant between getting list and processing writer.Write(item.UserId); writer.Write(','); - writer.Write(csvEscape(user.Username + "#" + user.Discriminator)); + writer.Write(csvEscape(user.Username)); + if (user.DiscriminatorValue != 0) writer.Write($"#{user.Discriminator}"); writer.Write(','); - if (user.Nickname != null) writer.Write(user.Nickname); + if (user.GlobalName != null) writer.Write(csvEscape(user.GlobalName)); + writer.Write(','); + if (user.Nickname != null) writer.Write(csvEscape(user.Nickname)); writer.Write(','); writer.Write($"{Common.MonthNames[item.BirthMonth]}-{item.BirthDay:00}"); writer.Write(','); diff --git a/BirthdayBot.csproj b/BirthdayBot.csproj index 67ff3f9..007546c 100644 --- a/BirthdayBot.csproj +++ b/BirthdayBot.csproj @@ -22,7 +22,7 @@ - + all diff --git a/Common.cs b/Common.cs index f1d7bf3..9096c98 100644 --- a/Common.cs +++ b/Common.cs @@ -11,7 +11,7 @@ static class Common { static string escapeFormattingCharacters(string input) { var result = new StringBuilder(); foreach (var c in input) { - if (c is '\\' or '_' or '~' or '*' or '@') { + if (c is '\\' or '_' or '~' or '*' or '@' or '`') { result.Append('\\'); } result.Append(c); @@ -19,11 +19,19 @@ static class Common { return result.ToString(); } - var username = escapeFormattingCharacters(member.Username); - if (member.Nickname != null) { - return $"**{escapeFormattingCharacters(member.Nickname)}** ({username}#{member.Discriminator})"; + if (member.DiscriminatorValue == 0) { + var username = escapeFormattingCharacters(member.GlobalName ?? member.Username); + if (member.Nickname != null) { + return $"{escapeFormattingCharacters(member.Nickname)} ({username})"; + } + return username; + } else { + var username = escapeFormattingCharacters(member.Username); + if (member.Nickname != null) { + return $"{escapeFormattingCharacters(member.Nickname)} ({username}#{member.Discriminator})"; + } + return $"{username}#{member.Discriminator}"; } - return $"**{username}**#{member.Discriminator}"; } public static Dictionary MonthNames { get; } = new() { diff --git a/ShardManager.cs b/ShardManager.cs index bc9223e..5cf4612 100644 --- a/ShardManager.cs +++ b/ShardManager.cs @@ -76,7 +76,8 @@ class ShardManager : IDisposable { DefaultRetryMode = RetryMode.Retry502 | RetryMode.RetryTimeouts, GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildMembers, SuppressUnknownDispatchWarnings = true, - LogGatewayIntentWarnings = false + LogGatewayIntentWarnings = false, + FormatUsersInBidirectionalUnicode = false }; var services = new ServiceCollection() .AddSingleton(s => new ShardInstance(this, s))