package modules; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.URISyntaxException; import java.util.Map.Entry; import java.util.HashSet; import java.util.Properties; import java.util.Scanner; import extras.Rainbowfy; import bot.Config; import bot.Message; import bot.Module; import bot.Server; public class Triggers implements Module { private Properties triggers; private HashSet<String> rooms; File file; public Triggers(){ rooms = new HashSet<String>(); triggers = new Properties(); try { triggers.load(new FileInputStream(new File(this.getClass().getResource("properties/triggers.properties").toURI()))); file = new File(this.getClass().getResource("files/triggerrooms.txt").toURI()); Scanner scan = new Scanner(file); while(scan.hasNextLine()){ String next = scan.nextLine(); if(next.startsWith("#")) rooms.add(next); else rooms.add(next); } scan.close(); } catch (IOException | URISyntaxException e) { e.printStackTrace(); } } @Override public void parse(Message m) { String target = m.param(); if(!m.param().startsWith("#")) target = m.sender(); if(Config.getAdmins().contains(m.sender()) && m.hasBotParams()){ if(m.botCommand().equals("trigger")){ String[] trigs = m.botParams().split(" : "); if(trigs.length == 2){ triggers.setProperty(trigs[0], trigs[1]); try { triggers.store(new FileOutputStream(new File(this.getClass().getResource("properties/triggers.properties").toURI())), "triggers file"); } catch (IOException | URISyntaxException e) { e.printStackTrace(); } if(triggers.size() == 1) Server.say(target, String.format("Trigger added. There is now %d trigger set", triggers.size())); else Server.say(target, String.format("Trigger added. There are now %d triggers set", triggers.size())); return; } } if(m.botCommand().equals("untrigger")){ if(triggers.getProperty(m.botParams()) != null){ triggers.remove(m.botParams()); try { triggers.store(new FileOutputStream(new File(this.getClass().getResource("properties/triggers.properties").toURI())), "triggers file"); } catch (IOException | URISyntaxException e) { e.printStackTrace(); } if(triggers.size() == 1) Server.say(target, String.format("Trigger removed. There is now %d trigger set", triggers.size())); else Server.say(target, String.format("Trigger removed. There are now %d triggers set", triggers.size())); return; } } if(m.botCommand().equals("triggerson")){ if(m.hasBotParams()){ rooms.add(m.botParamsArray()[0]); write(); } else{ rooms.add(m.param()); write(); } } if(m.botCommand().equals("triggersoff")){ if(m.hasBotParams()){ rooms.remove(m.botParamsArray()[0]); write(); } else{ rooms.remove(m.param()); write(); } } } if(m.botCommand().equals("listtriggers")){ if(triggers.size() == 1) Server.say(target, String.format("There is %d trigger set", triggers.size())); else Server.say(target, String.format("There are %d triggers set", triggers.size())); for(Entry<Object, Object> e : triggers.entrySet()){ Server.say(target,e.getKey().toString() + " : " + e.getValue().toString()); } } if(!rooms.contains(m.param()))return; for(Entry<Object, Object> e : triggers.entrySet()){ if(m.trailing().toLowerCase().contains((e.getKey().toString().toLowerCase()))){ String trigger = e.getValue().toString(); trigger = trigger.replace("%s", m.sender()); trigger = trigger.replace("%rnd", String.valueOf(Math.random())); if(trigger.startsWith("%wait")){ String[] triggersplit = trigger.split("\\s+"); long waittime = Long.parseLong(triggersplit[1]); trigger = ""; for(int i = 2; i < triggersplit.length; i++){ trigger = triggersplit[i] + " "; } trigger = trigger.trim(); try { Thread.sleep(waittime); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } if(trigger.contains("%rb")){ trigger = trigger.replace(" %rb ","" ); trigger = trigger.replace("%rb ","" ); trigger = trigger.replace("%rb","" ); Server.say(target, Rainbowfy.convert(trigger)); } else Server.say(target, trigger); } } } private void write(){ try { PrintWriter writer = new PrintWriter(file); for(String s : rooms){ writer.println(s); } writer.close(); } catch (IOException e) {} } }