MissingIdentifier/src/main/java/Modules/SecretChannel.java

233 lines
8.8 KiB
Java

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<Long, Long> userInChannel;
private Long hiddenChannel;
private int activeTime;
private boolean pingUser;
private Set<String> 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();
}
}