Mason
Mason

Reputation: 9

Adding roles to a mentioned user in JDA

I want to be able to run a command that begins with !suspend, mentions a user, then determines a time length and adds a role named 'Suspended' to the mentioned user for the specified time length.

    Message message = event.getMessage(); //Sets the message equal to the variable type 'Message' so it can be modified within the program.
    String content = message.getContentRaw(); //Gets the raw content of the message and sets it equal to a string (best way to convert types Message to String).
    MessageChannel channel = event.getChannel(); //Gets the channel the message was sent in (useful for sending error messages).
    Guild guild = event.getGuild();
    //Role group = content.matches("((Suspended))") ? guild.getRolesByName("Suspended", true).get(0) : null;

    if(content.startsWith("!suspend"))//Pretty self explanatory. Enters the loop if the message begins with !suspend.
    {
        String[] spliced = content.split("\\s+"); //Splits the message into an array based on the spaces in the message.
        TextChannel textChannel = event.getGuild().getTextChannelsByName("ranked-ms_punishments",true).get(0); //If there is a channel called ranked-ms_punishments which there should be set the value of it equal to the variable.

        int length = spliced.length;//Sets 'length' equal to the number of items in the array.

        if(length == 3)//If the number of items in the array is 3 then...
        {
            if(spliced[1].startsWith("<"))
            {
                list.add(spliced[1]);
                String tempuser = spliced[1];
                textChannel.sendMessage(tempuser + " you have been suspended for " + spliced[2] + " days.").queue();//Sends the message in the quotations.
                //add role to the member
            }
        }else {
            channel.sendMessage("Please use the following format for suspending a user: '!suspend' <@user> (length)").queue(); //If length doesn't equal 3 then it sends the message in quotations.
        }
    }

Not sure how to do this, as I'm too unfamiliar with JDA to make it work. I have everything working except for the actual addition of the role named 'Suspended'.

Upvotes: 0

Views: 13349

Answers (3)

Filler
Filler

Reputation: 133

event.getGuild().addRoleToMember(member, event.getGuild().getRoleById(yourRole)).queue();

Upvotes: 1

david-so
david-so

Reputation: 371

You can do this: 👍

event.getGuild().addRoleToMember(memberId, jda.getRoleById(yourRole));

Upvotes: 2

Thibstars
Thibstars

Reputation: 1083

Adding a role to the mentioned members in a message can be done as follows:

Role role = event.getGuild().getRolesByName("Suspended", false).get(0);
List<Member> mentionedMembers = message.getMentionedMembers();
for (Member mentionedMember : mentionedMembers) {
    event.getGuild().getController().addRolesToMember(mentionedMember, role).queue();
}

Note that your bot will need the MANAGE_ROLES permission to add roles.

Upvotes: 1

Related Questions