// Copyright (c) 2015, Christopher "BlayTheNinth" Baker
package net.blay09.mods.eirairc.irc;
import net.blay09.mods.eirairc.api.irc.IRCMessage;
public class IRCMessageImpl implements IRCMessage {
private final String[] tags;
private final String prefix;
private final String command;
private final String[] args;
public IRCMessageImpl(String[] tags, String prefix, String command, String[] args) {
this.tags = tags;
this.prefix = prefix;
this.command = command;
this.args = args;
if(tags != null) {
for (int i = 0; i < tags.length; i++) {
int eqIdx = tags[i].indexOf('=');
if (eqIdx != -1) {
String key = tags[i].substring(0, eqIdx);
String value = tags[i].substring(eqIdx + 1);
value = value.replace("\\:", ";");
value = value.replace("\\s", " ");
value = value.replace("\\\\", "\\");
tags[i] = key + "=" + value;
}
}
}
}
@Override
public String getPrefix() {
return prefix;
}
@Override
public String getCommand() {
return command;
}
public int getNumericCommand() {
try {
return Integer.parseInt(command);
} catch (NumberFormatException e) {
return -1;
}
}
@Override
public String getPrefixHostname() {
int idx = prefix.indexOf('@');
if(idx != -1 && idx + 1 < prefix.length()) {
return prefix.substring(idx + 1);
}
return null;
}
@Override
public String getPrefixUsername() {
int start = prefix.indexOf('!');
int end = prefix.indexOf('@');
if(end == -1) {
end = prefix.length() - 1;
}
if(start != -1 && start + 1 < prefix.length()) {
return prefix.substring(start + 1, end);
}
return null;
}
@Override
public String getPrefixNick() {
int end = prefix.indexOf('!');
if(end != -1) {
return prefix.substring(0, end);
}
return prefix;
}
@Override
public String arg(int idx) {
if(idx >= args.length) {
return null;
}
return args[idx];
}
public String[] args() {
return args;
}
@Override
public int argCount() {
return args.length;
}
@Override
public String getTagByKey(String key) {
if(tags != null) {
for (String tag : tags) {
int eqIdx = tag.indexOf('=');
if (eqIdx != -1) {
if (tag.substring(0, eqIdx).equals(key)) {
return tag.substring(eqIdx + 1);
}
}
}
}
return null;
}
}