233 lines
8.8 KiB
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();
|
|
}
|
|
}
|