// Path: src/main/java/commands/hidden/SendNudeCommand.java
// public class SendNudeCommand extends AbstractCommand {
// 
//     private static final Random RANDOM = new Random();
// 
//     public SendNudeCommand() {
//         super("sendnude", "");
//         setHidden(true);
//     }
// 
//     @Override
//     public void request(MessageCreateEvent event, Message message, Matcher m, Language lg) {
//         if (message.getChannel().blockOptional().map(chan -> chan instanceof PrivateChannel).orElse(false)
//                 || message.getChannel().blockOptional().map(chan -> ((TextChannel) chan).isNsfw()).orElse(false)){
//             int position = RANDOM.nextInt(Nude.values().length);
//             Nude nude = Nude.values()[position];
// 
//             message.getChannel().flatMap(chan -> chan.createEmbed(spec -> spec.setTitle(Translator.getLabel(lg, "sendnude.title"))
//                     .setDescription(Translator.getLabel(lg, "sendnude.author")
//                             .replace("{author}", nude.getAuthor())
//                             .replace("{url}", nude.getUrl()))
//                     .setColor(discord4j.rest.util.Color.PINK)
//                     .setFooter(Translator.getLabel(lg, "sendnude.footer")
//                             .replace("{position}", String.valueOf(position + 1))
//                             .replace("{number}", String.valueOf(Nude.values().length)), null)
//                     .setImage(nude.getImage()))).subscribe();
//         }
//         else // Exception NSFW
//             BasicDiscordException.NO_NSFW_CHANNEL.throwException(message, this, lg);
//     }
// 
//     @Override
//     public String help(Language lg, String prefixe) {
//         return "**" + prefixe + name + "** " + Translator.getLabel(lg, "sendnude.help");
//     }
// 
//     @Override
//     public String helpDetailed(Language lg, String prefixe) {
//         return help(lg, prefixe);
//     }
// }
// 
// Path: src/main/java/commands/model/Command.java
// public interface Command {
//     String getName();
//     String getPattern();
//     Matcher getMatcher(Message message);
//     void request(MessageCreateEvent event, Message message);
// 
//     /**
//      * Is the command usable in MP?
//      * @return True if it can be used in MP, else false.
//      */
//     boolean isUsableInMP();
// 
//     /**
//      * Is the command only usable by admins ?
//      * @return True if it only can be used by admin, else false.
//      */
//     boolean isAdmin();
// 
//     /**
//      * Is the command available by the admin ?
//      * @return true is the command is available, else false.
//      */
//     boolean isPublic();
// 
//     /**
//      * is the command is hidden ?
//      * @return True if the command is hidden
//      */
//     boolean isHidden();
// 
//     /**
//      * Change the command scope
//      * @param isPublic is command available or not
//      */
//     void setPublic(boolean isPublic);
// 
//     /**
//      * Is the command available by the guild admin ?
//      * @param g Guild concerned
//      * @return true is the command is forbidden, else false.
//      */
//     boolean isForbidden(Guild g);
// 
//     /**
//      * Change the command scope in MP
//      * @param isUsableInMP is command available in MP or not
//      */
//     void setUsableInMP(boolean isUsableInMP);
// 
//     /**
//      * Change the command scope for admin user
//      * @param isAdmin is command only available for admins or not
//      */
//     void setAdmin(boolean isAdmin);
// 
//     /**
//      * Hide or not the command
//      * @param isHidden is command hidden or not
//      */
//     void setHidden(boolean isHidden);
// 
//     /**
//      * @param prefixe Prefixe for command
//      * @return Short description of the command
//      */
//     String help(Language lg, String prefixe);
// 
//     /**
//      * @param prefixe Prefixe for command
//      * @return Detailed description of the command
//      */
//     String helpDetailed(Language lg, String prefixe);
// }


import commands.admin.*;
import commands.classic.*;
import commands.config.*;
import commands.hidden.SendNudeCommand;
import commands.model.Command;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
        // Basics commands
        addCommand(new AboutCommand());
        addCommand(new AlignmentCommand());
        addCommand(new AllianceCommand());
        addCommand(new AlmanaxCommand());
        addCommand(new AlmanaxAutoCommand());
        addCommand(new CommandCommand());
        addCommand(new DistanceCommand());
        addCommand(new DonateCommand());
        addCommand(new GuildCommand());
        addCommand(new HelpCommand());
        addCommand(new InviteCommand());
        addCommand(new ItemCommand());
        addCommand(new JobCommand());
        addCommand(new LanguageCommand());
        addCommand(new MapCommand());
        addCommand(new MonsterCommand());
        addCommand(new PingCommand());
        addCommand(new PortalCommand());
        addCommand(new PrefixCommand());
        addCommand(new RandomCommand());
        addCommand(new ResourceCommand());
        addCommand(new RSSCommand());
        addCommand(new ServerCommand());
        addCommand(new SetCommand());
        addCommand(new TutorialCommand());
        addCommand(new TwitterCommand());
        addCommand(new WhoisCommand());

        // Hidden commands
