Skip to content

Commit 85d8f7e

Browse files
authored
Merge pull request #494 from danthe1st/fix-rename
fix pingable name listener
2 parents 388ee3d + 0431733 commit 85d8f7e

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

src/main/java/net/discordjug/javabot/listener/PingableNameListener.java

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import net.discordjug.javabot.util.StringUtils;
77
import net.dv8tion.jda.api.entities.Member;
88
import 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;
1010
import net.dv8tion.jda.api.hooks.ListenerAdapter;
1111

1212
import java.io.IOException;
@@ -15,6 +15,7 @@
1515
import java.util.List;
1616
import java.util.Random;
1717
import java.util.Scanner;
18+
import java.util.regex.Pattern;
1819
import 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

Comments
 (0)