MissingIdentifier/src/main/java/Modules/OnlineHighlight.java

187 lines
7.3 KiB
Java

package Modules;
import Controll.GuildController;
import Controll.SuperModule;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.events.GenericEvent;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.events.user.UserActivityEndEvent;
import net.dv8tion.jda.api.events.user.UserActivityStartEvent;
import net.dv8tion.jda.api.events.user.update.UserUpdateActivityOrderEvent;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class OnlineHighlight extends SuperModule {
public static final String command = "OnlineHighlight";
private Set<String> watchGame;
private String watchRole;
public OnlineHighlight(GuildController guildController, JSONObject config){
super(command, guildController, config);
//long welcomeChannel, String welcomeMessage
if (!getConfig().containsKey("watchGame")){
getConfig().put("watchGame", new JSONArray());
safeConfig(getConfig());
}
if (!getConfig().containsKey("watchRole")){
getConfig().put("watchRole", "");
safeConfig(getConfig());
}
//get welcome message
this.watchGame = new HashSet<>();
for (Object o: (JSONArray)config.get("watchGame")){
this.watchGame.add((String)o);
}
this.watchRole = config.get("watchRole").toString();
}
@Override
public String getCommand() {
return command;
}
@Override
public String getDescription() {
return "Gives users who play a certain game a certain role\n" +
"`" + command + " addGame NAME` - to set game to look for\n" +
"`" + command + " setRole @ROLE` - to set role which users playing teh game will get";
}
@Override
public void execute(GenericEvent event) {
if(event instanceof GuildMessageReceivedEvent){
GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent) event;
if (checkForAdmin(thisEvent.getGuild().getMember(thisEvent.getAuthor())))
return;
if(checkForCommand(thisEvent.getMessage().getContentRaw(), "showGames")){
Set<String> act = new HashSet<>();
for (Member member : thisEvent.getGuild().getMembers()){
act.add(member.getActivities().get(0).getName());
}
StringBuilder sb = new StringBuilder();
sb.append("Currently played games are:\n");
for (String s : act)
sb.append("`").append(s).append("`, ");
thisEvent.getChannel().sendMessage(sb.toString()).queue();
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "addGame")){
JSONArray oldConf = (JSONArray) getConfig().remove("watchGame");
String newGame = thisEvent.getMessage().getContentRaw()
.replaceAll("(?is:" + getGuildController().getPREFIX() + command + " addGame )","").toLowerCase();
if (watchGame.contains(newGame)){
thisEvent.getChannel().sendMessage("ERROR: Game already on the list! use `delGame` to remove it.").queue();
return;
}
oldConf.add(newGame);
getConfig().put("watchGame", oldConf);
safeConfig();
watchGame.add(newGame);
StringBuilder sb = new StringBuilder();
sb.append("Watched Games are: ");
for (String s : watchGame)
sb.append("`").append(s).append("`, ");
sb.replace(sb.length()-2,sb.length(), "");
thisEvent.getChannel().sendMessage(sb.toString()).queue();
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "delGame")){
JSONArray oldConf = (JSONArray) getConfig().remove("watchGame");
String delGame = thisEvent.getMessage().getContentRaw()
.replaceAll("(?is:" + getGuildController().getPREFIX() + command + " delGame )","").toLowerCase();
if (!watchGame.contains(delGame)){
thisEvent.getChannel().sendMessage("ERROR: Game is not on the list!").queue();
return;
}
oldConf.remove(delGame);
getConfig().put("watchGame", oldConf);
safeConfig();
watchGame.remove(delGame);
thisEvent.getChannel().sendMessage("Game `" + delGame + "` got removed from list.").queue();
} else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "setRole")){
if (thisEvent.getMessage().getMentionedRoles().size() != 1){
thisEvent.getChannel().sendMessage("No Role Mentioned, abort").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES));
return;
}
getConfig().remove("watchRole");
getConfig().put("watchRole", thisEvent.getMessage().getMentionedRoles().get(0).getIdLong());
safeConfig();
thisEvent.getChannel().sendMessage("Set watchRole to: `" + thisEvent.getGuild().getRoleById(getConfig().get("watchRole").toString()).getName() + "`").queue();
}
}
if (event instanceof UserActivityStartEvent){
UserActivityStartEvent thisEvent = (UserActivityStartEvent) event;
if(watchGame.contains(thisEvent.getNewActivity().getName().toLowerCase())){
thisEvent.getGuild().addRoleToMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
}
} else if (event instanceof UserActivityEndEvent){
UserActivityEndEvent thisEvent = (UserActivityEndEvent ) event;
if(watchGame.contains(thisEvent.getOldActivity().getName().toLowerCase())) {
thisEvent.getGuild().removeRoleFromMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
}
}
if (event instanceof UserUpdateActivityOrderEvent){
UserUpdateActivityOrderEvent thisEvent = (UserUpdateActivityOrderEvent ) event;
if (watchGame.contains(thisEvent.getNewValue().get(0).getName().toLowerCase())){
//TODO
thisEvent.getGuild().addRoleToMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
} else {
if (thisEvent.getMember().getRoles().contains(thisEvent.getGuild().getRoleById(watchRole)))
thisEvent.getGuild().removeRoleFromMember(thisEvent.getMember(), thisEvent.getGuild().getRoleById(watchRole)).queue();
}
}
}
@Override
public String showSettings() {
StringBuilder sb = new StringBuilder();
sb.append("watchGame: ");
for (String s: watchGame)
sb.append("`").append(s).append("`, ");
sb.replace(sb.length()-2,sb.length(), "");
sb.append("\nwatchRole: ").append(getGuildController().getJda()
.getGuildById(getGuildController().getGUILD_ID())
.getRoleById(watchRole).getName());
return sb.toString();
}
}