10 |
|
import java.io.*; |
11 |
|
import java.net.*; |
12 |
|
import java.util.*; |
13 |
+ |
import java.text.*; |
14 |
|
|
15 |
|
/** |
16 |
|
* This Alert sends an IRC message. |
49 |
|
// connect to the IRC server |
50 |
|
_ircbot = new IRCBot(); |
51 |
|
_ircbot.start(); |
52 |
+ |
_startTime = System.currentTimeMillis(); |
53 |
|
|
54 |
|
_logger.write(toString(), Logger.SYSINIT, "IRC Alerter started"); |
55 |
|
} |
77 |
|
message = StringUtils.replaceText(message, "%timeTillNextAlert%", getTimeString(Long.parseLong(alert.getTimeTillNextAlert()))); |
78 |
|
|
79 |
|
// send the message |
80 |
< |
_logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ levelName + " level"); |
80 |
> |
_logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ alertType + " level"); |
81 |
|
_ircbot.sendMsg(message); |
82 |
|
_lastAlert = message; |
83 |
+ |
_lastAlertTime = System.currentTimeMillis(); |
84 |
+ |
_alertCount ++; |
85 |
|
} |
86 |
|
} |
87 |
|
} |
143 |
|
private String _lastAlert = "no alerts have been sent"; |
144 |
|
|
145 |
|
/** |
146 |
+ |
* The time of the last alert |
147 |
+ |
*/ |
148 |
+ |
private long _lastAlertTime = -1; |
149 |
+ |
|
150 |
+ |
/** |
151 |
+ |
* Number of alerts sent |
152 |
+ |
*/ |
153 |
+ |
private long _alertCount = 0; |
154 |
+ |
|
155 |
+ |
/** |
156 |
+ |
* Time of IRCBot startup |
157 |
+ |
*/ |
158 |
+ |
private long _startTime; |
159 |
+ |
|
160 |
+ |
/** |
161 |
|
* This is the friendly identifier of the |
162 |
|
* component this class is running in. |
163 |
|
* eg, a Filter may be called "filter1", |
255 |
|
*/ |
256 |
|
public void sendMsg(String msg) { |
257 |
|
_socketOut.println("PRIVMSG "+_channel+" :"+msg); |
258 |
+ |
// wait a second before returning... |
259 |
+ |
// this ensures messages can't be sent too fast |
260 |
+ |
try {Thread.sleep(1000);} catch (InterruptedException e) {} |
261 |
|
} |
262 |
|
|
263 |
|
/** |
268 |
|
*/ |
269 |
|
public void sendPrivMsg(String user, String msg) { |
270 |
|
_socketOut.println("PRIVMSG "+user+" :"+msg); |
271 |
+ |
// wait a second before returning... |
272 |
+ |
// this ensures messages can't be sent too fast |
273 |
+ |
try {Thread.sleep(1000);} catch (InterruptedException e) {} |
274 |
|
} |
275 |
|
|
276 |
|
/** |
281 |
|
public void sendAction(String msg) { |
282 |
|
char esc = 001; |
283 |
|
sendMsg(esc+"ACTION "+msg+esc); |
284 |
+ |
// wait a second before returning... |
285 |
+ |
// this ensures messages can't be sent too fast |
286 |
+ |
try {Thread.sleep(1000);} catch (InterruptedException e) {} |
287 |
|
} |
288 |
|
|
289 |
|
/** |
293 |
|
*/ |
294 |
|
public void sendNotice(String msg) { |
295 |
|
_socketOut.println("NOTICE "+_channel+" :"+msg); |
296 |
+ |
// wait a second before returning... |
297 |
+ |
// this ensures messages can't be sent too fast |
298 |
+ |
try {Thread.sleep(1000);} catch (InterruptedException e) {} |
299 |
|
} |
300 |
|
|
301 |
|
/** |
400 |
|
_socketOut.println("PONG" + line.substring(4)); |
401 |
|
} |
402 |
|
// see if it's for us |
403 |
< |
else if(getMsg(line).startsWith(_nickname)) { |
403 |
> |
else if(getMsg(line).startsWith(_nickname+",") |
404 |
> |
|| getMsg(line).startsWith(_nickname+":") |
405 |
> |
|| getMsg(line).startsWith(_nickname+" ")) { |
406 |
|
// we have a message for us |
407 |
|
String message = getMsg(line).substring(_nickname.length()); |
408 |
|
if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.stopCommand"))!=-1) { |
413 |
|
_active = true; |
414 |
|
sendMsg(getMsgSender(line)+", alerts have been activated"); |
415 |
|
} |
416 |
+ |
// this needs to go here if it contains the same words as the lastAlertCommand |
417 |
+ |
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.timeSinceLastAlertCommand"))!=-1) { |
418 |
+ |
if(_lastAlertTime != -1) { |
419 |
+ |
long uptime = (System.currentTimeMillis() - _lastAlertTime) / 1000; |
420 |
+ |
String uptimeText = DateUtils.formatTime(uptime, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs"); |
421 |
+ |
sendMsg(getMsgSender(line)+", I last sent an alert "+uptimeText+ " ago"); |
422 |
+ |
} |
423 |
+ |
else { |
424 |
+ |
sendMsg(getMsgSender(line)+", I've never sent an alert!"); |
425 |
+ |
} |
426 |
+ |
} |
427 |
|
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.lastAlertCommand"))!=-1) { |
428 |
< |
sendMsg(getMsgSender(line)+", last alert was: "+_lastAlert); |
428 |
> |
if(_lastAlertTime != -1) { |
429 |
> |
String date = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.UK).format(new Date(_lastAlertTime)); |
430 |
> |
sendMsg(getMsgSender(line)+", last alert was at "+date+"; "+_lastAlert); |
431 |
> |
} |
432 |
> |
else { |
433 |
> |
sendMsg(getMsgSender(line)+", I've never sent an alert!"); |
434 |
> |
} |
435 |
> |
|
436 |
|
} |
437 |
|
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.joinCommand"))!=-1) { |
438 |
|
String joinCmd = cp.getProperty(_name, "Alerter.IRC.joinCommand"); |
447 |
|
_socketOut.println("JOIN "+newChan); |
448 |
|
_channel = newChan; |
449 |
|
} |
450 |
+ |
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.nickChangeCommand"))!=-1) { |
451 |
+ |
String nickChangeCmd = cp.getProperty(_name, "Alerter.IRC.nickChangeCommand"); |
452 |
+ |
String newNick = message.substring(message.indexOf(nickChangeCmd) + nickChangeCmd.length() + 1); |
453 |
+ |
int endOfNick = newNick.indexOf(" "); |
454 |
+ |
if(endOfNick == -1) { |
455 |
+ |
endOfNick = newNick.length(); |
456 |
+ |
} |
457 |
+ |
newNick = newNick.substring(0, endOfNick); |
458 |
+ |
sendMsg(getMsgSender(line)+", okay, changing my nickname to "+newNick); |
459 |
+ |
_socketOut.println("NICK "+newNick); |
460 |
+ |
_nickname = newNick; |
461 |
+ |
} |
462 |
+ |
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.versionCommand"))!=-1) { |
463 |
+ |
sendMsg(getMsgSender(line)+", I am version "+REVISION.substring(11, REVISION.length() -2)+" of the i-scream alerting bot"); |
464 |
+ |
} |
465 |
|
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.helpCommand"))!=-1) { |
466 |
< |
sendPrivMsg(getMsgSender(line), "I am the i-scream alerting bot revision "+REVISION.substring(11, REVISION.length() -2)); |
466 |
> |
sendPrivMsg(getMsgSender(line), "Hello, I am the i-scream alerting bot version "+REVISION.substring(11, REVISION.length() -2)); |
467 |
|
sendPrivMsg(getMsgSender(line), "I understand the following commands;"); |
468 |
|
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.stopCommand")); |
469 |
|
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.startCommand")); |
470 |
|
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.lastAlertCommand")); |
471 |
+ |
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.joinCommand")); |
472 |
+ |
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.nickChangeCommand")); |
473 |
+ |
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.statCommand")); |
474 |
+ |
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.uptimeCommand")); |
475 |
+ |
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.timeSinceLastAlertCommand")); |
476 |
+ |
sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.helpCommand")); |
477 |
+ |
} |
478 |
+ |
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.statCommand"))!=-1) { |
479 |
+ |
sendMsg(getMsgSender(line)+", I have sent a total of "+_alertCount+" alerts!"); |
480 |
+ |
} |
481 |
+ |
else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.uptimeCommand"))!=-1) { |
482 |
+ |
long uptime = (System.currentTimeMillis() - _startTime) / 1000; |
483 |
+ |
String uptimeText = DateUtils.formatTime(uptime, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs"); |
484 |
+ |
sendMsg(getMsgSender(line)+", I have been running for "+uptimeText); |
485 |
|
} |
486 |
|
else if(message.indexOf("do a jibble dance")!=-1) { |
487 |
|
// little joke :) |