`public class VerificationSystem extends ListenerAdapter {
@Override
public void onGuildMemberJoin(GuildMemberJoinEvent event) {
System.out.println("WORKS!");
String memberName = event.getMember().getEffectiveName();
Member member = event.getMember();
event.getGuild().addRoleToMember(member,event.getGuild().getRoleById("1034143551568752682")).queue(); //Grants the new member "Unverified" role
TextChannel textChannel = event.getGuild().createTextChannel("Verification for: " + memberName).complete(); // Creates new verification channel
textChannel.getManager().getChannel().upsertPermissionOverride(event.getMember()).setAllowed(Permission.VIEW_CHANNEL).queue(); // Grants the new member view permissions to the channel
textChannel.getManager().getChannel().upsertPermissionOverride(event.getGuild().getRoleById("1034143551568752682")).setDenied(Permission.VIEW_CHANNEL).queue(); // Revokes the view permission for @everyone
}`
The event register:
JDA jda = JDABuilder.createDefault(token)
.setActivity(Activity.playing("Football Manager"))
.addEventListeners(new VerificationSystem())
.build().awaitReady();
For some reason this method does not work. It is correctly registered, and it does not work whenever someone joins the server. Please help, this is killing me!!
Since one of updates Discord added such thing as "Intents". Now all developers have to specify what kind of data their bots need. To accept events of members' joining you need to use intent "GUILD_MEMBERS". Note that this intent is priveleged, what means you can use it easily until your bot reaches 100 servers, then you must get verification from Discord.
To enable intents in bot visit Developers portal
To enable intents in JDA use enableIntents
method in builder.
JDA jda = JDABuilder.createDefault(token)
.setActivity(Activity.playing("Football Manager"))
.addEventListeners(new VerificationSystem())
// Enables GUILD_MEMBERS intent
.enableIntents(GatewayIntent.GUILD_MEMBERS)
.build().awaitReady();