Search code examples
javaintellij-ideadiscorddiscord-jda

onGuildMemberJoin Does not work / is not being called


`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!!


Solution

  • 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();