java - JDA 提到的成员 - 不工作的命令
问题描述
我正在使用Java和JDA API开发我的不和谐机器人。在那之前,我问了一个类似的问题,但我遇到了另一个问题。
从这一行开始,问题开始了:
final Member MentionedMem = event.getMessage().getMentionedMembers().get(0);
感谢https://stackoverflow.com/users/10630900/minn回答了上一个问题,他向我解释说这条线导致了错误:
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
由于某种原因或其他原因,它会引发错误。
我试图找到为什么这个命令不起作用的答案。我唯一知道的是这个命令returns
是一个空数组args
。因此,我无法完成机器人,即无法检查成员是否可以踢其他人,也无法制作主代码块踢成员。
如何修复此错误和/或编写其余代码?对不起我的英语,非常感谢你。
一些代码:
public class KickComm extends ListenerAdapter {
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
String[] message = event
.getMessage()
.getContentRaw()
.split(" ");
// final Member target = event.getMessage().getMentionedMembers().get(0); ERROR CUZ I DONT NOW WHY
final Member SelfMember = event
.getGuild()
.getSelfMember();
if(message[0].equalsIgnoreCase(Main.prefix + "kick"))
{
if (message.length < 2) {
EmbedBuilder NoUser = new EmbedBuilder();
NoUser.setColor(0xff3923);
NoUser.setTitle("\uD83D\uDD34You need to add a <@username> and <reason>");
NoUser.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
Objects
.requireNonNull(event.getMember())
.getUser()
.getAvatarUrl());
event
.getChannel()
.sendMessage(NoUser.build())
.queue();
NoUser.clear();
} else if (message.length < 3) {
EmbedBuilder NoReason = new EmbedBuilder();
NoReason.setColor(0xff3923);
NoReason.setTitle("\uD83D\uDD34You need to add a <reason>.");
NoReason.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
Objects
.requireNonNull(event.getMember())
.getUser()
.getAvatarUrl());
event
.getChannel()
.sendMessage(NoReason.build())
.queue();
NoReason.clear();
} else if(!SelfMember.hasPermission(Permission.KICK_MEMBERS)) {
EmbedBuilder NoPermission = new EmbedBuilder();
NoPermission.setColor(0xff3923);
NoPermission.setTitle("\uD83D\uDD34You don't have permission to use this command.");
NoPermission.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
Objects
.requireNonNull(event.getMember())
.getUser()
.getAvatarUrl());
event
.getChannel()
.sendMessage(NoPermission.build())
.queue();
NoPermission.clear();
} else if(!Objects.requireNonNull(event.getMember()).hasPermission(Permission.KICK_MEMBERS) || !event.getMember().canInteract(target)) { //Example, don't works
EmbedBuilder NoPermission = new EmbedBuilder();
NoPermission.setColor(0xff3923);
NoPermission.setTitle("\uD83D\uDD34You don't have permission to use this command.");
NoPermission.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
Objects
.requireNonNull(event.getMember())
.getUser()
.getAvatarUrl());
event
.getChannel()
.sendMessage(NoPermission.build())
.queue();
NoPermission.clear();
}
}
}
}
UPD:如果你降级,请指出我犯的错误,而不是仅仅因为你想降级。我要纠正错误,而不是破坏你的心情
解决方案
User mentionedUser = event.getMessage().getMentionedMembers().get(0).getUser();
如果有人还需要它...
出于某种原因,问题是您使用了Member而不是User。此外,您必须使用.getUser()才能真正获得您想要的用户。
推荐阅读
- python - 如何区分在python(Linux)中插入USB的物理设备?
- rotation - ARCore:区分房间内相邻垂直墙壁中检测到的两个平面
- php - 根据数组数据设置行值
- arrays - 通过结构访问数组(使用指针)
- composer-php - 我安装了作曲家 2.0.12。然后当我运行“全局作曲家需要 CodeIgniter / 安装程序”
- r - 在 Linux Ubuntu 上的 R 4 上安装 stringi 包时出错
- c# - 压缩 DynamoDB 中的现有记录
- flutter - "!" 和有什么不一样 和 ”?” dart null 安全中的操作员?
- oracle - 从不同架构查询连接时出错
- c++ - 为什么我们可以使用带指针的箭头?