use of net.kodehawa.mantarobot.modules.commands.SimpleCommand in project MantaroBot by Mantaro.
the class InfoCmds method help.
@Command
public static void help(CommandRegistry cr) {
Random r = new Random();
List<String> jokes = Collections.unmodifiableList(Arrays.asList("Yo damn I heard you like help, because you just issued the help command to get the help about the help command.", "Congratulations, you managed to use the help command.", "Helps you to help yourself.", "Help Inception.", "A help helping helping helping help.", "I wonder if this is what you are looking for..."));
cr.register("help", new SimpleCommand(Category.INFO) {
@Override
protected void call(GuildMessageReceivedEvent event, String content, String[] args) {
if (content.isEmpty()) {
String defaultPrefix = MantaroData.config().get().prefix, guildPrefix = MantaroData.db().getGuild(event.getGuild()).getData().getGuildCustomPrefix();
String prefix = guildPrefix == null ? defaultPrefix : guildPrefix;
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
EmbedBuilder embed = baseEmbed(event, "MantaroBot Help").setColor(Color.PINK).setDescription("Command help. For extended usage please use " + String.format("%shelp <command>.", prefix) + (guildData.getDisabledCommands().isEmpty() ? "" : "\n" + "Only showing non-disabled commands. Total disabled commands: " + guildData.getDisabledCommands().size())).setFooter(String.format("To check command usage, type %shelp <command> // -> Commands: " + CommandProcessor.REGISTRY.commands().values().stream().filter(c -> c.category() != null).count(), prefix), null);
Arrays.stream(Category.values()).filter(c -> c != Category.CURRENCY || !MantaroData.config().get().isPremiumBot()).filter(c -> c != Category.MODERATION || CommandPermission.ADMIN.test(event.getMember())).filter(c -> c != Category.OWNER || CommandPermission.OWNER.test(event.getMember())).forEach(c -> embed.addField(c + " Commands:", forType(guildData, c), false));
event.getChannel().sendMessage(embed.build()).queue();
} else {
net.kodehawa.mantarobot.modules.commands.base.Command command = CommandProcessor.REGISTRY.commands().get(content);
if (command != null) {
final MessageEmbed help = command.help(event);
Optional.ofNullable(help).ifPresent((help1) -> event.getChannel().sendMessage(help1).queue());
if (help == null)
event.getChannel().sendMessage(EmoteReference.ERROR + "There's no extended help set for this command.").queue();
} else {
event.getChannel().sendMessage(EmoteReference.ERROR + "A command with this name doesn't exist").queue();
}
}
}
@Override
public MessageEmbed help(GuildMessageReceivedEvent event) {
return helpEmbed(event, "Help Command").setColor(Color.PINK).setDescription("**" + jokes.get(r.nextInt(jokes.size())) + "**").addField("Usage", "`~>help` - **Return information about who issued the command**.\n" + "`~>help <command>` - **Return information about the command specified**.", false).build();
}
});
}
use of net.kodehawa.mantarobot.modules.commands.SimpleCommand in project MantaroBot by Mantaro.
the class MiscCmds method randomFact.
@Command
public static void randomFact(CommandRegistry cr) {
cr.register("randomfact", new SimpleCommand(Category.MISC) {
@Override
protected void call(GuildMessageReceivedEvent event, String content, String[] args) {
event.getChannel().sendMessage(EmoteReference.TALKING + facts.get().get(new Random().nextInt(facts.get().size() - 1))).queue();
}
@Override
public MessageEmbed help(GuildMessageReceivedEvent event) {
return helpEmbed(event, "Random Fact").setDescription("**Sends a random fact.**").build();
}
});
cr.registerAlias("randomfact", "rf");
}
use of net.kodehawa.mantarobot.modules.commands.SimpleCommand in project MantaroBot by Mantaro.
the class OwnerCmd method blacklist.
@Command
public static void blacklist(CommandRegistry cr) {
cr.register("blacklist", new SimpleCommand(Category.OWNER, CommandPermission.OWNER) {
@Override
protected void call(GuildMessageReceivedEvent event, String content, String[] args) {
MantaroObj obj = MantaroData.db().getMantaroData();
if (args[0].equals("guild")) {
if (args[1].equals("add")) {
if (MantaroBot.getInstance().getGuildById(args[2]) == null)
return;
obj.getBlackListedGuilds().add(args[2]);
event.getChannel().sendMessage(EmoteReference.CORRECT + "Blacklisted Guild: " + event.getJDA().getGuildById(args[2])).queue();
obj.save();
} else if (args[1].equals("remove")) {
if (!obj.getBlackListedGuilds().contains(args[2]))
return;
obj.getBlackListedGuilds().remove(args[2]);
event.getChannel().sendMessage(EmoteReference.CORRECT + "Unblacklisted Guild: " + args[2]).queue();
obj.save();
}
return;
}
if (args[0].equals("user")) {
if (args[1].equals("add")) {
if (MantaroBot.getInstance().getUserById(args[2]) == null)
return;
obj.getBlackListedUsers().add(args[2]);
event.getChannel().sendMessage(EmoteReference.CORRECT + "Blacklisted User: " + event.getJDA().getUserById(args[2])).queue();
obj.save();
} else if (args[1].equals("remove")) {
if (!obj.getBlackListedUsers().contains(args[2]))
return;
obj.getBlackListedUsers().remove(args[2]);
event.getChannel().sendMessage(EmoteReference.CORRECT + "Unblacklisted User: " + event.getJDA().getUserById(args[2])).queue();
obj.save();
}
}
}
@Override
public MessageEmbed help(GuildMessageReceivedEvent event) {
return helpEmbed(event, "Blacklist command").setDescription("**Blacklists a user (user argument) or a guild (guild argument) by id.**").setFooter("Examples", "~>blacklist user add/remove 293884638101897216\n" + "~>blacklist guild add/remove 305408763915927552").build();
}
});
}
use of net.kodehawa.mantarobot.modules.commands.SimpleCommand in project MantaroBot by Mantaro.
the class OwnerCmd method owner.
@Command
public static void owner(CommandRegistry cr) {
Map<String, Evaluator> evals = new HashMap<>();
evals.put("js", (event, code) -> {
ScriptEngine script = new ScriptEngineManager().getEngineByName("nashorn");
script.put("mantaro", MantaroBot.getInstance());
script.put("db", MantaroData.db());
script.put("jda", event.getJDA());
script.put("event", event);
script.put("guild", event.getGuild());
script.put("channel", event.getChannel());
try {
return script.eval(String.join("\n", "load(\"nashorn:mozilla_compat.js\");", "imports = new JavaImporter(java.util, java.io, java.net);", "(function() {", "with(imports) {", code, "}", "})()"));
} catch (Exception e) {
return e;
}
});
evals.put("bsh", (event, code) -> {
Interpreter interpreter = new Interpreter();
try {
interpreter.set("mantaro", MantaroBot.getInstance());
interpreter.set("db", MantaroData.db());
interpreter.set("jda", event.getJDA());
interpreter.set("event", event);
interpreter.set("guild", event.getGuild());
interpreter.set("channel", event.getChannel());
return interpreter.eval(String.join("\n", "import *;", code));
} catch (Exception e) {
return e;
}
});
evals.put("cw", (event, code) -> {
Object[] returns;
boolean errored = false;
try {
returns = MantaroData.connectionWatcher().eval(code);
} catch (RuntimeException e) {
errored = true;
returns = new Object[] { e.getMessage() };
}
String result = returns.length == 1 ? returns[0] == null ? null : String.valueOf(returns[0]) : Arrays.asList(returns).toString();
if (errored)
return new Error(result == null ? "Internal error" : result) {
@Override
public String toString() {
return getMessage();
}
};
return result;
});
cr.register("owner", new SimpleCommand(Category.OWNER) {
@Override
public CommandPermission permission() {
return CommandPermission.OWNER;
}
@Override
public MessageEmbed help(GuildMessageReceivedEvent event) {
return helpEmbed(event, "Owner command").setDescription("`~>owner shutdown/forceshutdown`: Shutdowns the bot\n" + "`~>owner restart/forcerestart`: Restarts the bot.\n" + "`~>owner scheduleshutdown time <time>` - Schedules a fixed amount of seconds the bot will wait to be shutted down.\n" + "`~>owner varadd <pat/hug/greeting/splash>` - Adds a link or phrase to the specified list.\n" + "`~>owner eval <bsh/js/cw> <line of code>` - Evals a specified code snippet.\n" + "`~>owner cw <info/eval>` - Shows info or evals specified code in the Connection Watcher.\n" + "`~>owner premium add <id> <days>` - Adds premium to the specified user for x days.").addField("Shush.", "If you aren't Adrian or Kode you shouldn't be looking at this, huh 👀" + EmoteReference.EYES, false).build();
}
@Override
public void call(GuildMessageReceivedEvent event, String content, String[] args) {
if (args.length < 1) {
onHelp(event);
return;
}
String option = args[0];
if (option.equals("cw")) {
if (args.length < 2) {
onHelp(event);
return;
}
String sub = args[1].split("\\s+")[0];
if (sub.equals("info")) {
event.getChannel().sendMessage(new EmbedBuilder().setAuthor("Connection Watcher info", null, null).setDescription(MantaroData.connectionWatcher().get().toString()).setColor(event.getGuild().getSelfMember().getColor()).setFooter("Asked by: " + event.getAuthor().getName(), null).build()).queue();
} else if (sub.equals("eval")) {
String[] parts = event.getMessage().getRawContent().split(" ");
if (parts.length < 4) {
onHelp(event);
return;
}
Object[] returns;
boolean errored = false;
try {
returns = MantaroData.connectionWatcher().eval(String.join(" ", Arrays.copyOfRange(parts, 3, parts.length)));
} catch (RuntimeException e) {
errored = true;
returns = new Object[] { e.getMessage() };
}
String result = returns.length == 1 ? returns[0] == null ? null : String.valueOf(returns[0]) : Arrays.asList(returns).toString();
event.getChannel().sendMessage(new EmbedBuilder().setAuthor("Evaluated " + (errored ? "and errored" : "with success"), null, event.getAuthor().getAvatarUrl()).setColor(errored ? Color.RED : Color.GREEN).setDescription(result == null ? "Executed successfully with no objects returned" : ("Executed " + (errored ? "and errored: " : "successfully and returned: ") + result)).setFooter("Asked by: " + event.getAuthor().getName(), null).build()).queue();
} else {
onHelp(event);
}
return;
}
if (option.equals("premium")) {
String sub = args[1].substring(0, args[1].indexOf(' '));
if (sub.equals("add")) {
try {
String[] values = SPLIT_PATTERN.split(args[1], 3);
try {
Long.parseLong(values[1]);
} catch (Exception e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Not a valid user id").queue();
return;
}
DBUser db = MantaroData.db().getUser(values[1]);
db.incrementPremium(TimeUnit.DAYS.toMillis(Long.parseLong(values[2])));
db.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "The premium feature for user " + db.getId() + " now is until " + new Date(db.getPremiumUntil())).queue();
return;
} catch (IndexOutOfBoundsException e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify id and number of days").queue();
e.printStackTrace();
return;
}
}
if (sub.equals("guild")) {
try {
String[] values = SPLIT_PATTERN.split(args[1], 3);
DBGuild db = MantaroData.db().getGuild(values[1]);
db.incrementPremium(TimeUnit.DAYS.toMillis(Long.parseLong(values[2])));
db.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "The premium feature for guild " + db.getId() + " now is until " + new Date(db.getPremiumUntil())).queue();
return;
} catch (IndexOutOfBoundsException e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify id and number of days").queue();
e.printStackTrace();
return;
}
}
}
if (option.equals("shutdown") || option.equals("restart")) {
if (args.length == 2) {
try {
notifyMusic(args[1]).get();
} catch (InterruptedException | ExecutionException ignored) {
}
}
try {
prepareShutdown(event);
} catch (Exception e) {
log.warn(EmoteReference.ERROR + "Couldn't prepare shutdown." + e.toString(), e);
return;
}
if (option.equals("restart")) {
try {
MantaroData.connectionWatcher().reboot(false);
} catch (Exception e) {
log.error("Error restarting via manager, manual reboot required", e);
System.exit(-1);
}
} else {
System.exit(0);
}
return;
}
if (option.equals("forceshutdown") || option.equals("forcerestart")) {
if (args.length == 2) {
try {
notifyMusic(args[1]).get();
} catch (InterruptedException | ExecutionException ignored) {
}
}
try {
prepareShutdown(event);
} catch (Exception e) {
log.warn(EmoteReference.ERROR + "Couldn't prepare shutdown. I don't care, I'm gonna restart anyway." + e.toString(), e);
}
if (option.equals("forcerestart")) {
try {
MantaroData.connectionWatcher().reboot(false);
} catch (Exception e) {
log.error("Error restarting via manager, manual reboot required", e);
System.exit(-1);
}
} else {
System.exit(0);
}
return;
}
if (args.length < 2) {
onHelp(event);
return;
}
String value = args[1];
if (option.equals("notifymusic")) {
notifyMusic(value);
event.getChannel().sendMessage(EmoteReference.MEGA + "Guilds playing music were notified!").queue();
return;
}
String[] values = SPLIT_PATTERN.split(value, 2);
if (values.length < 2) {
onHelp(event);
return;
}
String k = values[0], v = values[1];
if (option.equals("scheduleshutdown") || option.equals("schedulerestart")) {
boolean restart = option.equals("schedulerestart");
if (k.equals("time")) {
double s = Double.parseDouble(v);
int millis = (int) (s * 1000);
Async.thread(millis, TimeUnit.MILLISECONDS, () -> {
try {
prepareShutdown(event);
} catch (Exception e) {
log.warn(EmoteReference.ERROR + "Couldn't prepare shutdown. I don't care, I'm gonna restart anyway." + e.toString(), e);
}
if (restart) {
try {
MantaroData.connectionWatcher().reboot(false);
} catch (Exception e) {
log.error("Error restarting via manager, manual reboot required", e);
System.exit(-1);
}
} else {
System.exit(0);
}
});
event.getChannel().sendMessage(EmoteReference.STOPWATCH + " Sleeping in " + s + " seconds...").queue();
return;
}
if (k.equals("connections")) {
int connections = Integer.parseInt(v);
IntSupplier currentConnections = () -> (int) event.getJDA().getVoiceChannels().stream().filter(voiceChannel -> voiceChannel.getMembers().contains(voiceChannel.getGuild().getSelfMember())).count();
Async.task("Watching Thread.", s -> {
if (currentConnections.getAsInt() > connections)
return;
try {
prepareShutdown(event);
} catch (Exception e) {
log.warn("Couldn't prepare shutdown. I don't care, I'm gonna do it anyway." + e.toString(), e);
}
if (restart) {
try {
MantaroData.connectionWatcher().reboot(false);
} catch (Exception e) {
log.error("Error restarting via manager, manual reboot required", e);
System.exit(-1);
}
} else {
System.exit(0);
}
s.shutdown();
}, 2, TimeUnit.SECONDS);
return;
}
onHelp(event);
return;
}
if (option.equals("varadd")) {
try {
String v1 = values[1];
switch(values[0]) {
case "pat":
ActionCmds.PATS.get().add(v1);
ActionCmds.PATS.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Added to pat list: " + v).queue();
break;
case "hug":
ActionCmds.HUGS.get().add(v1);
ActionCmds.HUGS.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Added to hug list: " + v).queue();
break;
case "greeting":
ActionCmds.GREETINGS.get().add(content.replace("varadd greeting ", ""));
ActionCmds.GREETINGS.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Added to greet list: " + content.replace("greeting ", "")).queue();
break;
case "splash":
MantaroShard.SPLASHES.get().add(content.replace("varadd splash ", ""));
MantaroShard.SPLASHES.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Added to splash list: " + content.replace("splash ", "")).queue();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return;
}
if (option.equals("eval")) {
Evaluator evaluator = evals.get(k);
if (evaluator == null) {
onHelp(event);
return;
}
Object result = evaluator.eval(event, v);
boolean errored = result instanceof Throwable;
event.getChannel().sendMessage(new EmbedBuilder().setAuthor("Evaluated " + (errored ? "and errored" : "with success"), null, event.getAuthor().getAvatarUrl()).setColor(errored ? Color.RED : Color.GREEN).setDescription(result == null ? "Executed successfully with no objects returned" : ("Executed " + (errored ? "and errored: " : "successfully and returned: ") + result.toString())).setFooter("Asked by: " + event.getAuthor().getName(), null).build()).queue();
return;
}
if (option.equals("query")) {
try {
String[] values1 = SPLIT_PATTERN.split(content);
String expression = content.replace(values1[0] + " ", "");
SQLDatabase.getInstance().run((conn) -> {
try {
ResultSet set;
try {
set = conn.prepareStatement(expression).executeQuery();
} catch (SQLException e) {
try {
conn.prepareStatement(expression).execute();
event.getChannel().sendMessage(" Query was successfully executed!").queue();
} catch (SQLException e1) {
event.getChannel().sendMessage("Failed to execute query! " + Utils.paste(getStackTrace(e1))).queue();
}
return;
}
List<String> header = new ArrayList<>();
List<List<String>> table = new ArrayList<>();
ResultSetMetaData metaData = set.getMetaData();
int columnsCount = metaData.getColumnCount();
for (int i = 0; i < columnsCount; i++) {
header.add(metaData.getColumnName(i + 1));
}
while (set.next()) {
List<String> row = new ArrayList<>();
for (int i = 0; i < columnsCount; i++) {
String s = String.valueOf(set.getString(i + 1)).trim();
row.add(s.substring(0, Math.min(30, s.length())));
}
table.add(row);
}
String output = makeAsciiTable(header, table, null);
event.getChannel().sendMessage(Utils.paste(output)).queue();
} catch (SQLException e) {
event.getChannel().sendMessage(" Failed to build ascii table! " + Utils.paste(getStackTrace(e))).queue();
}
}).queue();
} catch (SQLException e) {
event.getChannel().sendMessage(" Failed to run query! " + Utils.paste(getStackTrace(e))).queue();
}
return;
}
onHelp(event);
}
@Override
public String[] splitArgs(String content) {
return SPLIT_PATTERN.split(content, 2);
}
});
}
use of net.kodehawa.mantarobot.modules.commands.SimpleCommand in project MantaroBot by Mantaro.
the class CurrencyCmds method inventory.
@Command
public static void inventory(CommandRegistry cr) {
cr.register("inventory", new SimpleCommand(Category.CURRENCY) {
@Override
public void call(GuildMessageReceivedEvent event, String content, String[] args) {
Player user = MantaroData.db().getPlayer(event.getMember());
EmbedBuilder builder = baseEmbed(event, event.getMember().getEffectiveName() + "'s Inventory", event.getAuthor().getEffectiveAvatarUrl());
List<ItemStack> list = user.getInventory().asList();
if (list.isEmpty())
builder.setDescription("There is only dust.");
else
user.getInventory().asList().forEach(stack -> {
long buyValue = stack.getItem().isBuyable() ? (long) (stack.getItem().getValue() * 1.1) : 0;
long sellValue = stack.getItem().isSellable() ? (long) (stack.getItem().getValue() * 0.9) : 0;
builder.addField(stack.getItem().getEmoji() + " " + stack.getItem().getName() + " x " + stack.getAmount(), String.format("**Price**: 📥 %d 📤 %d\n%s", buyValue, sellValue, stack.getItem().getDesc()), false);
});
event.getChannel().sendMessage(builder.build()).queue();
}
@Override
public MessageEmbed help(GuildMessageReceivedEvent event) {
return helpEmbed(event, "Inventory command").setDescription("**Shows your current inventory.**").build();
}
});
}
Aggregations