如何使用 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();
它首先检查提及是否存在,如果不存在,它实际上会导致异常,所以try
和catch
会有所帮助,如果失败,机器人将检查 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 不和谐包装器