66import net .discordjug .javabot .util .StringUtils ;
77import net .dv8tion .jda .api .entities .Member ;
88import net .dv8tion .jda .api .events .guild .member .GuildMemberJoinEvent ;
9- import net .dv8tion .jda .api .events .guild .member .update . GuildMemberUpdateNicknameEvent ;
9+ import net .dv8tion .jda .api .events .guild .member .GuildMemberUpdateEvent ;
1010import net .dv8tion .jda .api .hooks .ListenerAdapter ;
1111
1212import java .io .IOException ;
1515import java .util .List ;
1616import java .util .Random ;
1717import java .util .Scanner ;
18+ import java .util .regex .Pattern ;
1819import java .util .stream .Collectors ;
1920
2021/**
@@ -25,6 +26,7 @@ public class PingableNameListener extends ListenerAdapter {
2526
2627 private static final String ADJECTIVES_URL = "https://gist.githubusercontent.com/karlbright/f91229b8c5ac6f4291dc/raw/4a69c2c50b88ee4559b021c443fee899535adc60/adjectives.txt" ;
2728 private static final String NOUNS_URL = "https://raw.githubusercontent.com/hugsy/stuff/main/random-word/english-nouns.txt" ;
29+ private static final Pattern PINGABLE_NAME_PATTERN = Pattern .compile ("(\\ W*\\ w){3,}\\ W*" );
2830 private static final Random random = new Random ();
2931 private final NotificationService notificationService ;
3032 private final List <String > nouns ;
@@ -44,21 +46,20 @@ public PingableNameListener(NotificationService notificationService) {
4446
4547 @ Override
4648 public void onGuildMemberJoin (GuildMemberJoinEvent event ) {
47- checkNickname (event .getMember (), null );
49+ checkNickname (event .getMember ());
4850 }
49-
51+
5052 @ Override
51- public void onGuildMemberUpdateNickname ( GuildMemberUpdateNicknameEvent event ) {
52- checkNickname (event .getMember (), event . getNewNickname () );
53+ public void onGuildMemberUpdate ( GuildMemberUpdateEvent event ) {
54+ checkNickname (event .getMember ());
5355 }
5456
5557 /**
5658 * Checks whether the given {@link Member}'s nickname should be changed.
5759 * @param member The {@link Member} to check.
58- * @param nickname The {@link Member}'s new Nickname, null if that does not exist.
5960 */
60- private void checkNickname (Member member , String nickname ) {
61- if (!( nickname == null || isPingable (nickname )) && ! isPingable ( member .getUser (). getName ()) && !canBypassCheck (member )) {
61+ private void checkNickname (Member member ) {
62+ if (!isPingable (member .getEffectiveName ()) && !canBypassCheck (member )) {
6263 changeName (member );
6364 }
6465 }
@@ -72,9 +73,9 @@ private void changeName(Member member) {
7273 String newName = generateRandomName ();
7374 member .modifyNickname (newName .substring (0 , Math .min (31 , newName .length ()))).queue ();
7475 member .getUser ().openPrivateChannel ()
75- .flatMap (channel -> channel .sendMessageFormat ("Your nickname has been set to `%s` since both your user- and nickname's first three characters were deemed as not -pingable." , newName ))
76+ .flatMap (channel -> channel .sendMessageFormat ("Your display name in %s has been set to `%s` since your previous name was deemed as non -pingable." , member . getGuild (). getName () , newName ))
7677 .queue ();
77- notificationService .withGuild (member .getGuild ()).sendToModerationLog (c -> c .sendMessageFormat ("Changed %s's nickname from `%s` to `%s`." , member .getAsMention (), oldName , newName ));
78+ notificationService .withGuild (member .getGuild ()).sendToMessageLog (c -> c .sendMessageFormat ("Changed %s's nickname from `%s` to `%s`." , member .getAsMention (), oldName , newName ));
7879 }
7980
8081 /**
@@ -83,15 +84,7 @@ private void changeName(Member member) {
8384 * @return True if first three characters contain invalid characters, False if not.
8485 */
8586 private boolean isPingable (String name ) {
86- if (name == null ) return true ;
87- char [] nameChars = name .toCharArray ();
88- for (int i = 0 ; i < Math .min (2 ,name .length ()); i ++) {
89- char c = nameChars [i ];
90- if (c < 32 || c > 126 ) {
91- return false ;
92- }
93- }
94- return true ;
87+ return PINGABLE_NAME_PATTERN .matcher (name ).matches ();
9588 }
9689
9790 /**
@@ -101,8 +94,7 @@ private boolean isPingable(String name) {
10194 private String generateRandomName () {
10295 String noun = nouns .get (random .nextInt (nouns .size ()));
10396 String adjective = adjectives .get (random .nextInt (adjectives .size ()));
104- int number = random .nextInt (10000 );
105- return StringUtils .capitalize (adjective ) + StringUtils .capitalize (noun ) + number ;
97+ return StringUtils .capitalize (adjective ) + StringUtils .capitalize (noun );
10698 }
10799
108100 /**
@@ -130,6 +122,6 @@ private static List<String> readStrings(String url) {
130122 * @return Whether the Member can bypass name-checks or not.
131123 */
132124 private static boolean canBypassCheck (Member member ) {
133- return member .getUser ().isBot () || member .getUser ().isSystem () || member .getGuild ().getSelfMember ().canInteract (member );
125+ return member .getUser ().isBot () || member .getUser ().isSystem () || ! member .getGuild ().getSelfMember ().canInteract (member );
134126 }
135127}
0 commit comments