187 lines
7.3 KiB
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();
|
|
}
|
|
}
|