package Modules; import Controll.GuildController; import Controll.SuperModule; import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.events.GenericEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import java.util.*; import java.util.concurrent.TimeUnit; public class SecretChannel extends SuperModule { public static final String COMMAND = "SecretChannel"; private Map userInChannel; private Long hiddenChannel; private int activeTime; private boolean pingUser; private Set trigger; public SecretChannel(GuildController guildController, JSONObject config){ super(COMMAND, guildController, config); if (!config.containsKey("trigger")){ config.put("trigger", new JSONArray()); safeConfig(getConfig()); } if (!config.containsKey("hiddenChannel")){ config.put("hiddenChannel", "123"); safeConfig(getConfig()); } if (!config.containsKey("pingUser")){ config.put("pingUser", "false"); safeConfig(getConfig()); } if (!config.containsKey("activeTime")){ config.put("activeTime", "30"); safeConfig(getConfig()); } trigger = new HashSet<>(); for ( Object o : (JSONArray)config.get("trigger")){ trigger.add(o.toString()); } hiddenChannel = Long.parseLong(getConfig().get("hiddenChannel").toString()); activeTime = Integer.parseInt(getConfig().get("activeTime").toString()); pingUser = Boolean.parseBoolean(getConfig().get("pingUser").toString()); } @Override public String getCommand() { return COMMAND; } @Override public String getDescription() { return "Add user (Temporarily) to a hidden channel if the user mentions a trigger\n" + "`addTrigger WORD` add new Trigger\n" + "`removeTrigger WORD` remove existing Trigger\n" + "`setChannel #CHANNEL` set channel to be shown\n" + "`setTime NUMBER` set time channel is shown in seconds\n" + "`togglePing` set if user gets a ping"; } @Override public void execute(GenericEvent genericEvent) { if (genericEvent instanceof GuildMessageReceivedEvent){ GuildMessageReceivedEvent event = (GuildMessageReceivedEvent)genericEvent; if (checkForAdmin(event.getGuild().getMember(event.getAuthor()))) { if (checkForCommand(event.getMessage().getContentRaw(), "addTrigger")) { String newTrigger = event.getMessage().getContentRaw() .replaceAll("(?is:" + getGuildController().getPREFIX() + COMMAND + " addTrigger )", ""); if (trigger.size() == 0) { trigger.add(newTrigger); JSONArray arr = new JSONArray(); arr.add(newTrigger); getConfig().put("trigger", arr); } else { if (trigger.contains(newTrigger)) { event.getChannel().sendMessage("Error: Trigger already exists!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES)); return; } trigger.add(newTrigger); JSONArray arr = ((JSONArray) getConfig().get("trigger")); arr.add(newTrigger); getConfig().remove("trigger"); getConfig().put("trigger", arr); } safeConfig(); event.getChannel().sendMessage("Added trigger `" + newTrigger + "`").queue(); } else if (checkForCommand(event.getMessage().getContentRaw(), "removeTrigger")) { String delTrigger = event.getMessage().getContentRaw() .replaceAll("(?is:" + getGuildController().getPREFIX() + COMMAND + " removeTrigger )", ""); if (!trigger.contains(delTrigger)) { event.getChannel().sendMessage("Error: Trigger does not exists!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES)); return; } trigger.remove(delTrigger); ((JSONArray) getConfig().remove("trigger")).add(delTrigger); safeConfig(); event.getChannel().sendMessage("Removed trigger `" + delTrigger + "`").queue(); } else if (checkForCommand(event.getMessage().getContentRaw(), "setChannel")) { if (event.getMessage().getMentionedChannels().size() != 1) { event.getChannel().sendMessage("Error: Please mention a Textchannel!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES)); return; } hiddenChannel = event.getMessage().getMentionedChannels().get(0).getIdLong(); getConfig().remove("hiddenChannel"); getConfig().put("hiddenChannel", hiddenChannel); safeConfig(); event.getChannel().sendMessage("Set Hiddenchannel to: `" + hiddenChannel + "` (" + event.getMessage().getMentionedChannels().get(0).getAsMention() + ")").queue(); } else if (checkForCommand(event.getMessage().getContentRaw(), "setTime")) { if (!event.getMessage().getContentRaw().matches("(?is:" + getGuildController().getPREFIX() + COMMAND + " setTime " + "[0-9]+)")) { event.getChannel().sendMessage("Error: PLease enter a valid number!").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES)); return; } int newTime = Integer.parseInt(event.getMessage().getContentRaw() .replaceAll("(?is:" + getGuildController().getPREFIX() + COMMAND + " setTime " + ")", "")); activeTime = newTime; getConfig().remove("activeTime"); getConfig().put("activeTime", newTime); safeConfig(); event.getChannel().sendMessage("Set activeTime to: " + newTime).queue(); } else if (checkForCommand(event.getMessage().getContentRaw(), "togglePing")) { pingUser = !pingUser; getConfig().remove("pingUser"); getConfig().put("pingUser", pingUser); safeConfig(); event.getChannel().sendMessage("Toggled pingUser to: " + pingUser).queue(); } } if (trigger.size() > 0) { StringBuilder sb = new StringBuilder(); for (String s : trigger) sb.append("|").append(s); sb.replace(0, 1, ""); if (event.getMessage().getContentRaw().matches("(?is:.*(" + sb.toString() + ").*)")) { event.getGuild().getTextChannelById(hiddenChannel).upsertPermissionOverride(event.getMember()).complete() .getManager().setAllow( Permission.MESSAGE_READ, Permission.VIEW_CHANNEL ).queue(); if (pingUser) { event.getGuild().getTextChannelById(hiddenChannel) .sendMessage(event.getAuthor().getAsMention()).queue( m -> m.delete().queueAfter(activeTime > 0 ? activeTime : 60, TimeUnit.SECONDS)); } if (activeTime > 0) { new Timer().schedule(new TimerTask() { @Override public void run() { event.getGuild().getTextChannelById(hiddenChannel).getPermissionOverride(event.getMember()).delete().queue(); } }, TimeUnit.MILLISECONDS.convert(activeTime, TimeUnit.SECONDS)); } } } } } @Override public String showSettings() { StringBuilder sb = new StringBuilder(); for (String s : trigger) sb.append("|").append("`").append(s).append("`"); sb.replace(0,1, ""); return "hidden channel: `" + hiddenChannel + "` (" + getGuildController().getJda().getGuildById(getGuildController().getGUILD_ID()).getTextChannelById(hiddenChannel).getAsMention() + ")\n" + "activeTime: `" + activeTime + "`\n" + "ping User: `" + pingUser + "` \n" + "Trigger: " + sb.toString(); } }