- if (!channelTypes.contains(recipient.charAt(0))) {
- eventBus.post(new PrivateMessageReceived(this, reply.source().get(), parameters.get(1)));
+ String message = parameters.get(1);
+ if (message.startsWith("\u0001") && message.endsWith("\u0001")) {
+ /* CTCP! */
+ String[] messageWords = message.substring(1, message.length() - 1).split(" +");
+ String ctcpCommand = messageWords[0];
+ if (ctcpCommand.equalsIgnoreCase("DCC")) {
+ if (messageWords[1].equalsIgnoreCase("SEND")) {
+ Optional<InetAddress> inetAddress = parseInetAddress(messageWords[3]);
+ Optional<Integer> port = Optional.fromNullable(Ints.tryParse(messageWords[4]));
+ long fileSize = Optional.fromNullable(Longs.tryParse(messageWords[5])).or(-1L);
+ if (inetAddress.isPresent() && port.isPresent()) {
+ eventBus.post(new DccSendReceived(this, reply.source().get(), messageWords[2], inetAddress.get(), port.get(), fileSize));
+ } else {
+ logger.warning(String.format("Received malformed DCC SEND: “%s”", message));
+ }
+ }
+ }
+ } else if (!channelTypes.contains(recipient.charAt(0))) {
+ eventBus.post(new PrivateMessageReceived(this, reply.source().get(), message));