@@ -9,6 +9,7 @@ import 'package:running_on_dart/src/settings.dart';
99import 'package:running_on_dart/src/init.dart' ;
1010
1111const idFieldName = 'ID' ;
12+ final RegExp suspiciousNameRegex = RegExp (r'^[A-Za-z]+[\._][A-Za-z]+_\d+_\d+$' );
1213
1314class JoinLogsModule implements RequiresInitialization {
1415 final NyxxGateway _client = Injector .appInstance.get ();
@@ -36,6 +37,10 @@ class JoinLogsModule implements RequiresInitialization {
3637 descriptionBuffer.write (" (New user)" );
3738 }
3839
40+ if (event.member.user != null && _isSuspiciousName (event.member.user! )) {
41+ descriptionBuffer.write (" (Suspicious)" );
42+ }
43+
3944 final embed = EmbedBuilder (
4045 description: descriptionBuffer.toString (),
4146 author: EmbedAuthorBuilder (name: event.member.user! .username, iconUrl: event.member.user! .avatar.url),
@@ -116,6 +121,14 @@ class JoinLogsModule implements RequiresInitialization {
116121 String _formatDateTimeString (DateTime dateTime) =>
117122 '${dateTime .format (TimestampStyle .shortDate )} (${dateTime .format (TimestampStyle .relativeTime )})' ;
118123
124+ bool _isSuspiciousName (User user) {
125+ if (user.globalName != null && suspiciousNameRegex.hasMatch (user.globalName! )) {
126+ return true ;
127+ }
128+
129+ return suspiciousNameRegex.hasMatch (user.username);
130+ }
131+
119132 Future <bool > _isEnabledForGuild (Snowflake guildId) async {
120133 if (! intentFeaturesEnabled) {
121134 return false ;
0 commit comments