package uc.protocols.hub; import java.io.IOException; import java.util.regex.Pattern; import uc.IUser; import uc.protocols.DCProtocol; import uc.user.User; /** * * sends a private message * * $To: <other nick> From: <nick> $<<nick>> <message> * * @author Quicksilver * */ public class To extends AbstractNMDCHubProtocolCommand { private final Pattern normalPM ; private final Pattern hubMM ; private MC mc = null; public To() { normalPM = Pattern.compile( prefix +" "+NMDCNICK+" From: ("+NMDCNICK+") \\$(?:<("+NMDCNICK+")> )?("+TEXT+")"); hubMM = Pattern.compile(prefix +" "+NMDCNICK+" From: Hub \\$("+TEXT+")"); } @Override public void handle(Hub hub,String command) throws IOException { //old hubs handle PMs differently if (hub.getOthersSupports().isEmpty() && (matcher = hubMM.matcher(command)).matches() ) { getMC().handle(hub,matcher.group(1)); } else if ((matcher = normalPM.matcher(command)).matches()) { User from = hub.getUserByNick(matcher.group(1)); String senderNick = matcher.group(2); User sender = senderNick != null? hub.getUserByNick(senderNick) : null; if (from != null) { String message = DCProtocol.reverseReplaces(matcher.group(3)); hub.pmReceived(new PrivateMessage(from, sender, message,false)); } } } private MC getMC() { if (mc == null) { mc = new MC(); } return mc; } public static void sendPM(Hub hub,IUser target,String message,boolean me) { String mynick = hub.getSelf().getNick(); hub.sendUnmodifiedRaw("$To: "+target.getNick()+" From: "+mynick+" $" + (me? "*"+mynick+" ": "<"+mynick+"> ") + DCProtocol.doReplaces(message) + (me?"*":"") +"|"); } @Override public String getPrefix() { return "$To:"; } /* * test for the pattern of TO * public static void main(String[] args) { String pm = "$To: hallodri From: mick $<micknick> huhuapsah"; To to = new To(null); Matcher m = to.pattern.matcher(pm); boolean matches = m.matches(); System.out.println(matches); if (matches) { System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println(m.group(3)); } } */ }