// Path: src/main/java/enums/Language.java
// public enum Language {
// 
//     FR("Français", "FR"), EN("English", "EN"), ES("Español", "ES");
// 
//     private String name;
//     private String abrev;
// 
//     Language(String name, String abrev){
//         this.name = name;
//         this.abrev = abrev;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getAbrev() {
//         return abrev;
//     }
// 
//     @Override
//     public String toString(){
//         return name;
//     }
// }
// 
// Path: src/main/java/exceptions/DiscordException.java
// public interface DiscordException {
// 
//     void throwException(Message message, Command command, Language lg, Object... arguments);
// }
// 
// Path: src/main/java/exceptions/NotFoundDiscordException.java
// public class NotFoundDiscordException implements DiscordException {
// 
//     private String objectKey;
// 
//     public NotFoundDiscordException(String objectKey){
//         this.objectKey = objectKey;
//     }
// 
//     @Override
//     public void throwException(Message message, Command command, Language lg, Object... arguments) {
//         AnkamaBug bug = null;
//         if (command instanceof WhoisCommand)
//             bug = AnkamaBug.CHARACTER_NOT_FOUND;
//         else if (command instanceof GuildCommand)
//             bug = AnkamaBug.GUILD_NOT_FOUND;
//         else if (command instanceof AllianceCommand)
//             bug = AnkamaBug.ALLY_NOT_FOUND;
//         else if (command instanceof ItemCommand)
//             if (message.getContent().contains("'"))
//                 bug = AnkamaBug.ITEM_NOT_FOUND_APOSTROPHE;
//             else if (message.getContent().toLowerCase()
//                     .contains(Translator.getLabel(lg, "equip.muldo").toLowerCase())
//                     || message.getContent().toLowerCase()
//                     .contains(Translator.getLabel(lg, "equip.volkorne").toLowerCase()))
//                 bug = AnkamaBug.ITEM_PAGE_MULDO_VOLKORNE_NOT_FOUND;
// 
//         String gender = Translator.getLabel(lg, "exception.object." + objectKey + ".gender");
//         String text = Translator.getLabel(lg, "exception.notfound.not." + gender)
//                 + " " + Translator.getLabel(lg, "exception.object." + objectKey + ".singular")
//                 + " " + Translator.getLabel(lg, "exception.notfound.found." + gender) + ".";
// 
//         if (bug != null){
//             final AnkamaBug BUG = bug;
//             message.getChannel().flatMap(channel -> channel
//                     .createEmbed(BUG.decorateEmbed(text, lg)))
//                     .subscribe();
//         }
//         else
//             message.getChannel().flatMap(channel -> channel
//                     .createMessage(text))
//                     .subscribe();
//     }
// }
// 
// Path: src/main/java/exceptions/TooMuchDiscordException.java
// public class TooMuchDiscordException implements DiscordException {
//     private final static int ITEM_LIMIT = 25;
//     private String objectKey;
//     private boolean isTranslatable;
// 
//     public TooMuchDiscordException(String objectKey){
//         this.objectKey = objectKey;
//         this.isTranslatable = false;
//     }
// 
//     public TooMuchDiscordException(String objectKey, boolean isTranslatable){
//         this.objectKey = objectKey;
//         this.isTranslatable = isTranslatable;
//     }
// 
//     @Override
//     public void throwException(Message message, Command command, Language lg, Object... arguments) {
//         AnkamaBug bug = null;
// 
//         String gender = Translator.getLabel(lg, "exception.object." + objectKey + ".gender");
//         StringBuilder st = new StringBuilder(Translator.getLabel(lg, "exception.toomuch.toomuch." + gender))
//                 .append(" ").append(Translator.getLabel(lg, "exception.object." + objectKey + ".plural"))
//                 .append(" ").append(Translator.getLabel(lg, "exception.toomuch.found." + gender));
// 
//         if (arguments.length > 0) {
//             List<Object> objects = (List<Object>) arguments[0];
// 
//             long similarOcc = objects.stream()
//                     .collect(Collectors.groupingBy(e -> e, Collectors.counting()))
//                     .values().stream()
//                     .max(Long::compareTo)
//                     .orElse(0L);
// 
//             if (similarOcc > 1){
//                 if (command instanceof WhoisCommand)
//                     bug = AnkamaBug.GHOST_CHARACTER;
//                 else if (command instanceof GuildCommand)
//                     bug = AnkamaBug.GHOST_GUILD;
//                 else if (command instanceof AllianceCommand)
//                     bug = AnkamaBug.GHOST_ALLY;
//             }
// 
//             if (objects.size() <= ITEM_LIMIT){
//                 st.append(": ");
// 
//                 for (Object object : objects)
//                     if (isTranslatable)
//                         st.append(Translator.getLabel(lg, object.toString())).append(", ");
//                     else
//                         st.append(object.toString()).append(", ");
//                 st.delete(st.length() - 2, st.length()).append(".");
//             }
//             else
//                 st.append(". ").append(Translator.getLabel(lg, "exception.toomuch.items"));
//         }
//         else {
//             if (st.substring(st.length() - 1, st.length()).matches("\\s+"))
//                 st.delete(st.length() - 1, st.length());
//             st.append(".");
//         }
// 
//         if (bug != null){
//             final AnkamaBug BUG = bug;
//             message.getChannel().flatMap(channel -> channel
//                     .createEmbed(BUG.decorateEmbed(st.toString(), lg)))
//                     .subscribe();
//         }
//         else
//             message.getChannel().flatMap(channel -> channel
//                     .createMessage(st.toString()))
//                     .subscribe();
//     }
// }


