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

Posted

技术标签:

【中文标题】如何使用 JDA 禁止不和谐的人?【英文标题】:how to ban someone in discord using JDA? 【发布时间】:2021-07-10 06:14:29 【问题描述】:

我尝试了很多次,但没有奏效。 我正在尝试在 java JDA 中制作一个机器人,并且我想实现一个命令,管理员可以在其中禁止使用该机器人的用户。

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

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

【问题讨论】:

【参考方案1】:

由于您尝试使用(和不使用)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();
                       
            
     

它首先检查提及是否存在,如果不存在,它实际上会导致异常,所以trycatch 会有所帮助,如果失败,机器人将检查 ID,如果不存在, 它会发送一个原因。 注意:ID 区域中的target 变量以Main.jda 开头,其中Main 是您的机器人所在的主类(令牌、状态),jda 是您的JDA 变量。

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

【讨论】:

【参考方案2】:

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

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

这会以ban command 为理由禁止公会中的Member 而不删除任何消息。

如果第二个参数不是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();
    
    

【讨论】:

你能给我一个基于编辑的代码吗? 喜欢这个?请注意,这只是一种可能性。 你需要说什么不起作用。注意bot需要有BAN_MEMBERS权限,并且bot的最高角色需要高于要ban的用户的最高角色。 我给了机器人管理员权限。这就是我在不和谐中使用 ban 命令时出现的情况:指定的 ID 不是有效的雪花 ()。期望一个有效的长值! 您可以尝试使用getMentionedUsers() 而不是getMentionedMembers()

以上是关于如何使用 JDA 禁止不和谐的人?的主要内容,如果未能解决你的问题,请参考以下文章

如何在触发条件时退出一个方法并运行另一个方法,JDA 不和谐包装器

不和谐 jda 机器人 || UserUpdateActivityEvent 不触发

使用不和谐 JDA 清除聊天

关于我通过 jda 编码的不和谐机器人的问题

不和谐 Java JDA |哪个反应是addet

JDA - 如何等待下一条消息