package modules; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.net.URISyntaxException; import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import java.util.Map.Entry; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import bot.Config; import bot.Message; import bot.Module; import bot.Server; import bot.info.Info; public class Forwarding implements Module { public JsonObject json; public File jsonfile; public Forwarding() { try { jsonfile = new File(this.getClass().getResource("json/forwarding.json").toURI()); Scanner scan; scan = new Scanner(jsonfile); String jsonstring = ""; while(scan.hasNext()){ jsonstring += scan.next() + " "; } scan.close(); Gson gson = new GsonBuilder().setPrettyPrinting().create(); json = gson.fromJson(jsonstring, JsonElement.class).getAsJsonObject(); } catch (URISyntaxException e) { e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void parse(Message m) { if(m.command().equals("PRIVMSG") || m.command().equals("NOTICE")){ for(Entry<String, JsonElement> en : json.entrySet()){ if(!Info.hasUserInfo(en.getKey())) continue; if(get(en.getKey()).contains(m.sender())){ if(Info.isRegistered(en.getKey()) && Config.getAdmins().contains(en.getKey())){ Server.pm(en.getKey(), String.format("4%s %s 2%s > %s", m.sender(), m.command(), m.param(), m.trailing())); } } } } if(m.botCommand().equals("forward")){ if(m.senderIsAdmin()){ for(String s : m.botParamsArray()){ add(m.sender(), s); } } } if(m.botCommand().equals("unforward")){ if(m.senderIsAdmin()){ for(String s : m.botParamsArray()){ remove(m.sender(), s); } } } } private void save(){ Gson gson = new GsonBuilder().setPrettyPrinting().create(); try { Writer writer = new FileWriter(jsonfile); gson.toJson(json,writer); writer.close(); } catch (IOException e) { e.printStackTrace(); } } public HashSet<String> get(String nick){ if(!json.has(nick))return new HashSet<String>(); JsonArray jsonarray = json.get(nick).getAsJsonArray(); HashSet<String> set = new HashSet<String>(); for(int i = 0; i < jsonarray.size(); i++){ set.add(jsonarray.get(i).getAsString()); } return set; } public void add(String nick, String user){ String toadd = "\"" + user + "\""; Gson gson = new GsonBuilder().create(); JsonArray jsonarray = new JsonArray(); if(json.has(nick)){ jsonarray = json.get(nick).getAsJsonArray(); for(JsonElement je : jsonarray){ if(je.getAsString().equals(user)) return; } } jsonarray.add(gson.fromJson(toadd, JsonElement.class)); json.add(nick, jsonarray); save(); } public boolean remove(String nick, String user){ if(!json.has(nick))return false; JsonArray jsonarray = json.get(nick).getAsJsonArray(); boolean found = true; for(int i = 0; i < jsonarray.size(); i++){ if(jsonarray.get(i).getAsString().equals(user)){ jsonarray.remove(i); found = true; } } json.add(nick, jsonarray); save(); return found; } }