1 package rero.ircfw.data; 2 3 4 5 import rero.ircfw.Channel; 6 import rero.ircfw.interfaces.FrameworkConstants; 7 8 import java.util.HashMap ; 9 10 public class ModeTracker extends DataEventAction implements FrameworkConstants { 11 public boolean isEvent(HashMap data) { 12 return ("MODE".equals(data.get($EVENT$)) || "324".equals(data.get($EVENT$)) || "221".equals(data.get($EVENT$))); 13 } 14 15 public void process(HashMap data) { 16 String event = (String ) data.get($EVENT$); 17 String target = "", modes = ""; 18 19 if (event.equals("MODE") || event.equals("221")) { 20 target = (String ) data.get($TARGET$); 21 modes = (String ) data.get($PARMS$); 22 data.put($PARMS$, modes.trim()); } else if (event.equals("324")) { 24 String [] blah = data.get($PARMS$).toString().split("\\s", 2); 25 26 target = blah[0]; 27 modes = blah[1]; 28 } 29 30 boolean isChannel = (target.charAt(0) == '#' || target.charAt(0) == '&'); 31 boolean doSet = false; 32 33 String parse[] = modes.split("\\s", 0); 34 35 modes = parse[0]; 36 37 int target_index = 1; 38 39 for (int x = 0; x < modes.length(); x++) { 40 if (modes.charAt(x) == '+') { 41 doSet = true; 42 } else if (modes.charAt(x) == '-') { 43 doSet = false; 44 } else if (isChannel) { 45 Channel ch = dataList.getChannel(target); 46 47 if (dataList.getPrefixInfo().isPrefixMode(modes.charAt(x))) { 48 dataList.synchronizeUserPreChange(dataList.getUser(parse[target_index]), ch); 49 50 int temp = dataList.getUser(parse[target_index]).getModeFor(ch); 51 52 if (doSet) { 53 dataList.getUser(parse[target_index]) 54 .setModeFor(ch, dataList.getPrefixInfo().setMode(temp, modes.charAt(x))); 55 } else { 56 dataList.getUser(parse[target_index]) 57 .setModeFor(ch, dataList.getPrefixInfo().unsetMode(temp, modes.charAt(x))); 58 } 59 60 dataList.synchronizeUserPostChange(dataList.getUser(parse[target_index]), ch); 61 target_index++; 62 } else { 63 switch (modes.charAt(x)) { 64 case 'l': 65 if (doSet) { 66 ch.getMode().SetMode('l'); 67 ch.setLimit(Integer.parseInt(parse[target_index])); 68 target_index++; 69 } else { 70 ch.getMode().UnsetMode('l'); 71 ch.setLimit(-1); 72 } 73 break; 74 75 case 'k': 76 if (doSet) { 77 ch.getMode().SetMode('k'); 78 ch.setKey(parse[target_index]); 79 target_index++; 80 } else { 81 ch.getMode().UnsetMode('k'); 82 target_index++; 83 } 84 break; 85 86 default: 87 if (dataList.isChanGroupMode("A", modes.charAt(x))) { 90 target_index++; 91 break; 92 } 93 94 if (dataList.isChanGroupMode("B", modes.charAt(x))) { 98 target_index++; 99 } 100 101 if (dataList.isChanGroupMode("C", modes.charAt(x)) && doSet) { 104 target_index++; 105 } 106 107 110 if (doSet) { 111 ch.getMode().SetMode(modes.charAt(x)); 112 } else { 113 ch.getMode().UnsetMode(modes.charAt(x)); 114 } 115 } 116 } 117 } else { 118 if (!target.equals(dataList.getMyNick())) { 119 return; 120 } 121 122 if (doSet) { 123 dataList.getMyUserInformation().getMode().SetMode(modes.charAt(x)); 124 } else { 125 dataList.getMyUserInformation().getMode().UnsetMode(modes.charAt(x)); 126 } 127 } 128 } 129 } 130 } 131 | Popular Tags |