--- projects/cms/source/server/uk/org/iscream/cms/server/client/alerters/IRC__Alerter.java 2001/03/04 04:43:29 1.10 +++ projects/cms/source/server/uk/org/iscream/cms/server/client/alerters/IRC__Alerter.java 2001/03/04 05:26:00 1.11 @@ -10,6 +10,7 @@ import uk.ac.ukc.iscream.componentmanager.*; import java.io.*; import java.net.*; import java.util.*; +import java.text.*; /** * This Alert sends an IRC message. @@ -17,8 +18,8 @@ import java.util.*; * Clean shutdown could be achieved by stopping the run() method in the * IRCBot inner class. * - * @author $Author: ajm $ - * @version $Id: IRC__Alerter.java,v 1.10 2001/03/04 04:43:29 ajm Exp $ + * @author $Author: tdb $ + * @version $Id: IRC__Alerter.java,v 1.11 2001/03/04 05:26:00 tdb Exp $ */ public class IRC__Alerter implements PluginAlerter { @@ -27,7 +28,7 @@ public class IRC__Alerter implements PluginAlerter { /** * The current CVS revision of this class */ - public final String REVISION = "$Revision: 1.10 $"; + public final String REVISION = "$Revision: 1.11 $"; /** * A description of this alerter @@ -48,6 +49,7 @@ public class IRC__Alerter implements PluginAlerter { // connect to the IRC server _ircbot = new IRCBot(); _ircbot.start(); + _startTime = System.currentTimeMillis(); _logger.write(toString(), Logger.SYSINIT, "IRC Alerter started"); } @@ -78,6 +80,8 @@ public class IRC__Alerter implements PluginAlerter { _logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ alertType + " level"); _ircbot.sendMsg(message); _lastAlert = message; + _lastAlertTime = System.currentTimeMillis(); + _alertCount ++; } } } @@ -139,6 +143,21 @@ public class IRC__Alerter implements PluginAlerter { private String _lastAlert = "no alerts have been sent"; /** + * The time of the last alert + */ + private long _lastAlertTime = -1; + + /** + * Number of alerts sent + */ + private long _alertCount = 0; + + /** + * Time of IRCBot startup + */ + private long _startTime; + + /** * This is the friendly identifier of the * component this class is running in. * eg, a Filter may be called "filter1", @@ -369,7 +388,9 @@ public class IRC__Alerter implements PluginAlerter { _socketOut.println("PONG" + line.substring(4)); } // see if it's for us - else if(getMsg(line).startsWith(_nickname)) { + else if(getMsg(line).startsWith(_nickname+",") + || getMsg(line).startsWith(_nickname+":") + || getMsg(line).startsWith(_nickname+" ")) { // we have a message for us String message = getMsg(line).substring(_nickname.length()); if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.stopCommand"))!=-1) { @@ -380,8 +401,26 @@ public class IRC__Alerter implements PluginAlerter { _active = true; sendMsg(getMsgSender(line)+", alerts have been activated"); } + // this needs to go here if it contains the same words as the lastAlertCommand + else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.timeSinceLastAlertCommand"))!=-1) { + if(_lastAlertTime != -1) { + long uptime = (System.currentTimeMillis() - _lastAlertTime) / 1000; + String uptimeText = DateUtils.formatTime(uptime, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs"); + sendMsg(getMsgSender(line)+", I last sent an alert "+uptimeText+ " ago"); + } + else { + sendMsg(getMsgSender(line)+", I've never sent an alert!"); + } + } else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.lastAlertCommand"))!=-1) { - sendMsg(getMsgSender(line)+", last alert was: "+_lastAlert); + if(_lastAlertTime != -1) { + String date = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.UK).format(new Date(_lastAlertTime)); + sendMsg(getMsgSender(line)+", last alert was at "+date+"; "+_lastAlert); + } + else { + sendMsg(getMsgSender(line)+", I've never sent an alert!"); + } + } else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.joinCommand"))!=-1) { String joinCmd = cp.getProperty(_name, "Alerter.IRC.joinCommand"); @@ -396,12 +435,38 @@ public class IRC__Alerter implements PluginAlerter { _socketOut.println("JOIN "+newChan); _channel = newChan; } + else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.nickChangeCommand"))!=-1) { + String nickChangeCmd = cp.getProperty(_name, "Alerter.IRC.nickChangeCommand"); + String newNick = message.substring(message.indexOf(nickChangeCmd) + nickChangeCmd.length() + 1); + int endOfNick = newNick.indexOf(" "); + if(endOfNick == -1) { + endOfNick = newNick.length(); + } + newNick = newNick.substring(0, endOfNick); + sendMsg(getMsgSender(line)+", okay, changing my nickname to "+newNick); + _socketOut.println("NICK "+newNick); + _nickname = newNick; + } else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.helpCommand"))!=-1) { sendPrivMsg(getMsgSender(line), "I am the i-scream alerting bot revision "+REVISION.substring(11, REVISION.length() -2)); sendPrivMsg(getMsgSender(line), "I understand the following commands;"); sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.stopCommand")); sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.startCommand")); sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.lastAlertCommand")); + sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.joinCommand")); + sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.nickChangeCommand")); + sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.statCommand")); + sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.uptimeCommand")); + sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.timeSinceLastAlertCommand")); + sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.helpCommand")); + } + else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.statCommand"))!=-1) { + sendMsg(getMsgSender(line)+", I have sent a total of "+_alertCount+" alerts!"); + } + else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.uptimeCommand"))!=-1) { + long uptime = (System.currentTimeMillis() - _startTime) / 1000; + String uptimeText = DateUtils.formatTime(uptime, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs"); + sendMsg(getMsgSender(line)+", I have been running for "+uptimeText); } else if(message.indexOf("do a jibble dance")!=-1) { // little joke :)