Как вызвать что-то, если все объекты возвращают false - PullRequest
1 голос
/ 18 января 2020

Возможно, есть похожий вопрос, подобный этому, но я не знаю точных слов того, что я ищу.

У меня есть класс с именем Command

package loopturn.loanbot.main;

import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

public class Command extends ListenerAdapter implements CommandInterface {

    private String command;
    private CommandExecutor executor;

    public Command(String command, CommandExecutor executor) {
        this.command = command;
        this.executor = executor;
    }

    public Boolean onCommand() {
        return null;
    }

    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        String[] messageSplitBySpace = event.getMessage().getContentRaw().split(" ");

        if(messageSplitBySpace[0].startsWith("!")) {
            if(messageSplitBySpace[0].equalsIgnoreCase("!" + command)) {
                executor.onCall(event);
            }
        }
    }

}

И я создаю новую команду для каждой команды. Кажется просто, верно. Ну, как бы я сделал это, когда команда запускается, но не существует (команда начинается с отправки сообщения, которое начинается с '!'), он говорит им, что его не существует.

Я имел идея создания другого класса, который принял бы команду и затем вызвал команду, когда это было сказано в чате, но это не кажется правильным решением. Я хотел посмотреть, сможет ли кто-нибудь придумать лучший способ сделать это.

Ответы [ 2 ]

1 голос
/ 18 января 2020

Вы можете иметь таблицу поиска и вернуть значение по умолчанию, если / когда команда не найдена.

execute( String command ) { 
    Command c = map.get(command)
    if (c = null) {
       c = new EmptyCommand()
    }
    c.run();
}

Таким образом, если команда найдена, вы выполняете ее, а если нет, вы выполняете EmptyCommand, который ничего не делает (или в вашем случае отображает сообщение «Недопустимая команда» для пользователь или что-то подобное).

0 голосов
/ 18 января 2020

Я посоветую создать независимую фабрику для обнаружения команды на основе event.getMessage(). Когда событие содержит "!" эта фабрика будет генерировать специальную команду, скажем "NaNCommand". С помощью этой команды вы можете обрабатывать все сценарии ios вызова команды, которая не существует.

Command c = CommandFactory.discover(event)
c.execute()

public class CommandFactory{

public static discover(GuildMessageReceivedEvent event){

String[] messageSplitBySpace = event.getMessage().getContentRaw().split(" ");

        if(messageSplitBySpace[0].startsWith("!")) {
         // send NaNCommand
        }
        else{
         //Check event and pass a valid command
        }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...