mirror of
https://github.com/RPCS3/discord-bot.git
synced 2026-01-31 01:25:22 +01:00
detect fucked up user names
This commit is contained in:
81
CompatBot/EventHandlers/UsernameZalgoMonitor.cs
Normal file
81
CompatBot/EventHandlers/UsernameZalgoMonitor.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using CompatApiClient.Utils;
|
||||
using CompatBot.Utils;
|
||||
using DSharpPlus;
|
||||
using DSharpPlus.Entities;
|
||||
using DSharpPlus.EventArgs;
|
||||
using HomoglyphConverter;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
|
||||
namespace CompatBot.EventHandlers
|
||||
{
|
||||
internal static class UsernameZalgoMonitor
|
||||
{
|
||||
public static async Task OnUserUpdated(UserUpdateEventArgs args)
|
||||
{
|
||||
var m = args.Client.GetMember(args.UserAfter);
|
||||
if (NeedsRename(m.DisplayName))
|
||||
await args.Client.ReportAsync("Potential display name issue",
|
||||
$"User {m.GetMentionWithNickname()} has changed their __username__ from " +
|
||||
$"**{args.UserBefore.Username.Sanitize()}#{args.UserBefore.Discriminator}** to " +
|
||||
$"**{args.UserAfter.Username.Sanitize()}#{args.UserAfter.Discriminator}**",
|
||||
null,
|
||||
ReportSeverity.Medium);
|
||||
}
|
||||
|
||||
public static async Task OnMemberUpdated(GuildMemberUpdateEventArgs args)
|
||||
{
|
||||
if (NeedsRename(args.NicknameAfter))
|
||||
await args.Client.ReportAsync("Potential display name issue",
|
||||
$"Member {args.Member.GetMentionWithNickname()} has changed their __display name__ from " +
|
||||
$"**{(args.NicknameBefore ?? args.Member.Username).Sanitize()}** to " +
|
||||
$"**{args.Member.DisplayName.Sanitize()}**",
|
||||
null,
|
||||
ReportSeverity.Medium);
|
||||
}
|
||||
|
||||
public static async Task OnMemberAdded(GuildMemberAddEventArgs args)
|
||||
{
|
||||
if (NeedsRename(args.Member.DisplayName))
|
||||
await args.Client.ReportAsync("Potential display name issue",
|
||||
$"New member joined the server: {args.Member.GetMentionWithNickname()}",
|
||||
null,
|
||||
ReportSeverity.Medium);
|
||||
}
|
||||
|
||||
private static bool NeedsRename(string displayName)
|
||||
{
|
||||
displayName = displayName?.Normalize().TrimEager();
|
||||
if (string.IsNullOrEmpty(displayName))
|
||||
return true;
|
||||
|
||||
var consecutiveCombiningCharacters = 0;
|
||||
foreach (var c in displayName)
|
||||
{
|
||||
switch (char.GetUnicodeCategory(c))
|
||||
{
|
||||
case UnicodeCategory.ModifierLetter:
|
||||
case UnicodeCategory.ModifierSymbol:
|
||||
case UnicodeCategory.NonSpacingMark:
|
||||
if (++consecutiveCombiningCharacters > 1)
|
||||
return true;
|
||||
break;
|
||||
|
||||
case UnicodeCategory.Control:
|
||||
case UnicodeCategory.Format:
|
||||
break;
|
||||
|
||||
default:
|
||||
consecutiveCombiningCharacters = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -185,9 +185,14 @@ namespace CompatBot
|
||||
client.MessageDeleted += ThumbnailCacheMonitor.OnMessageDeleted;
|
||||
|
||||
client.UserUpdated += UsernameSpoofMonitor.OnUserUpdated;
|
||||
client.UserUpdated += UsernameZalgoMonitor.OnUserUpdated;
|
||||
|
||||
client.GuildMemberAdded += Greeter.OnMemberAdded;
|
||||
client.GuildMemberAdded += UsernameSpoofMonitor.OnMemberAdded;
|
||||
client.GuildMemberAdded += UsernameZalgoMonitor.OnMemberAdded;
|
||||
|
||||
client.GuildMemberUpdated += UsernameSpoofMonitor.OnMemberUpdated;
|
||||
client.GuildMemberUpdated += UsernameZalgoMonitor.OnMemberUpdated;
|
||||
|
||||
client.DebugLogger.LogMessageReceived += (sender, eventArgs) =>
|
||||
{
|
||||
|
||||
@@ -127,14 +127,16 @@ namespace CompatBot.Utils
|
||||
return await logChannel.SendMessageAsync(embed: embedBuilder.Build()).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public static async Task<DiscordMessage> ReportAsync(this DiscordClient client, string infraction, string description, IEnumerable<DiscordMember> potentialVictims, ReportSeverity severity)
|
||||
public static async Task<DiscordMessage> ReportAsync(this DiscordClient client, string infraction, string description, ICollection<DiscordMember> potentialVictims, ReportSeverity severity)
|
||||
{
|
||||
var result = new DiscordEmbedBuilder
|
||||
{
|
||||
Title = infraction,
|
||||
Color = GetColor(severity),
|
||||
Description = description.Trim(EmbedPager.MaxDescriptionLength),
|
||||
}.AddField("Potential Targets", string.Join(Environment.NewLine, potentialVictims.Select(GetMentionWithNickname)).Trim(EmbedPager.MaxFieldLength));
|
||||
};
|
||||
if (potentialVictims?.Count > 0)
|
||||
result.AddField("Potential Targets", string.Join(Environment.NewLine, potentialVictims.Select(GetMentionWithNickname)).Trim(EmbedPager.MaxFieldLength));
|
||||
var logChannel = await client.GetChannelAsync(Config.BotLogId).ConfigureAwait(false);
|
||||
return await logChannel.SendMessageAsync(embed: result.Build()).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user