【问题标题】:JDA Bot ExceptionJDA 机器人异常
【发布时间】:2020-11-16 16:56:02
【问题描述】:

我在为 Discord 创建 Java 机器人时遇到问题。我决定发出命令将玩家踢出服务器。但我遇到了困难。

这是一个代码:

package com.company;

import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

import java.util.List;
import java.util.Objects;

public class KickComm extends ListenerAdapter {

    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        String[] args = event.getMessage().getContentRaw().split("\\s+");

        List<Member> mentionedMembers = event.getMessage().getMentionedMembers();
        Member target = mentionedMembers.get(0);

        if(args[0].equalsIgnoreCase(Main.prefix + "kick"))
        {
            if (args.length < 2) {                                                                  //TODO NOT WORK

                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 (args.length < 3) {                                                                //WORK

                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(!Objects.requireNonNull(event.getMember()).hasPermission(Permission.KICK_MEMBERS)  //WORK
                &&
                     !event.getMember().canInteract(target)) {

                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(mentionedMembers.isEmpty()) {                                                       //TODO NOT WORK 

                EmbedBuilder NoMember = new EmbedBuilder();
                NoMember.setColor(0xff3923);
                NoMember.setTitle("\uD83D\uDD34I don't see member with this nickname.");
                NoMember.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
                        Objects.requireNonNull(event.getMember()).getUser().getAvatarUrl());

                event.getChannel().sendMessage(NoMember.build()).queue();

                NoMember.clear();
            }
        }
    }
}

两行问题:

if (args.length < 2) {

和

else if(mentionedMembers.isEmpty()) {

最重要的是,我不明白为什么第 1 行不起作用。当我在 discord 中写 !kick 命令时,控制台显示错误:

java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0

我不知道为什么 args 长度为 0,这很奇怪。我尝试将“if-else-if”改为“if”,但它不起作用。我很想继续创建该命令,但是我不知道该怎么办。

P.S.:这不是所有的代码,因为这个错误我无法继续前进。对不起我的谷歌翻译英语,非常感谢

【问题讨论】:

    标签: java discord-jda


    【解决方案1】:

    异常是由这一行引起的:

    Member target = mentionedMembers.get(0);
    

    您的问题是并非每条消息都可能提及成员。请记住,您也会收到自己的消息。如果机器人只发送嵌入,则内容将为空。

    如果内容只是空格,您的split("\\s+") 将返回一个空数组。这将导致此行出现ArrayIndexOutOfBoundsException:

    if(args[0].equalsIgnoreCase(Main.prefix + "kick"))
    

    我建议在尝试访问它们各自的元素之前检查mentionedMembers 的长度并检查args 的长度。

    【讨论】:

    • 谢谢,我现在就试试
    猜你喜欢
    • 2020-12-27
    • 2019-02-13
    • 2012-11-23
    • 1970-01-01
    • 2021-08-06
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    相关资源
    最近更新 更多