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 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 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(); } }