private void handlePrivMsg(IRCMsg msg) { if (msg.getArgs()[0].startsWith("#")) { log.info(msg.getOriginalMsg()); handleChannelMsg(msg); } else if (msg.getArgs()[0].equals(botnick)) { log.info(msg.getOriginalMsg()); handlePrivateMsg(msg); } else { log.error("Something went very wrong parsing: " + msg.getOriginalMsg()); } }
/** * Valid bot commands for nick Botnick are... 1. !Botnick cmd 2. !botnick cmd * * <p>Not yet implemented 1. !cmd 2. !B cmd 3. !b cmd * * @param msg * @return */ public boolean msgIsCommand(IRCMsg msg) { if (null == msg.getTrailing()) { return false; } String tmpTrailing = msg.getTrailing().toLowerCase(); if (tmpTrailing.startsWith("!" + botnick.charAt(0))) { return true; } else if (tmpTrailing.startsWith("!" + botnick)) { return true; } return false; }
private void handleMode(IRCMsg msg) { if (!msg.getPrefix().equals(msg.getArgs()[0])) { if (msg.getArgs().length == 3) { log.info(msg.getArgs()[0] + " gave " + msg.getArgs()[1] + " to " + msg.getArgs()[2]); } else { log.info(msg.getArgs()[0] + " gave " + msg.getArgs()[1]); } } }
public void handleNotice(IRCMsg msg) { if (msg.getTrailing().contains("This nickname is registered and protected.")) { // outboundMsgQ.add( ircCommands.nickservIdentify() ); } else if (msg.getTrailing().contains("Password accepted -- you are now recognized.")) { outboundMsgQ.add(ircCommands.joinHomeChannel()); } else if (msg.getTrailing() .contains("Inviting " + botnick + " to channel " + startchan + ".")) { log.info("Single-vector join"); outboundMsgQ.add(ircCommands.joinHomeChannel()); } else if (msg.getTrailing().contains("Inviting") && msg.getTrailing().contains("to channel") && msg.getTrailing().contains(startchan)) { log.info("Multi-vector join"); outboundMsgQ.add(ircCommands.joinHomeChannel()); } }
@Test public void testMsgFromAdmin() { String channelMsg = ":[email protected] PRIVMSG #channelname :!b flirt nick"; String adminMsg = ":[email protected] PRIVMSG #channelname :!botnick flirt nick"; // Set up bot and command IRCBot mockBot = new IRCBot(false); FlirtCommand flirtCommand = new FlirtCommand(mockBot); IRCMsg badFlirtMsg = mockBot.getIRCMsgHandler().createAndDecorateMsg(channelMsg); Assert.assertFalse(flirtCommand.listen(badFlirtMsg)); String pollResult = mockBot.getOutboundMsgQ().poll(); Assert.assertNull(pollResult); IRCMsg goodFlirt = mockBot.getIRCMsgHandler().createAndDecorateMsg(adminMsg); Assert.assertTrue(goodFlirt.isFromAdmin()); mockBot.getIRCMsgHandler().handleMsg(adminMsg); pollResult = mockBot.getOutboundMsgQ().poll(); Assert.assertNotNull(pollResult); }
private void handleErrorInviteOnly(IRCMsg msg) { if (msg.getArgs()[1].equals(startchan)) { outboundMsgQ.add(ircCommands.chanservInvite()); } }
private void handleJoin(IRCMsg msg) { log.info(msg.getFromNick() + " joined " + msg.getTrailing()); }
private void handleQuit(IRCMsg msg) { log.info(msg.getFromNick() + " QUIT " + msg.getTrailing()); }
private void handleNick(IRCMsg msg) { log.info("NICK: " + msg.getFromNick() + " changed to " + msg.getTrailing()); }
public IRCMsg interpretMsg(IRCMsg msg) { if (msg.getCommand().equals("PRIVMSG")) { handlePrivMsg(msg); } else if (msg.getCommand().equals("JOIN")) { handleJoin(msg); } else if (msg.getCommand().equals("MODE")) { handleMode(msg); } else if (msg.getCommand().equals("QUIT")) { handleQuit(msg); } else if (msg.getCommand().equals("NOTICE")) { handleNotice(msg); } else if (msg.getCommand().equals("NICK")) { handleNick(msg); } else if (msg.getCommand().equals("INVITE")) { handleInvite(msg); } else if (msg.getCommand().equals("473")) { handleErrorInviteOnly(msg); } else if (serverResponseCodesToIgnore.contains(msg.getCommand())) { // Don't do anything on purpose } else { log.info("\nATTENTION MINION!!\nUnhandled command: " + msg.getCommand()); log.info("Prefix: " + msg.getPrefix()); log.info("Command: " + msg.getCommand()); log.info("Args[0]: " + msg.getArgs()[0]); log.info("Trailing: " + msg.getTrailing()); } return msg; }
public IRCMsg stripLeadingWordFromTrailing(IRCMsg msg) { String lesser = msg.getTrailing().substring(msg.getTrailing().indexOf(" ") + 1); msg.setTrailing(lesser); return msg; }