import discord4j.core.object.entity.Message;
import enums.Language;
import exceptions.DiscordException;
import exceptions.NotFoundDiscordException;
import exceptions.TooMuchDiscordException;
import java.util.List;
package commands.model;


public abstract class FetchCommand extends AbstractCommand {

    protected DiscordException tooMuchServers;
    protected DiscordException notFoundServer;

    protected FetchCommand(String name, String pattern) {
        super(name, pattern);
// Path: src/main/java/enums/Language.java
// public enum Language {
// 
//     FR("Français", "FR"), EN("English", "EN"), ES("Español", "ES");
// 
//     private String name;
//     private String abrev;
// 
//     Language(String name, String abrev){
//         this.name = name;
//         this.abrev = abrev;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getAbrev() {
//         return abrev;
//     }
// 
//     @Override
//     public String toString(){
//         return name;
//     }
// }
// 
// Path: src/main/java/exceptions/DiscordException.java
// public interface DiscordException {
// 
//     void throwException(Message message, Command command, Language lg, Object... arguments);
// }
// 
// Path: src/main/java/exceptions/NotFoundDiscordException.java
// public class NotFoundDiscordException implements DiscordException {
// 
//     private String objectKey;
// 
//     public NotFoundDiscordException(String objectKey){
//         this.objectKey = objectKey;
//     }
// 
//     @Override
//     public void throwException(Message message, Command command, Language lg, Object... arguments) {
//         AnkamaBug bug = null;
//         if (command instanceof WhoisCommand)
//             bug = AnkamaBug.CHARACTER_NOT_FOUND;
//         else if (command instanceof GuildCommand)
//             bug = AnkamaBug.GUILD_NOT_FOUND;
//         else if (command instanceof AllianceCommand)
//             bug = AnkamaBug.ALLY_NOT_FOUND;
//         else if (command instanceof ItemCommand)
//             if (message.getContent().contains("'"))
//                 bug = AnkamaBug.ITEM_NOT_FOUND_APOSTROPHE;
//             else if (message.getContent().toLowerCase()
//                     .contains(Translator.getLabel(lg, "equip.muldo").toLowerCase())
//                     || message.getContent().toLowerCase()
//                     .contains(Translator.getLabel(lg, "equip.volkorne").toLowerCase()))
//                 bug = AnkamaBug.ITEM_PAGE_MULDO_VOLKORNE_NOT_FOUND;
// 
//         String gender = Translator.getLabel(lg, "exception.object." + objectKey + ".gender");
//         String text = Translator.getLabel(lg, "exception.notfound.not." + gender)
//                 + " " + Translator.getLabel(lg, "exception.object." + objectKey + ".singular")
//                 + " " + Translator.getLabel(lg, "exception.notfound.found." + gender) + ".";
// 
//         if (bug != null){
//             final AnkamaBug BUG = bug;
//             message.getChannel().flatMap(channel -> channel
//                     .createEmbed(BUG.decorateEmbed(text, lg)))
//                     .subscribe();
//         }
//         else
//             message.getChannel().flatMap(channel -> channel
//                     .createMessage(text))
//                     .subscribe();
//     }
// }
// 
// Path: src/main/java/exceptions/TooMuchDiscordException.java
// public class TooMuchDiscordException implements DiscordException {
//     private final static int ITEM_LIMIT = 25;
//     private String objectKey;
//     private boolean isTranslatable;
// 
//     public TooMuchDiscordException(String objectKey){
//         this.objectKey = objectKey;
//         this.isTranslatable = false;
//     }
// 
//     public TooMuchDiscordException(String objectKey, boolean isTranslatable){
//         this.objectKey = objectKey;
//         this.isTranslatable = isTranslatable;
//     }
// 
//     @Override
//     public void throwException(Message message, Command command, Language lg, Object... arguments) {
//         AnkamaBug bug = null;
// 
//         String gender = Translator.getLabel(lg, "exception.object." + objectKey + ".gender");
//         StringBuilder st = new StringBuilder(Translator.getLabel(lg, "exception.toomuch.toomuch." + gender))
//                 .append(" ").append(Translator.getLabel(lg, "exception.object." + objectKey + ".plural"))
//                 .append(" ").append(Translator.getLabel(lg, "exception.toomuch.found." + gender));
// 
//         if (arguments.length > 0) {
//             List<Object> objects = (List<Object>) arguments[0];
// 
//             long similarOcc = objects.stream()
//                     .collect(Collectors.groupingBy(e -> e, Collectors.counting()))
//                     .values().stream()
//                     .max(Long::compareTo)
//                     .orElse(0L);
// 
//             if (similarOcc > 1){
//                 if (command instanceof WhoisCommand)
//                     bug = AnkamaBug.GHOST_CHARACTER;
//                 else if (command instanceof GuildCommand)
//                     bug = AnkamaBug.GHOST_GUILD;
//                 else if (command instanceof AllianceCommand)
//                     bug = AnkamaBug.GHOST_ALLY;
//             }
// 
//             if (objects.size() <= ITEM_LIMIT){
//                 st.append(": ");
// 
//                 for (Object object : objects)
//                     if (isTranslatable)
//                         st.append(Translator.getLabel(lg, object.toString())).append(", ");
//                     else
//                         st.append(object.toString()).append(", ");
//                 st.delete(st.length() - 2, st.length()).append(".");
//             }
//             else
//                 st.append(". ").append(Translator.getLabel(lg, "exception.toomuch.items"));
//         }
//         else {
//             if (st.substring(st.length() - 1, st.length()).matches("\\s+"))
//                 st.delete(st.length() - 1, st.length());
//             st.append(".");
//         }
// 
//         if (bug != null){
//             final AnkamaBug BUG = bug;
//             message.getChannel().flatMap(channel -> channel
//                     .createEmbed(BUG.decorateEmbed(st.toString(), lg)))
//                     .subscribe();
//         }
//         else
//             message.getChannel().flatMap(channel -> channel
//                     .createMessage(st.toString()))
//                     .subscribe();
//     }
// }


// Path: src/main/java/commands/model/FetchCommand.java
import discord4j.core.object.entity.Message;
import enums.Language;
import exceptions.DiscordException;
import exceptions.NotFoundDiscordException;
import exceptions.TooMuchDiscordException;
import java.util.List;

package commands.model;


public abstract class FetchCommand extends AbstractCommand {

    protected DiscordException tooMuchServers;
    protected DiscordException notFoundServer;

    protected FetchCommand(String name, String pattern) {
        super(name, pattern);
        tooMuchServers = new TooMuchDiscordException("server", true);