package bot; import bot.info.Info; public class Message { // fields private String message; private String sender = ""; private String senderAddress = ""; private String senderWhole = ""; private String command = ""; private String param = ""; private String trailing = ""; private String botCommand = ""; private String[] botParamsArray; private String botParams = ""; private String commandChar; private String username; private String senderHost; public Message(String message){ this.message = message; commandChar = Config.getChar(); String[] messageSplit = message.split("\\s+"); if(messageSplit.length == 2){ command = messageSplit[0]; param = ""; if(messageSplit[1].startsWith(":"))trailing = messageSplit[1].substring(1); else trailing = messageSplit[1]; for(int i = 2; i < messageSplit.length; i++){ trailing += " " + messageSplit[i]; } String[] sendersplit = senderWhole.split("!"); if(sendersplit.length > 1){ sender = sendersplit[0]; senderAddress = sendersplit[1]; String[] senderAddressSplit = senderAddress.split("@"); if(senderAddressSplit.length > 1){ senderHost = senderAddressSplit[1]; username = senderAddressSplit[0]; if(username.startsWith("~")){ username = username.substring(1); } } } else{ senderAddress = sender; } } else if(messageSplit.length == 3){ senderWhole = messageSplit[0].substring(1); command = messageSplit[1]; param = ""; if(messageSplit[2].startsWith(":"))trailing = messageSplit[2].substring(1); else trailing = messageSplit[2]; for(int i = 3; i < messageSplit.length; i++){ trailing += " " + messageSplit[i]; } String[] sendersplit = senderWhole.split("!"); if(sendersplit.length > 1){ sender = sendersplit[0]; senderAddress = sendersplit[1]; String[] senderAddressSplit = senderAddress.split("@"); if(senderAddressSplit.length > 1){ senderHost = senderAddressSplit[1]; username = senderAddressSplit[0]; if(username.startsWith("~")){ username = username.substring(1); } } } else{ senderAddress = sender; } } else{ senderWhole = messageSplit[0].substring(1); command = messageSplit[1]; param = messageSplit[2]; if(messageSplit[3].startsWith(":"))trailing = messageSplit[3].substring(1); else trailing = messageSplit[3]; for(int i = 4; i < messageSplit.length; i++){ trailing += " " + messageSplit[i]; } String[] sendersplit = senderWhole.split("!"); if(sendersplit.length > 1){ sender = sendersplit[0]; senderAddress = sendersplit[1]; String[] senderAddressSplit = senderAddress.split("@"); if(senderAddressSplit.length > 1){ senderHost = senderAddressSplit[1]; username = senderAddressSplit[0]; if(username.startsWith("~")){ username = username.substring(1); } } } else{ senderAddress = sender; } boolean cmd = trailing.startsWith(commandChar); if(commandChar.equals(Config.getNick() + ": ")){ if(trailing.startsWith(Config.getNick() + ", ")) cmd = true; if(trailing.startsWith(Config.getNick() + ": ")) cmd = true; if(trailing.startsWith(Config.getNick())) cmd = true; else cmd = false; } boolean isToBot = false; if(param.equals(Config.getNick())){ isToBot = true; cmd = true; } if(cmd && command.equals("PRIVMSG")){ if(isToBot){ String[] trailingSplit = trailing.split("\\s+"); botCommand = trailingSplit[0]; if(trailingSplit.length > 1){ botParamsArray = new String[trailingSplit.length - 1]; for(int i = 1; i < trailingSplit.length; i++){ botParamsArray[i-1] = trailingSplit[i]; } } } else{ String[] trailingSplit = trailing.split("\\s+"); int i; int diff; if(commandChar.equals(Config.getNick() + ": ")){ if(trailingSplit.length == 1){ cmd = false; return; } botCommand = trailingSplit[1]; i = 2; diff = 2; botParamsArray = new String[trailingSplit.length - 2]; } else{ botCommand = trailingSplit[0].substring(commandChar.length()); i = 1; diff = 1; botParamsArray = new String[trailingSplit.length - 1]; } for(; i < trailingSplit.length; i++){ botParamsArray[i-diff] = trailingSplit[i]; botParams += trailingSplit[i] + " "; } botParams = botParams.trim(); } } } } public String message(){ return message; } public String sender(){ return sender; } public String senderAddress(){ return senderAddress; } public String username(){ return username; } public String senderHost(){ return senderHost; } public String senderWhole(){ return senderWhole; } public String command(){ return command; } public String param(){ return param; } public String trailing(){ return trailing; } public String botCommand(){ return botCommand.toLowerCase(); } public String[] botParamsArray(){ return botParamsArray; } public String botParams(){ return botParams; } public void send(String message){ Server.send(message); } public void notice(String target, String message){ Server.notice(target, message); } public void pm(String target, String message){ Server.pm(target, message); } public String commandChar(){ return commandChar; } public boolean hasBotParams(){ if(botParamsArray == null)return false; return botParamsArray.length > 0; } public boolean senderIsAdmin(){ if (Info.isRegistered(sender)) return Config.getAdmins().contains(sender); else return false; } }