116 lines
4.9 KiB
Java
116 lines
4.9 KiB
Java
package handiebot.command;
|
|
|
|
import handiebot.command.commands.admin.BroadcastCommand;
|
|
import handiebot.command.commands.admin.QuitCommand;
|
|
import handiebot.command.commands.admin.SetPrefixCommand;
|
|
import handiebot.command.commands.misc.TengwarCommand;
|
|
import handiebot.command.commands.music.*;
|
|
import handiebot.command.commands.support.HelpCommand;
|
|
import handiebot.command.commands.support.InfoCommand;
|
|
import handiebot.command.commands.support.ReportCommand;
|
|
import handiebot.command.types.Command;
|
|
import handiebot.command.types.ContextCommand;
|
|
import handiebot.command.types.StaticCommand;
|
|
import handiebot.view.BotLog;
|
|
import sx.blah.discord.handle.obj.Permissions;
|
|
|
|
import java.text.MessageFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import static handiebot.HandieBot.log;
|
|
import static handiebot.HandieBot.resourceBundle;
|
|
import static handiebot.utils.MessageUtils.sendMessage;
|
|
|
|
/**
|
|
* @author Andrew Lalis
|
|
* Class to hold a list of commands, as static definitions that can be called upon by {@code CommandHandler}.
|
|
*/
|
|
public class Commands {
|
|
|
|
public static List<Command> commands = new ArrayList<>();
|
|
|
|
static {
|
|
//Music commands.
|
|
commands.add(new PlayCommand());
|
|
commands.add(new PlayNowCommand());
|
|
commands.add(new StopCommand());
|
|
commands.add(new QueueCommand());
|
|
commands.add(new SkipCommand());
|
|
commands.add(new RepeatCommand());
|
|
commands.add(new ShuffleCommand());
|
|
commands.add(new PlaylistCommand());
|
|
//Other commands.
|
|
commands.add(new HelpCommand());
|
|
commands.add(new InfoCommand());
|
|
commands.add(new ReportCommand());
|
|
commands.add(new SetPrefixCommand());
|
|
commands.add(new QuitCommand());
|
|
commands.add(new BroadcastCommand());
|
|
commands.add(new TengwarCommand());
|
|
}
|
|
|
|
/**
|
|
* Attempts to execute a command from a given command string.
|
|
* @param command The string representation of a main command, without prefix.
|
|
* @param context The command context.
|
|
*/
|
|
public static void executeCommand(String command, CommandContext context){
|
|
for (Command cmd : commands) {
|
|
if (cmd.getName().equals(command)){
|
|
if (cmd instanceof StaticCommand &&
|
|
((context != null && cmd.canUserExecute(context.getUser(), context.getGuild())) || context == null)){
|
|
log.log(BotLog.TYPE.COMMAND, command+" has been issued.");
|
|
((StaticCommand)cmd).execute();
|
|
return;
|
|
} else if (!cmd.canUserExecute(context.getUser(), context.getGuild())){
|
|
log.log(BotLog.TYPE.COMMAND, context.getGuild(), MessageFormat.format(resourceBundle.getString("commands.noPermission.log"), context.getUser().getName(), cmd.getName()));
|
|
sendMessage(MessageFormat.format(resourceBundle.getString("commands.noPermission.message"), command), context.getChannel());
|
|
return;
|
|
} else if (cmd instanceof ContextCommand){
|
|
log.log(BotLog.TYPE.COMMAND, context.getGuild(), context.getUser().getName()+" has issued the command: "+command);
|
|
((ContextCommand)cmd).execute(context);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
if (context == null){
|
|
log.log(BotLog.TYPE.COMMAND, MessageFormat.format(resourceBundle.getString("commands.invalidCommand.noContext"), command));
|
|
} else {
|
|
log.log(BotLog.TYPE.COMMAND, context.getGuild(), MessageFormat.format(resourceBundle.getString("commands.invalidCommand.context"), command, context.getUser().getName()));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Attempts to get a command object, given the name of a command.
|
|
* @param command The name of the command to get.
|
|
* @return Either a command, or null.
|
|
*/
|
|
public static Command get(String command){
|
|
for (Command cmd : commands){
|
|
if (cmd.getName().equals(command)){
|
|
return cmd;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Static function to easily check to see if the user has a specified permissions value.
|
|
* @param context The command context.
|
|
* @param permission The permission integer to check for.
|
|
* @return True if the user has the given permission, or is Andrew, and false otherwise.
|
|
*/
|
|
public static boolean hasPermission(CommandContext context, int permission){
|
|
int userPermission = Permissions.generatePermissionsNumber(context.getUser().getPermissionsForGuild(context.getGuild()));
|
|
boolean result = ((userPermission & permission) > 0) ||
|
|
(context.getUser().getLongID() == 235439851263098880L) ||
|
|
(permission == 0);
|
|
if (!result){
|
|
sendMessage(resourceBundle.getString("commands.noPermission.subcommand"), context.getChannel());
|
|
}
|
|
return result;
|
|
}
|
|
|
|
}
|