try to use username when it's better than the nickname

This commit is contained in:
13xforever
2021-05-01 23:58:39 +05:00
parent 00894e21f6
commit a2b26361d8
4 changed files with 24 additions and 13 deletions

View File

@@ -171,11 +171,9 @@ namespace CompatBot.Commands
public async Task Cleanup(CommandContext ctx, [Description("Discord user to clean up")] DiscordMember discordUser)
{
var name = discordUser.DisplayName;
var newName = UsernameZalgoMonitor.StripZalgo(name, discordUser.Id);
var newName = UsernameZalgoMonitor.StripZalgo(name, discordUser.Username, discordUser.Id);
if (name == newName)
{
await ctx.Channel.SendMessageAsync("Failed to remove any extra symbols").ConfigureAwait(false);
}
else
{
try

View File

@@ -104,7 +104,7 @@ namespace CompatBot.Commands
if (!UsernameZalgoMonitor.NeedsRename(displayName))
continue;
var nickname = UsernameZalgoMonitor.StripZalgo(displayName, member.Id).Sanitize();
var nickname = UsernameZalgoMonitor.StripZalgo(displayName, member.Username, member.Id).Sanitize();
try
{
await member.ModifyAsync(m => m.Nickname = nickname).ConfigureAwait(false);

View File

@@ -27,7 +27,7 @@ namespace CompatBot.EventHandlers
if (c.GetMember(args.UserAfter) is DiscordMember m
&& NeedsRename(m.DisplayName))
{
var suggestedName = StripZalgo(m.DisplayName, m.Id).Sanitize();
var suggestedName = StripZalgo(m.DisplayName, m.Username, m.Id).Sanitize();
await c.ReportAsync("🔣 Potential display name issue",
$"User {m.GetMentionWithNickname()} has changed their __username__ and is now shown as **{m.DisplayName.Sanitize()}**\nAutomatically renamed to: **{suggestedName}**",
null,
@@ -46,11 +46,19 @@ namespace CompatBot.EventHandlers
try
{
//member object most likely will not be updated in client cache at this moment
var name = args.NicknameAfter ?? args.Member.Username;
string? fallback;
if (args.NicknameAfter is string name)
fallback = args.Member.Username;
else
{
name = args.Member.Username;
fallback = null;
}
var member = await args.Guild.GetMemberAsync(args.Member.Id).ConfigureAwait(false) ?? args.Member;
if (NeedsRename(name))
{
var suggestedName = StripZalgo(name, args.Member.Id).Sanitize();
var suggestedName = StripZalgo(name, fallback, args.Member.Id).Sanitize();
await c.ReportAsync("🔣 Potential display name issue",
$"Member {member.GetMentionWithNickname()} has changed their __display name__ and is now shown as **{name.Sanitize()}**\nAutomatically renamed to: **{suggestedName}**",
null,
@@ -71,7 +79,7 @@ namespace CompatBot.EventHandlers
var name = args.Member.DisplayName;
if (NeedsRename(name))
{
var suggestedName = StripZalgo(name, args.Member.Id).Sanitize();
var suggestedName = StripZalgo(name, args.Member.Username, args.Member.Id).Sanitize();
await c.ReportAsync("🔣 Potential display name issue",
$"New member joined the server: {args.Member.GetMentionWithNickname()} and is shown as **{name.Sanitize()}**\nAutomatically renamed to: **{suggestedName}**",
null,
@@ -88,7 +96,7 @@ namespace CompatBot.EventHandlers
public static bool NeedsRename(string displayName)
{
displayName = displayName.Normalize().TrimEager();
return displayName != StripZalgo(displayName, 0ul, NormalizationForm.FormC, 3);
return displayName != StripZalgo(displayName, null, 0ul, NormalizationForm.FormC, 3);
}
private static async Task DmAndRenameUserAsync(DiscordClient client, DiscordMember member, string suggestedName)
@@ -111,9 +119,11 @@ namespace CompatBot.EventHandlers
}
}
public static string StripZalgo(string displayName, ulong userId, NormalizationForm normalizationForm = NormalizationForm.FormD, int level = 0)
public static string StripZalgo(string displayName, string? userName, ulong userId, NormalizationForm normalizationForm = NormalizationForm.FormD, int level = 0)
{
displayName = displayName.Normalize(normalizationForm).TrimEager();
if (displayName is null or {Length: <3} && userName is not null)
displayName = userName.Normalize(normalizationForm).TrimEager();
if (displayName is null or {Length: <3})
return GenerateRandomName(userId);
@@ -177,8 +187,11 @@ namespace CompatBot.EventHandlers
}
var result = builder.ToString().TrimEager();
if (result is null or {Length: <3})
return GenerateRandomName(userId);
{
if (userName is null)
return GenerateRandomName(userId);
return StripZalgo(userName, null, userId, normalizationForm, level);
}
return result;
}

View File

@@ -51,7 +51,7 @@ namespace Tests
[TestCase("jò̵͗s̷̑͠ẻ̵͝p̸̆̂h̸͐̿", "joseph")]
public void StripZalgoTest(string input, string expected)
{
var stripped = UsernameZalgoMonitor.StripZalgo(input, 0ul);
var stripped = UsernameZalgoMonitor.StripZalgo(input, null, 0ul);
Assert.That(stripped, Is.EqualTo(expected));
}