如何使用 JDA 禁止不和谐的人?

时间:2021-04-15 08:05:50

标签: java intellij-idea discord-jda

我如何使用 JDA 禁止不和谐的人?我尝试了很多次但不起作用。 我正在尝试在 Java JDA 中创建一个机器人,并且我想实现一个命令,管理员可以在其中禁止用户使用该机器人。

这是我的ban命令的基本代码:

String[] args = event.getMessage().getContentRaw().split("\\s+"); // gets message from mod and splits every whitespace.

if (args[0].equalsIgnoreCase(Main.prefix + "ban")) {
    // ban code here
}

2 个答案:

答案 0 :(得分:1)

您可以使用 Guild#ban(例如使用 Member):

Guild guild=event.getGuild();
Member member=event.getMentionedMembers().get(0);//TODO check if exists
guild.ban(member,0,"ban command").queue();

这会以 Member 为由禁止 ban command 加入公会,但不会删除任何消息。

如果第二个参数不是 0,discord 将删除用户在过去 n 天内发送的所有消息(其中 n 是参数)

该消息是可选的,您也可以使用 User 或 ID 代替成员。

集成到您的代码中,它可能如下所示:

String[] args = event.getMessage().getContentRaw().split("\\s+"); // gets message from mod and splits every whitespace.

if (args[0].equalsIgnoreCase(Main.prefix + "ban")) {
    if(args.length==1){//no argument
        //error message
    }
    else if(event.getMentionedMembers().isEmpty()){//no mentioned members, try to use argument as ID
        event.getGuild().ban(args[1],0,"ban command").queue();
    }else{//mentioned members
        
        event.getGuild().ban(event.getMentionedMembers().get(0),0,"ban command").queue();
    }
    
}

答案 1 :(得分:0)

由于您尝试使用(和不使用)ID,此答案可能会有所帮助。

if(args[0].equalsIgnoreCase(Main.prefix+"ban") && !event.getAuthor().isBot()) {
            try {
             Member target = event.getMessage().getMentionedMembers().get(0);
             if (!event.getMember().canInteract(target) || !event.getMember().hasPermission(Permission.BAN_MEMBERS)) {
               event.getChannel().sendMessage("You don't have the required permission to ban this member!").queue();
               return;
             }
 
             final Member selfMember = event.getGuild().getSelfMember();

             if (!selfMember.canInteract(target) || !selfMember.hasPermission(Permission.BAN_MEMBERS)) {
               event.getChannel().sendMessage("I don't have the required permission to kick this member!").queue();
               return;
             }
                
             event.getGuild().ban(target, 0, "REASON").queue();
             event.getChannel().sendMessage(target.getUser().getName()+" has been banned successfully.").queue();
            }catch(ArrayIndexOutOfBoundsException ex) {
                try {
                     User target = Main.jda.getUserById(args[1]);
                     if (!event.getMember().canInteract(event.getGuild().getMember(target)) || !event.getMember().hasPermission(Permission.BAN_MEMBERS)) {
                       event.getChannel().sendMessage("You don't have the required permission to ban this member!").queue();
                       return;
                     }
         
                     final Member selfMember = event.getGuild().getSelfMember();

                     if (!selfMember.canInteract(event.getGuild().getMember(target)) || !selfMember.hasPermission(Permission.BAN_MEMBERS)) {
                       event.getChannel().sendMessage("I don't have the required permission to kick this member!").queue();
                       return;
                     }
                        
                     event.getGuild().ban(target, 0, "REASON").queue();
                     event.getChannel().sendMessage("User has been banned successfully.").queue();
                    }catch(Exception ex2) {
                        event.getChannel().sendMessage("The user is not in the server, Or Invalid ID").queue();
                    }   
            }
     }

它首先检查提及是否存在,如果没有,它实际上会导致异常,所以 try & catch 会有所帮助,如果失败,机器人将检查 ID,如果它不存在,它会发送一个原因。 注意:ID区域中的target变量以Main.jda开头,其中Main是你的bot所在的主类(Token,Status),jda是你的{{ 1}} 变量。

如果您有任何问题,请发表评论。