use of net.kodehawa.mantarobot.data.entities.DBGuild 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.data.entities.DBGuild in project MantaroBot by Mantaro.
the class MiscCmds method onPostLoad.
@Command
public static void onPostLoad(PostLoadEvent e) {
OptsCmd.registerOption("timedisplay:set", (event, args) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
if (args.length == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify a mode (12h or 24h)").queue();
return;
}
String mode = args[0];
switch(mode) {
case "12h":
event.getChannel().sendMessage(EmoteReference.CORRECT + "Set time display mode to 12h").queue();
guildData.setTimeDisplay(1);
dbGuild.save();
break;
case "24h":
event.getChannel().sendMessage(EmoteReference.CORRECT + "Set time display mode to 24h").queue();
guildData.setTimeDisplay(0);
dbGuild.save();
break;
default:
event.getChannel().sendMessage(EmoteReference.ERROR + "Not a valid choice. Valid choices: **24h**, **12h**").queue();
break;
}
});
}
use of net.kodehawa.mantarobot.data.entities.DBGuild 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.data.entities.DBGuild in project MantaroBot by Mantaro.
the class ActionCmds method onPostLoad.
@Command
public static void onPostLoad(PostLoadEvent e) {
OptsCmd.registerOption("actionmention:toggle", event -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
boolean toggler = guildData.isNoMentionsAction();
guildData.setNoMentionsAction(!toggler);
event.getChannel().sendMessage(EmoteReference.CORRECT + "Set no action mentions in chat to " + "**" + !toggler + "**").queue();
dbGuild.save();
});
}
use of net.kodehawa.mantarobot.data.entities.DBGuild in project MantaroBot by Mantaro.
the class CustomCmds method onPostLoad.
@Command
public static void onPostLoad(PostLoadEvent e) {
db().getCustomCommands().forEach(custom -> {
if (!NAME_PATTERN.matcher(custom.getName()).matches()) {
String newName = INVALID_CHARACTERS_PATTERN.matcher(custom.getName()).replaceAll("_");
log.warn("Custom Command with Invalid Characters '%s' found. Replacing with '%'", custom.getName());
custom.deleteAsync();
custom = CustomCommand.of(custom.getGuildId(), newName, custom.getValues());
custom.saveAsync();
}
if (CommandProcessor.REGISTRY.commands().containsKey(custom.getName()) && !CommandProcessor.REGISTRY.commands().get(custom.getName()).equals(customCommand)) {
custom.deleteAsync();
custom = CustomCommand.of(custom.getGuildId(), "_" + custom.getName(), custom.getValues());
custom.saveAsync();
}
CommandProcessor.REGISTRY.commands().put(custom.getName(), customCommand);
customCommands.put(custom.getId(), custom.getValues());
});
OptsCmd.registerOption("admincustom", (event, args) -> {
if (args.length == 0) {
OptsCmd.onHelp(event);
return;
}
String action = args[0];
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
try {
guildData.setCustomAdminLock(Boolean.parseBoolean(action));
dbGuild.save();
String toSend = EmoteReference.CORRECT + (Boolean.parseBoolean(action) ? "``Permission -> User command creation " + "is now admin only.``" : "``Permission -> User command creation can be done by anyone.``");
event.getChannel().sendMessage(toSend).queue();
} catch (Exception ex) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Silly, that's not a boolean value!").queue();
}
});
}
Aggregations