use of net.dv8tion.jda.core.entities.TextChannel in project MantaroBot by Mantaro.
the class GuildOptions method onRegistry.
@Subscribe
public void onRegistry(OptionRegistryEvent e) {
// region opts birthday
registerOption("birthday:enable", "Birthday Monitoring enable", "Enables birthday monitoring. You need the channel **name** and the role name (it assigns that role on birthday)\n" + "**Example:** `~>opts birthday enable general Birthday`, `~>opts birthday enable general \"Happy Birthday\"`", "Enables birthday monitoring.", (event, args) -> {
if (args.length < 2) {
OptsCmd.onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
try {
String channel = args[0];
String role = args[1];
TextChannel channelObj = Utils.findChannel(event, channel);
if (channelObj == null)
return;
String channelId = channelObj.getId();
Role roleObj = event.getGuild().getRolesByName(role.replace(channelId, ""), true).get(0);
if (roleObj.isPublicRole()) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You cannot set the everyone role as a birthday role! " + "Remember that the birthday role is a role that gets assigned to the person when the birthday comes, and then removes when the day passes away.").queue();
return;
}
if (guildData.getGuildAutoRole() != null && roleObj.getId().equals(guildData.getGuildAutoRole())) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You cannot set the autorole role as a birthday role! " + "Remember that the birthday role is a role that gets assigned to the person when the birthday comes, and then removes when the day passes away.").queue();
return;
}
event.getChannel().sendMessage(EmoteReference.WARNING + "Remember that the birthday role is a role that gets assigned to the person when the birthday comes, and then removes when the day passes away.\n" + "The role *has to be a newly created role or a role you don't use for anyone else*. It MUST NOT be a role you already have on your users.\n" + "This is because of how the birthday assigner works: It assigns a temporary role to the person having its birthday, and unassigns it when the birthday day has passed. " + "**This means that everyone with the birthday role will get the role removed the day the birthday passes through**. Please take caution when choosing what role to use, as a misconfiguration might make bad things happen (really)!\n" + "If you have any doubts on how to configure it, you can always join our support guild and ask. You can also check `~>opts help birthday enable` for an example.\n\n" + "Type **yes** if you agree to set the role " + roleObj.getName() + " as a birthday role, and **no** to cancel. This timeouts in 45 seconds.").queue();
InteractiveOperations.createOverriding(event.getChannel(), 45, interactiveEvent -> {
String content = interactiveEvent.getMessage().getContentRaw();
if (content.equalsIgnoreCase("yes")) {
String roleId = roleObj.getId();
guildData.setBirthdayChannel(channelId);
guildData.setBirthdayRole(roleId);
dbGuild.saveAsync();
event.getChannel().sendMessage(String.format(EmoteReference.MEGA + "Birthday logging enabled on this server with parameters -> Channel: `%s (%s)` and role: `%s (%s)`", channelObj.getAsMention(), channelId, role, roleId)).queue();
return Operation.COMPLETED;
} else if (content.equalsIgnoreCase("no")) {
interactiveEvent.getChannel().sendMessage(EmoteReference.CORRECT + "Cancelled request.").queue();
return Operation.COMPLETED;
}
return Operation.IGNORED;
});
} catch (Exception ex) {
if (ex instanceof IndexOutOfBoundsException) {
event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a channel or role!\n " + "**Remember, you don't have to mention neither the role or the channel, rather just type its " + "name, order is <channel> <role>, without the leading \"<>\".**").queue();
return;
}
event.getChannel().sendMessage(EmoteReference.ERROR + "You supplied invalid arguments for this command " + EmoteReference.SAD).queue();
OptsCmd.onHelp(event);
}
});
registerOption("birthday:disable", "Birthday disable", "Disables birthday monitoring.", (event) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setBirthdayChannel(null);
guildData.setBirthdayRole(null);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.MEGA + "Birthday logging has been disabled on this server").queue();
});
// endregion
// region prefix
// region set
registerOption("prefix:set", "Prefix set", "Sets the server prefix.\n" + "**Example:** `~>opts prefix set .`", "Sets the server prefix.", (event, args) -> {
if (args.length < 1) {
onHelp(event);
return;
}
String prefix = args[0];
if (prefix.length() > 200) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Don't you think that's a bit too long?").queue();
return;
}
if (prefix.isEmpty()) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Cannot set the guild prefix to nothing...").queue();
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setGuildCustomPrefix(prefix);
dbGuild.save();
event.getChannel().sendMessage(EmoteReference.MEGA + "Your server's custom prefix has been set to " + prefix).queue();
});
// endregion
// region clear
registerOption("prefix:clear", "Prefix clear", "Clear the server prefix.\n" + "**Example:** `~>opts prefix clear`", "Resets the server prefix.", (event) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setGuildCustomPrefix(null);
dbGuild.save();
event.getChannel().sendMessage(EmoteReference.MEGA + "Your server's custom prefix has been disabled").queue();
});
// endregion
// endregion
// region autorole
// region set
registerOption("autorole:set", "Autorole set", "Sets the server autorole. This means every user who joins will get this role. **You need to use the role name, if it contains spaces" + " you need to wrap it in quotation marks**\n" + "**Example:** `~>opts autorole set Member`, `~>opts autorole set \"Magic Role\"`", "Sets the server autorole.", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String name = args[0];
List<Role> roles = event.getGuild().getRolesByName(name, true);
if (roles.isEmpty()) {
event.getChannel().sendMessage(EmoteReference.ERROR + "I couldn't find a role with that name").queue();
return;
}
if (roles.size() <= 1) {
if (!event.getMember().canInteract(roles.get(0))) {
event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as autorole!").queue();
return;
}
guildData.setGuildAutoRole(roles.get(0).getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "The server autorole is now set to: **" + roles.get(0).getName() + "** (Position: " + roles.get(0).getPosition() + ")").queue();
return;
}
event.getChannel().sendMessage(new EmbedBuilder().setTitle("Selection", null).setDescription("").build()).queue();
DiscordUtils.selectList(event, roles, role -> String.format("%s (ID: %s) | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> ((SimpleCommand) optsCmd).baseEmbed(event, "Select the Role:").setDescription(s).build(), role -> {
if (!event.getMember().canInteract(role)) {
event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as autorole!").queue();
return;
}
guildData.setGuildAutoRole(role.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.OK + "The server autorole is now set to role: **" + role.getName() + "** (Position: " + role.getPosition() + ")").queue();
});
});
// endregion
// region unbind
registerOption("autorole:unbind", "Autorole clear", "Clear the server autorole.\n" + "**Example:** `~>opts autorole unbind`", "Resets the servers autorole.", (event) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setGuildAutoRole(null);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.OK + "The autorole for this server has been removed.").queue();
});
// endregion
// endregion
// region usermessage
// region resetchannel
registerOption("usermessage:resetchannel", "Reset message channel", "Clears the join/leave message channel.\n" + "**Example:** `~>opts usermessage resetchannel`", "Clears the join/leave message channel.", (event) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setLogJoinLeaveChannel(null);
guildData.setLogLeaveChannel(null);
guildData.setLogJoinChannel(null);
dbGuild.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Sucessfully reset the join/leave channel.").queue();
});
// endregion
// region resetdata
registerOption("usermessage:resetdata", "Reset join/leave message data", "Resets the join/leave message data.\n" + "**Example:** `~>opts usermessage resetdata`", "Resets the join/leave message data.", (event) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setLeaveMessage(null);
guildData.setJoinMessage(null);
dbGuild.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Sucessfully reset the join/leave message.").queue();
});
// endregion
// region channel
registerOption("usermessage:join:channel", "Sets the join message channel", "Sets the join channel, you need the channel **name**\n" + "**Example:** `~>opts usermessage join channel join-magic`\n" + "You can reset it by doing `~>opts usermessage join resetchannel`", "Sets the join message channel", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String channelName = args[0];
Consumer<TextChannel> consumer = tc -> {
guildData.setLogJoinChannel(tc.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.OK + "The user join log channel is now set to: " + tc.getAsMention()).queue();
};
TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
if (channel != null) {
consumer.accept(channel);
}
});
registerOption("usermessage:join:resetchannel", "Resets the join message channel", "Resets the join message channel", event -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setLogJoinChannel(null);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Successfully reset log join channel!").queue();
});
registerOption("usermessage:leave:channel", "Sets the leave message channel", "Sets the leave channel, you need the channel **name**\n" + "**Example:** `~>opts usermessage leave channel leave-magic`\n" + "You can reset it by doing `~>opts usermessage leave resetchannel`", "Sets the leave message channel", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String channelName = args[0];
Consumer<TextChannel> consumer = tc -> {
guildData.setLogLeaveChannel(tc.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "The user leave log channel is now set to: " + tc.getAsMention()).queue();
};
TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
if (channel != null) {
consumer.accept(channel);
}
});
registerOption("usermessage:leave:resetchannel", "Resets the leave message channel", "Resets the leave message channel", event -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setLogLeaveChannel(null);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Successfully reset log leave channel!").queue();
});
registerOption("usermessage:channel", "Set message channel", "Sets the join/leave message channel. You need the channel **name**\n" + "**Example:** `~>opts usermessage channel join-magic`\n" + "Warning: if you set this, you cannot set individual join/leave channels unless you reset the channel.", "Sets the join/leave message channel.", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String channelName = args[0];
Consumer<TextChannel> consumer = textChannel -> {
guildData.setLogJoinLeaveChannel(textChannel.getId());
dbGuild.save();
event.getChannel().sendMessage(EmoteReference.OK + "The logging Join/Leave channel is set to: " + textChannel.getAsMention()).queue();
};
TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
if (channel != null) {
consumer.accept(channel);
}
});
// endregion
// region joinmessage
registerOption("usermessage:joinmessage", "User join message", "Sets the join message.\n" + "**Example:** `~>opts usermessage joinmessage Welcome $(event.user.name) to the $(event.guild.name) server! Hope you have a great time`", "Sets the join message.", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String joinMessage = String.join(" ", args);
guildData.setJoinMessage(joinMessage);
dbGuild.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Server join message set to: " + joinMessage).queue();
});
// endregion
// region leavemessage
registerOption("usermessage:leavemessage", "User leave message", "Sets the leave message.\n" + "**Example:** `~>opts usermessage leavemessage Sad to see you depart, $(event.user.name)`", "Sets the leave message.", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String leaveMessage = String.join(" ", args);
guildData.setLeaveMessage(leaveMessage);
dbGuild.save();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Server leave message set to: " + leaveMessage).queue();
});
// endregion
// endregion
// region autoroles
// region add
registerOption("autoroles:add", "Autoroles add", "Adds a role to the `~>iam` list.\n" + "You need the name of the iam and the name of the role. If the role contains spaces wrap it in quotation marks.\n" + "**Example:** `~>opts autoroles add member Member`, `~>opts autoroles add wew \"A role with spaces on its name\"`", "Adds an auto-assignable role to the iam lists.", (event, args) -> {
if (args.length < 2) {
onHelp(event);
return;
}
String roleName = args[1];
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
List<Role> roleList = event.getGuild().getRolesByName(roleName, true);
if (roleList.size() == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a role with that name!").queue();
} else if (roleList.size() == 1) {
Role role = roleList.get(0);
if (!event.getMember().canInteract(role)) {
event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as an auto-assignable role!").queue();
return;
}
guildData.getAutoroles().put(args[0], role.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.OK + "Added autorole **" + args[0] + "**, which gives the role " + "**" + role.getName() + "**").queue();
} else {
DiscordUtils.selectList(event, roleList, role -> String.format("%s (ID: %s) | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> ((SimpleCommand) optsCmd).baseEmbed(event, "Select the Role:").setDescription(s).build(), role -> {
if (!event.getMember().canInteract(role)) {
event.getChannel().sendMessage(EmoteReference.ERROR + "This role is placed higher than your highest role, therefore you cannot put it as an auto-assignable role!").queue();
return;
}
guildData.getAutoroles().put(args[0], role.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.OK + "Added autorole **" + args[0] + "**, which gives the " + "role " + "**" + role.getName() + "**").queue();
});
}
});
// region remove
registerOption("autoroles:remove", "Autoroles remove", "Removes a role from the `~>iam` list.\n" + "You need the name of the iam.\n" + "**Example:** `~>opts autoroles remove iamname`", "Removes an auto-assignable role from iam.", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
HashMap<String, String> autoroles = guildData.getAutoroles();
if (autoroles.containsKey(args[0])) {
autoroles.remove(args[0]);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.OK + "Removed autorole " + args[0]).queue();
} else {
event.getChannel().sendMessage(EmoteReference.ERROR + "I couldn't find an autorole with that name").queue();
}
});
// endregion
// region clear
registerOption("autoroles:clear", "Autoroles clear", "Removes all autoroles.", "Removes all autoroles.", (event, args) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
dbGuild.getData().getAutoroles().clear();
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Cleared all autoroles!").queue();
});
// endregion
// region custom
registerOption("admincustom", "Admin custom commands", "Locks custom commands to admin-only.\n" + "Example: `~>opts admincustom true`", "Locks custom commands to admin-only.", (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) ? "Custom command creation " + "is now admin only." : "Custom command creation can now 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();
}
});
// endregion
registerOption("timedisplay:set", "Time display set", "Toggles between 12h and 24h time display.\n" + "Example: `~>opts timedisplay 24h`", "Toggles between 12h and 24h time display.", (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;
}
});
registerOption("server:role:disallow", "Role disallow", "Disallows all users with a role from executing commands.\n" + "You need to provide the name of the role to disallow from mantaro.\n" + "Example: `~>opts server role disallow bad`, `~>opts server role disallow \"No commands\"`", "Disallows all users with a role from executing commands.", (event, args) -> {
if (args.length == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify the name of the role!").queue();
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String roleName = String.join(" ", args);
List<Role> roleList = event.getGuild().getRolesByName(roleName, true);
if (roleList.size() == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a role with that name!").queue();
} else if (roleList.size() == 1) {
Role role = roleList.get(0);
guildData.getDisabledRoles().add(role.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Disabled role " + role.getName() + " from executing commands.").queue();
} else {
DiscordUtils.selectList(event, roleList, role -> String.format("%s (ID: %s) | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> OptsCmd.getOpts().baseEmbed(event, "Select the Mute Role:").setDescription(s).build(), role -> {
guildData.getDisabledRoles().add(role.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Disabled role " + role.getName() + " from executing commands.").queue();
});
}
});
registerOption("server:role:allow", "Role allow", "Allows all users with a role from executing commands.\n" + "You need to provide the name of the role to allow from mantaro. Has to be already disabled.\n" + "Example: `~>opts server role allow bad`, `~>opts server role allow \"No commands\"`", "Allows all users with a role from executing commands (Has to be already disabled)", (event, args) -> {
if (args.length == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify the name of the role!").queue();
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String roleName = String.join(" ", args);
List<Role> roleList = event.getGuild().getRolesByName(roleName, true);
if (roleList.size() == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "I didn't find a role with that name!").queue();
} else if (roleList.size() == 1) {
Role role = roleList.get(0);
if (!guildData.getDisabledRoles().contains(role.getId())) {
event.getChannel().sendMessage(EmoteReference.ERROR + "This role isn't disabled!").queue();
return;
}
guildData.getDisabledRoles().remove(role.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Allowed role " + role.getName() + " to execute commands.").queue();
} else {
DiscordUtils.selectList(event, roleList, role -> String.format("%s (ID: %s) | Position: %s", role.getName(), role.getId(), role.getPosition()), s -> OptsCmd.getOpts().baseEmbed(event, "Select the Mute Role:").setDescription(s).build(), role -> {
if (!guildData.getDisabledRoles().contains(role.getId())) {
event.getChannel().sendMessage(EmoteReference.ERROR + "This role isn't disabled!").queue();
return;
}
guildData.getDisabledRoles().remove(role.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Allowed role " + role.getName() + " to execute commands.").queue();
});
}
});
registerOption("server:ignorebots:autoroles:toggle", "Bot autorole ignore", "Toggles between ignoring bots on autorole assign and not.", (event) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
boolean ignore = guildData.isIgnoreBotsAutoRole();
guildData.setIgnoreBotsAutoRole(!ignore);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Set bot autorole ignore to: **" + guildData.isIgnoreBotsAutoRole() + "**").queue();
});
registerOption("server:ignorebots:joinleave:toggle", "Bot join/leave ignore", "Toggles between ignoring bots on join/leave message.", (event) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
boolean ignore = guildData.isIgnoreBotsWelcomeMessage();
guildData.setIgnoreBotsWelcomeMessage(!ignore);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Set bot autorole ignore to: **" + guildData.isIgnoreBotsWelcomeMessage() + "**").queue();
});
registerOption("levelupmessages:toggle", "Level-up toggle", "Toggles level up messages, remember that after this you have to set thee channel and the message!", "Toggles level up messages", event -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
boolean ignore = guildData.isEnabledLevelUpMessages();
guildData.setEnabledLevelUpMessages(!ignore);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Set level up messages to: **" + guildData.isEnabledLevelUpMessages() + "**").queue();
});
registerOption("levelupmessages:message:set", "Level-up message", "Sets the message to display on level up", "Sets the level up message", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String levelUpMessage = String.join(" ", args);
guildData.setLevelUpMessage(levelUpMessage);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Server level-up message set to: " + levelUpMessage).queue();
});
registerOption("levelupmessages:message:clear", "Level-up message clear", "Clears the message to display on level up", "Clears the message to display on level up", (event, args) -> {
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
guildData.setLevelUpMessage(null);
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Cleared level-up message!").queue();
});
registerOption("levelupmessages:channel:set", "Level-up message channel", "Sets the channel to display level up messages", "Sets the channel to display level up messages", (event, args) -> {
if (args.length == 0) {
onHelp(event);
return;
}
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
String channelName = args[0];
Consumer<TextChannel> consumer = textChannel -> {
guildData.setLevelUpChannel(textChannel.getId());
dbGuild.saveAsync();
event.getChannel().sendMessage(EmoteReference.OK + "The level-up channel has been set to: " + textChannel.getAsMention()).queue();
};
TextChannel channel = Utils.findChannelSelect(event, channelName, consumer);
if (channel != null) {
consumer.accept(channel);
}
});
}
use of net.dv8tion.jda.core.entities.TextChannel in project MantaroBot by Mantaro.
the class TrackScheduler method announce.
private void announce() {
try {
DBGuild dbGuild = MantaroData.db().getGuild(guildId);
GuildData guildData = dbGuild.getData();
if (guildData.isMusicAnnounce()) {
AudioTrackContext atc = getCurrentTrack();
if (atc == null)
return;
TextChannel req = atc.getRequestedChannel();
if (req == null)
return;
VoiceChannel vc = req.getGuild().getSelfMember().getVoiceState().getChannel();
AudioTrackInfo trackInfo = getCurrentTrack().getInfo();
String title = trackInfo.title;
long trackLength = trackInfo.length;
if (req.canTalk()) {
getCurrentTrack().getRequestedChannel().sendMessage(String.format("📣 Now playing in **%s**: %s (%s)%s", vc.getName(), title, AudioUtils.getLength(trackLength), getCurrentTrack().getDJ() != null ? " requested by **" + getCurrentTrack().getDJ().getName() + "**" : "")).queue(message -> message.delete().queueAfter(90, TimeUnit.SECONDS));
}
}
} catch (Exception ignored) {
}
}
use of net.dv8tion.jda.core.entities.TextChannel in project MantaroBot by Mantaro.
the class VoiceLeave method run.
@Override
public void run() {
MantaroBot.getInstance().getAudioManager().getMusicManagers().forEach((guildId, manager) -> {
try {
Guild guild = MantaroBot.getInstance().getGuildById(guildId);
if (guild == null)
return;
GuildVoiceState voiceState = guild.getSelfMember().getVoiceState();
if (voiceState == null)
return;
if (voiceState.inVoiceChannel()) {
TextChannel channel = guild.getPublicChannel();
if (channel != null) {
if (channel.canTalk()) {
VoiceChannel voiceChannel = voiceState.getChannel();
AudioPlayer player = manager.getAudioPlayer();
GuildMusicManager mm = MantaroBot.getInstance().getAudioManager().getMusicManager(guild);
if (player == null || mm == null || voiceChannel == null)
return;
if (mm.getTrackScheduler().getCurrentTrack().getRequestedChannel() != null) {
channel = mm.getTrackScheduler().getCurrentTrack().getRequestedChannel();
}
if (voiceState.isGuildMuted()) {
channel.sendMessage(EmoteReference.SAD + "Pausing player because I got muted :(").queue();
player.setPaused(true);
}
if (voiceChannel.getMembers().size() == 1) {
channel.sendMessage(EmoteReference.THINKING + "I decided to leave **" + voiceChannel.getName() + "** " + "because I was left all " + "alone :<").queue();
if (mm.getTrackScheduler().getAudioPlayer().getPlayingTrack() != null) {
mm.getTrackScheduler().getAudioPlayer().getPlayingTrack().stop();
mm.getTrackScheduler().getQueue().clear();
mm.getTrackScheduler().next(true);
} else {
guild.getAudioManager().closeAudioConnection();
}
}
}
}
}
} catch (Exception ignored) {
}
});
}
use of net.dv8tion.jda.core.entities.TextChannel in project FredBoat by Frederikam.
the class MusicPersistenceHandler method persist.
private void persist(int code) {
File dir = new File("music_persistence");
if (!dir.exists()) {
boolean created = dir.mkdir();
if (!created) {
log.error("Failed to create music persistence directory");
return;
}
}
Map<Long, GuildPlayer> reg = playerRegistry.getRegistry();
boolean isUpdate = code == ExitCodes.EXIT_CODE_UPDATE;
boolean isRestart = code == ExitCodes.EXIT_CODE_RESTART;
for (long gId : reg.keySet()) {
try {
GuildPlayer player = reg.get(gId);
String msg;
if (isUpdate) {
msg = I18n.get(player.getGuild()).getString("shutdownUpdating");
} else if (isRestart) {
msg = I18n.get(player.getGuild()).getString("shutdownRestarting");
} else {
msg = I18n.get(player.getGuild()).getString("shutdownIndef");
}
TextChannel activeTextChannel = player.getActiveTextChannel();
List<CompletableFuture> announcements = new ArrayList<>();
if (activeTextChannel != null && player.isPlaying()) {
announcements.add(CentralMessaging.message(activeTextChannel, msg).send(null));
}
for (Future announcement : announcements) {
try {
// 30 seconds is enough on patron boat
announcement.get(30, TimeUnit.SECONDS);
} catch (Exception ignored) {
}
}
JSONObject data = new JSONObject();
VoiceChannel vc = player.getCurrentVoiceChannel();
data.put("vc", vc != null ? vc.getId() : "0");
data.put("tc", activeTextChannel != null ? activeTextChannel.getId() : "");
data.put("isPaused", player.isPaused());
data.put("volume", Float.toString(player.getVolume()));
data.put("repeatMode", player.getRepeatMode());
data.put("shuffle", player.isShuffle());
if (player.getPlayingTrack() != null) {
data.put("position", player.getPosition());
}
ArrayList<JSONObject> identifiers = new ArrayList<>();
for (AudioTrackContext atc : player.getRemainingTracks()) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
audioPlayerManager.encodeTrack(new MessageOutput(baos), atc.getTrack());
JSONObject ident = new JSONObject().put("message", Base64.encodeBase64String(baos.toByteArray())).put("user", atc.getUserId());
if (atc instanceof SplitAudioTrackContext) {
JSONObject split = new JSONObject();
SplitAudioTrackContext c = (SplitAudioTrackContext) atc;
split.put("title", c.getEffectiveTitle()).put("startPos", c.getStartPosition()).put("endPos", c.getStartPosition() + c.getEffectiveDuration());
ident.put("split", split);
}
identifiers.add(ident);
}
data.put("sources", identifiers);
try {
FileUtils.writeStringToFile(new File(dir, Long.toString(gId)), data.toString(), Charset.forName("UTF-8"));
} catch (IOException ex) {
if (activeTextChannel != null) {
CentralMessaging.message(activeTextChannel, MessageFormat.format(I18n.get(player.getGuild()).getString("shutdownPersistenceFail"), ex.getMessage())).send(null);
}
}
} catch (Exception ex) {
log.error("Error when saving persistence file", ex);
}
}
}
use of net.dv8tion.jda.core.entities.TextChannel in project FredBoat by Frederikam.
the class ClearCommand method onInvoke.
// TODO: Redo this
// TODO: i18n this class
@Override
public void onInvoke(@Nonnull CommandContext context) {
JDA jda = context.guild.getJDA();
TextChannel channel = context.channel;
Member invoker = context.invoker;
if (!invoker.hasPermission(channel, Permission.MESSAGE_MANAGE) && !PermsUtil.checkPerms(PermissionLevel.BOT_ADMIN, invoker)) {
context.replyWithName("You must have Manage Messages to do that!");
return;
}
if (!context.guild.getSelfMember().hasPermission(channel, Permission.MESSAGE_HISTORY)) {
context.reply(context.i18n("permissionMissingBot") + " **" + Permission.MESSAGE_HISTORY.getName() + "**");
return;
}
MessageHistory history = new MessageHistory(channel);
history.retrievePast(50).queue(msgs -> {
Metrics.successfulRestActions.labels("retrieveMessageHistory").inc();
ArrayList<Message> toDelete = new ArrayList<>();
for (Message msg : msgs) {
if (msg.getAuthor().equals(jda.getSelfUser()) && youngerThanTwoWeeks(msg)) {
toDelete.add(msg);
}
}
if (toDelete.isEmpty()) {
context.reply("No messages found.");
} else if (toDelete.size() == 1) {
context.reply("Found one message, deleting.");
CentralMessaging.deleteMessage(toDelete.get(0));
} else {
if (!context.hasPermissions(Permission.MESSAGE_MANAGE)) {
context.reply("I must have the `Manage Messages` permission to delete my own messages in bulk.");
return;
}
context.reply("Deleting **" + toDelete.size() + "** messages.");
CentralMessaging.deleteMessages(channel, toDelete);
}
}, CentralMessaging.getJdaRestActionFailureHandler(String.format("Failed to retrieve message history in channel %s in guild %s", channel.getId(), context.guild.getId())));
}
Aggregations