// Path: src/main/java/commands/hidden/SendNudeCommand.java
// public class SendNudeCommand extends AbstractCommand {
// 
//     private static final Random RANDOM = new Random();
// 
//     public SendNudeCommand() {
//         super("sendnude", "");
//         setHidden(true);
//     }
// 
//     @Override
//     public void request(MessageCreateEvent event, Message message, Matcher m, Language lg) {
//         if (message.getChannel().blockOptional().map(chan -> chan instanceof PrivateChannel).orElse(false)
//                 || message.getChannel().blockOptional().map(chan -> ((TextChannel) chan).isNsfw()).orElse(false)){
//             int position = RANDOM.nextInt(Nude.values().length);
//             Nude nude = Nude.values()[position];
// 
//             message.getChannel().flatMap(chan -> chan.createEmbed(spec -> spec.setTitle(Translator.getLabel(lg, "sendnude.title"))
//                     .setDescription(Translator.getLabel(lg, "sendnude.author")
//                             .replace("{author}", nude.getAuthor())
//                             .replace("{url}", nude.getUrl()))
//                     .setColor(discord4j.rest.util.Color.PINK)
//                     .setFooter(Translator.getLabel(lg, "sendnude.footer")
//                             .replace("{position}", String.valueOf(position + 1))
//                             .replace("{number}", String.valueOf(Nude.values().length)), null)
//                     .setImage(nude.getImage()))).subscribe();
//         }
//         else // Exception NSFW
//             BasicDiscordException.NO_NSFW_CHANNEL.throwException(message, this, lg);
//     }
// 
//     @Override
//     public String help(Language lg, String prefixe) {
//         return "**" + prefixe + name + "** " + Translator.getLabel(lg, "sendnude.help");
//     }
// 
//     @Override
//     public String helpDetailed(Language lg, String prefixe) {
//         return help(lg, prefixe);
//     }
// }
// 
// Path: src/main/java/commands/model/Command.java
// public interface Command {
//     String getName();
//     String getPattern();
//     Matcher getMatcher(Message message);
//     void request(MessageCreateEvent event, Message message);
// 
//     /**
//      * Is the command usable in MP?
//      * @return True if it can be used in MP, else false.
//      */
//     boolean isUsableInMP();
// 
//     /**
//      * Is the command only usable by admins ?
//      * @return True if it only can be used by admin, else false.
//      */
//     boolean isAdmin();
// 
//     /**
//      * Is the command available by the admin ?
//      * @return true is the command is available, else false.
//      */
//     boolean isPublic();
// 
//     /**
//      * is the command is hidden ?
//      * @return True if the command is hidden
//      */
//     boolean isHidden();
// 
//     /**
//      * Change the command scope
//      * @param isPublic is command available or not
//      */
//     void setPublic(boolean isPublic);
// 
//     /**
//      * Is the command available by the guild admin ?
//      * @param g Guild concerned
//      * @return true is the command is forbidden, else false.
//      */
//     boolean isForbidden(Guild g);
// 
//     /**
//      * Change the command scope in MP
//      * @param isUsableInMP is command available in MP or not
//      */
//     void setUsableInMP(boolean isUsableInMP);
// 
//     /**
//      * Change the command scope for admin user
//      * @param isAdmin is command only available for admins or not
//      */
//     void setAdmin(boolean isAdmin);
// 
//     /**
//      * Hide or not the command
//      * @param isHidden is command hidden or not
//      */
//     void setHidden(boolean isHidden);
// 
//     /**
//      * @param prefixe Prefixe for command
//      * @return Short description of the command
//      */
//     String help(Language lg, String prefixe);
// 
//     /**
//      * @param prefixe Prefixe for command
//      * @return Detailed description of the command
//      */
//     String helpDetailed(Language lg, String prefixe);
// }


// Path: src/main/java/commands/CommandManager.java
import commands.admin.*;
import commands.classic.*;
import commands.config.*;
import commands.hidden.SendNudeCommand;
import commands.model.Command;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;

        // Basics commands
        addCommand(new AboutCommand());
        addCommand(new AlignmentCommand());
        addCommand(new AllianceCommand());
        addCommand(new AlmanaxCommand());
        addCommand(new AlmanaxAutoCommand());
        addCommand(new CommandCommand());
        addCommand(new DistanceCommand());
        addCommand(new DonateCommand());
        addCommand(new GuildCommand());
        addCommand(new HelpCommand());
        addCommand(new InviteCommand());
        addCommand(new ItemCommand());
        addCommand(new JobCommand());
        addCommand(new LanguageCommand());
        addCommand(new MapCommand());
        addCommand(new MonsterCommand());
        addCommand(new PingCommand());
        addCommand(new PortalCommand());
        addCommand(new PrefixCommand());
        addCommand(new RandomCommand());
        addCommand(new ResourceCommand());
        addCommand(new RSSCommand());
        addCommand(new ServerCommand());
        addCommand(new SetCommand());
        addCommand(new TutorialCommand());
        addCommand(new TwitterCommand());
        addCommand(new WhoisCommand());

        // Hidden commands
        addCommand(new SendNudeCommand());