package modules; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.net.URISyntaxException; import java.util.Scanner; 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 Intros implements Module { private Gson gson; private JsonObject json; private File jsonfile; private JsonObject intros; public Intros() { try{ jsonfile = new File(this.getClass().getResource("json/intros.json").toURI()); Scanner scan; scan = new Scanner(new FileInputStream(jsonfile)); String jsonstring = ""; while(scan.hasNext()){ jsonstring += scan.next() + " "; } scan.close(); gson = new GsonBuilder().setPrettyPrinting().create(); json = gson.fromJson(jsonstring, JsonElement.class).getAsJsonObject(); intros = json.get("intros").getAsJsonObject(); } catch(IOException e){ e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } } @Override public void parse(Message m) { String target = m.param(); if(!m.param().startsWith("#")) target = m.sender(); if(m.param().startsWith("#") && m.command().equals("PRIVMSG")){ if(m.botCommand().equals("intros") || m.botCommand().equals("intro")){ if(Info.isRegistered(m.sender())){ if(m.hasBotParams()){ if(m.botParamsArray()[0].equals("list")){ if(intros.has(m.param())){ if(intros.get(m.param()).getAsJsonObject().has(m.sender())){ JsonArray introarray = intros.get(m.param()).getAsJsonObject().get(m.sender()).getAsJsonArray(); Server.notice(m.sender(), "You have " + introarray.size() + " intros set for " + m.param()); for(int i = 0; i < introarray.size(); i++){ Server.notice(m.sender(),"Intro " + (i+1) + ": " + introarray.get(i).getAsString()); } } else{ Server.notice(m.sender(), "You do not have any intros set for " + m.param()); } } else{ Server.notice(m.sender(), "You do not have any intros set for " + m.param()); } } else if(m.botParamsArray()[0].equals("add")){ if(m.botParamsArray().length > 1){ JsonObject channelintros; if(!intros.has(m.param())){ channelintros = new JsonObject(); intros.add(m.param(), channelintros); } else{ channelintros = intros.get(m.param()).getAsJsonObject(); } JsonArray userintros; if(!channelintros.has(m.sender())){ userintros = new JsonArray(); channelintros.add(m.sender(), userintros); } else{ userintros = channelintros.get(m.sender()).getAsJsonArray(); } String intro = ""; for(int i = 1; i < m.botParamsArray().length; i++){ intro += m.botParamsArray()[i] + " "; } intro = intro.trim() .replaceAll("\n", "") .replaceAll("\r", "") .replace("{", "\\{") .replace("}", "\\}") .replace("[", "\\[") .replace("]", "\\]") .replace(";", "\\;") .replace(":", "\\:"); if(userintros.size() == 10){ Server.say(target, m.sender() + ": Sorry, you have already set the max number of intros. Use " + Config.getChar() + "intros del <intro> to remove some."); } else{ userintros.add( gson.fromJson("\"" + intro + "\"", JsonElement.class)); Server.say(target, m.sender() + ": Intro added. You now have " + userintros.size() + " intros set." ); save(); } } else{ Server.say(target, m.sender() + ": Usage: " + Config.getChar() + "intros add <intro>"); } } else if(m.botParamsArray()[0].equals("del")){ if(m.botParamsArray().length > 1){ int num; try{ num = Integer.parseInt(m.botParamsArray()[1]); } catch(NumberFormatException e){ Server.say(target, m.sender() + ": Please provide a valid intro number."); return; } if(intros.has(m.param())){ if(intros.get(m.param()).getAsJsonObject().has(m.sender())){ JsonArray userintros = intros.get(m.param()).getAsJsonObject().get(m.sender()).getAsJsonArray(); if(userintros.size() < num){ Server.say(target, m.sender() + ": Intro " + num + " does not exist"); } else{ userintros.remove(num-1); if(userintros.size() == 0){ intros.get(m.param()).getAsJsonObject().remove(m.sender()); } save(); Server.say(target, m.sender() + ": Intro removed. You now have " + userintros.size() + " intros set"); } } else{ Server.say(target, m.sender() + ": Intro " + num + " does not exist"); } } else{ Server.say(target, m.sender() + ": Intro " + num + " does not exist"); } } else{ Server.say(target, m.sender() + ": Usage: " + Config.getChar() + "intros del <num>"); } } } else{ Server.say(target, "Usage : " + Config.getChar() + "intros <add | list | del>"); } } else{ Server.say(target, m.sender() + ": You must be a registered user to use this command"); } } } if(m.command().equals("JOIN")){ System.out.println(m.trailing() + " " + intros.has(m.param())); if(intros.has(m.trailing())){ if(intros.get(m.trailing()).getAsJsonObject().has(m.sender())){ JsonArray userintros = intros.get(m.trailing()).getAsJsonObject().get(m.sender()).getAsJsonArray(); int rand = (int)Math.floor(Math.random() * userintros.size()); Server.say(m.trailing(), "​" + userintros.get(rand).getAsString()); } } } } private void save(){ Gson gson = new GsonBuilder().create(); try { PrintWriter writer = new PrintWriter(jsonfile); writer.println(gson.toJson(json)); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }