ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/client/alerters/IRC__Alerter.java
(Generate patch)

Comparing projects/cms/source/server/uk/org/iscream/cms/server/client/alerters/IRC__Alerter.java (file contents):
Revision 1.12 by tdb, Sun Mar 4 05:37:15 2001 UTC vs.
Revision 1.30 by tdb, Thu Jan 17 17:58:12 2002 UTC

# Line 1 | Line 1
1   //---PACKAGE DECLARATION---
2 < package uk.ac.ukc.iscream.client.alerters;
2 > package uk.org.iscream.cms.server.client.alerters;
3  
4   //---IMPORTS---
5 < import uk.ac.ukc.iscream.client.*;
6 < import uk.ac.ukc.iscream.core.*;
7 < import uk.ac.ukc.iscream.util.*;
8 < import uk.ac.ukc.iscream.componentmanager.*;
9 <
5 > import uk.org.iscream.cms.server.client.*;
6 > import uk.org.iscream.cms.server.core.*;
7 > import uk.org.iscream.cms.server.util.*;
8 > import uk.org.iscream.cms.server.componentmanager.*;
9   import java.io.*;
10   import java.net.*;
11   import java.util.*;
12 < import java.text.*;
12 > import java.text.DateFormat;
13  
14   /**
15   * This Alert sends an IRC message.
# Line 21 | Line 20 | import java.text.*;
20   * @author  $Author$
21   * @version $Id$
22   */
23 < public class IRC__Alerter implements PluginAlerter {
23 > public class IRC__Alerter extends AlerterSkeleton {
24  
25   //---FINAL ATTRIBUTES---
26  
# Line 45 | Line 44 | public class IRC__Alerter implements PluginAlerter {
44   //---CONSTRUCTORS---
45  
46      public IRC__Alerter() {
47 <                        
47 >        super();
48          // connect to the IRC server
49          _ircbot = new IRCBot();
50 +        // set it's name and start it
51 +        _ircbot.setName("client.IRC__Alerter$IRCBot");
52          _ircbot.start();
53          _startTime = System.currentTimeMillis();
53        
54          _logger.write(toString(), Logger.SYSINIT, "IRC Alerter started");
55      }
56  
57   //---PUBLIC METHODS---
58  
59 +    /**
60 +     * Implements the abstract method from the skeleton class.
61 +     * This method will attempt to send an alert
62 +     * message over the IRC channel.
63 +     *
64 +     * @param alert the alert to send
65 +     */
66      public void sendAlert(Alert alert) {
67 +        // sort out the message      
68 +        String alertType = Alert.alertLevels[alert.getLevel()];        
69 +        String message;
70 +        try {
71 +            message = _cp.getProperty(_name, "Alerter.IRC.message");
72 +        } catch (PropertyNotFoundException e) {
73 +            message = NOT_CONFIGURED;
74 +            _logger.write(toString(), Logger.WARNING, "Alerter.IRC.message value unavailable using default of " + message);
75 +        }
76 +        message = processAlertMessage(message, alert);        
77          // only send alerts if we're active
78 <        if(_active) {
79 <            ConfigurationProxy cp = ConfigurationProxy.getInstance();
80 <            String levelName = cp.getProperty(_name, "Alerter.IRC.level");
81 <            int level = StringUtils.getStringPos(levelName, Alert.alertLevels);
82 <            // only send if it's equal (or above) our level
83 <            if(alert.getLevel() >= level) {
84 <                String alertType = Alert.alertLevels[alert.getLevel()];
85 <                String thresholdType = Alert.thresholdLevels[alert.getThreshold()];
86 <                // sort out the message
70 <                String message = cp.getProperty(_name, "Alerter.IRC.message");
71 <                message = StringUtils.replaceText(message, "%level%", alertType);
72 <                message = StringUtils.replaceText(message, "%threshold%", thresholdType);
73 <                message = StringUtils.replaceText(message, "%source%", alert.getSource());
74 <                message = StringUtils.replaceText(message, "%value%", alert.getValue());
75 <                message = StringUtils.replaceText(message, "%thresholdValue%", alert.getThresholdValue());
76 <                message = StringUtils.replaceText(message, "%attributeName%", alert.getAttributeName());
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 "+ alertType + " level");
81 <                _ircbot.sendMsg(message);
82 <                _lastAlert = message;
83 <                _lastAlertTime = System.currentTimeMillis();
84 <                _alertCount ++;
85 <            }
78 >        if(_active) {          
79 >            // send the message
80 >            _logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ alertType + " level");
81 >            _ircbot.sendMsg(message);
82 >            // count sent alerts
83 >            _alertCount++;
84 >        } else {
85 >            // don't send, but keep a count that we ignored it
86 >            _ignoredCount++;
87          }
88 +        // we'll always store the "last alert", regardless
89 +        // of whether we actually display it or not
90 +        _lastAlert = message;
91 +        _lastAlertTime = System.currentTimeMillis();
92      }
93  
94      /**
95       * Overrides the {@link java.lang.Object#toString() Object.toString()}
96       * method to provide clean logging (every class should have this).
97       *
98 <     * This uses the uk.ac.ukc.iscream.util.NameFormat class
98 >     * This uses the uk.org.iscream.cms.server.util.NameFormat class
99       * to format the toString()
100       *
101       * @return the name of this class and its CVS revision
# Line 102 | Line 107 | public class IRC__Alerter implements PluginAlerter {
107              REVISION);
108      }
109  
110 <    /**
111 <     * return the String representation of what the filter does
110 >    /**
111 >     * Return the String representation of what the alerter does
112 >     *
113 >     * @return the description
114       */
115      public String getDescription(){
116          return DESC;
# Line 111 | Line 118 | public class IRC__Alerter implements PluginAlerter {
118  
119   //---PRIVATE METHODS---
120  
114    private String getTimeString(long time) {
115        String timeString = null;
116        if (time >= 60) {
117            timeString = (time / 60) + " minute(s)";
118        } else if (time >= 3600) {
119            timeString = ((time/60) / 60) + " hour(s)";
120        } else {
121            timeString = time + " second(s)";
122        }
123        return timeString;
124    }
125
121   //---ACCESSOR/MUTATOR METHODS---
122  
123 +    /**
124 +     * Returns the "friendly" name of this class. This
125 +     * is simply an accessor for _name, required due to
126 +     * inheritance issues with extending AlerterSkeleton.
127 +     *
128 +     * @return the friendly name
129 +     */
130 +    protected String getFName() {
131 +        return _name;
132 +    }
133 +
134   //---ATTRIBUTES---
135      
136      /**
# Line 150 | Line 156 | public class IRC__Alerter implements PluginAlerter {
156      /**
157       * Number of alerts sent
158       */
159 <    private long _alertCount = 0;
159 >    private int _alertCount = 0;
160      
161      /**
162 +     * Number of alerts ignored when in "stopped" mode
163 +     */
164 +    private int _ignoredCount = 0;
165 +    
166 +    /**
167       * Time of IRCBot startup
168       */
169      private long _startTime;
# Line 166 | Line 177 | public class IRC__Alerter implements PluginAlerter {
177       * can be placed here.  This name could also
178       * be changed to null for utility classes.
179       */
180 <    private String _name = "IRC Alert";
180 >    private String _name = "IRC";
181  
171    /**
172     * This holds a reference to the
173     * system logger that is being used.
174     */
175    private Logger _logger = ReferenceManager.getInstance().getLogger();
176
182   //---STATIC ATTRIBUTES---
183  
184   //---INNER CLASSES---
# Line 186 | Line 191 | public class IRC__Alerter implements PluginAlerter {
191       */
192      class IRCBot extends Thread {
193          
194 +        public static final String DEFAULT_STARTUP_NOTICE = "i-scream ircbot starting...";
195 +        
196          /**
197           * Main thread loop, this part of the class listens for
198           * messages from the server, and acts accordingly. At the
# Line 197 | Line 204 | public class IRC__Alerter implements PluginAlerter {
204              while(run) {
205                  // flag so we can stop the loop
206                  boolean doRead = true;
207 +                // get the startup notice
208 +                String startupNotice;
209 +                try {
210 +                    startupNotice = ConfigurationProxy.getInstance().getProperty(_name, "Alerter.IRC.startupNotice");
211 +                } catch (PropertyNotFoundException e) {
212 +                    startupNotice = DEFAULT_STARTUP_NOTICE;
213 +                    _logger.write(this.toString(), Logger.WARNING, "Configuration error: "+e);
214 +                }
215                  // connect to the IRC server
216                  try {
217                      connect();
218 <                    sendNotice(ConfigurationProxy.getInstance().getProperty(_name, "Alerter.IRC.startupNotice"));
218 >                    sendNotice(startupNotice);
219                  } catch(IOException e) {
220                      doRead=false;
221                      _logger.write(this.toString(), Logger.ERROR, "Error connecting: "+e);
# Line 236 | Line 251 | public class IRC__Alerter implements PluginAlerter {
251                  } catch (NumberFormatException e) {
252                      delayTime = DEFAULT_RECONNECT_DELAY;
253                      _logger.write(this.toString(), Logger.WARNING, "Erronous Alerter.IRC.reconnectDelay value in configuration using default of " + delayTime + " seconds");
254 <                } catch (org.omg.CORBA.MARSHAL e2) {
254 >                } catch (PropertyNotFoundException e) {
255                      delayTime = DEFAULT_RECONNECT_DELAY;
256                      _logger.write(this.toString(), Logger.WARNING, "Alerter.IRC.reconnectDelay value unavailable using default of " + delayTime + " seconds");
257                  }
# Line 255 | Line 270 | public class IRC__Alerter implements PluginAlerter {
270           */
271          public void sendMsg(String msg) {
272              _socketOut.println("PRIVMSG "+_channel+" :"+msg);
273 +            // wait a second before returning...
274 +            // this ensures messages can't be sent too fast
275 +            try {Thread.sleep(1000);} catch (InterruptedException e) {}
276          }
277          
278          /**
# Line 265 | Line 283 | public class IRC__Alerter implements PluginAlerter {
283           */
284          public void sendPrivMsg(String user, String msg) {
285              _socketOut.println("PRIVMSG "+user+" :"+msg);
286 +            // wait a second before returning...
287 +            // this ensures messages can't be sent too fast
288 +            try {Thread.sleep(1000);} catch (InterruptedException e) {}
289          }
290          
291          /**
# Line 275 | Line 296 | public class IRC__Alerter implements PluginAlerter {
296          public void sendAction(String msg) {
297              char esc = 001;
298              sendMsg(esc+"ACTION "+msg+esc);
299 +            // wait a second before returning...
300 +            // this ensures messages can't be sent too fast
301 +            try {Thread.sleep(1000);} catch (InterruptedException e) {}
302          }
303          
304          /**
# Line 284 | Line 308 | public class IRC__Alerter implements PluginAlerter {
308           */
309          public void sendNotice(String msg) {
310              _socketOut.println("NOTICE "+_channel+" :"+msg);
311 +            // wait a second before returning...
312 +            // this ensures messages can't be sent too fast
313 +            try {Thread.sleep(1000);} catch (InterruptedException e) {}
314          }
315          
316          /**
# Line 294 | Line 321 | public class IRC__Alerter implements PluginAlerter {
321          public void connect() throws IOException {
322              ConfigurationProxy cp = ConfigurationProxy.getInstance();
323              // setup the socket, reader and writer
324 <            String server = cp.getProperty(_name, "Alerter.IRC.IRCServer");
325 <            int port = Integer.parseInt(cp.getProperty(_name, "Alerter.IRC.IRCPort"));
324 >            String server;
325 >            int port;
326 >            try {
327 >                server = cp.getProperty(_name, "Alerter.IRC.IRCServer");
328 >                port = Integer.parseInt(cp.getProperty(_name, "Alerter.IRC.IRCPort"));
329 >            } catch (PropertyNotFoundException e) {
330 >                _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
331 >                throw new IOException("Can't get irc server details due to configuration error");
332 >            } catch (NumberFormatException e) {
333 >                _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
334 >                throw new IOException("Can't get irc server details due to malformed configuration");
335 >            }
336              _socket = new Socket(server, port);
337              _socketIn = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
338              _socketOut = new PrintWriter(_socket.getOutputStream(), true);
339              //_socketOut.println("PASS");
340              // send USER details
341 <            String user = cp.getProperty(_name, "Alerter.IRC.user");
342 <            String comment = cp.getProperty(_name, "Alerter.IRC.comment");
341 >            String user, comment;
342 >            try {
343 >                user = cp.getProperty(_name, "Alerter.IRC.user");
344 >                comment = cp.getProperty(_name, "Alerter.IRC.comment");
345 >            } catch (PropertyNotFoundException e) {
346 >                _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
347 >                throw new IOException("Can't get user details due to configuration error");
348 >            }
349              _socketOut.println("USER "+user+" 8 * :"+comment);
350              // attempt to get a nick
351 <            String nickList = cp.getProperty(_name, "Alerter.IRC.nickList");
351 >            String nickList;
352 >            try {
353 >                nickList = cp.getProperty(_name, "Alerter.IRC.nickList");
354 >            } catch (PropertyNotFoundException e) {
355 >                _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
356 >                throw new IOException("Can't get nickname due to configuration error");
357 >            }
358              StringTokenizer st = new StringTokenizer(nickList, ";");
359              boolean ok = false;
360              // try until we exhaust our list
# Line 337 | Line 386 | public class IRC__Alerter implements PluginAlerter {
386                  throw new IOException("All nicknames in use");
387              }
388              // join the channel
389 <            _channel = cp.getProperty(_name, "Alerter.IRC.channel");
389 >            try {
390 >                _channel = cp.getProperty(_name, "Alerter.IRC.channel");
391 >            } catch (PropertyNotFoundException e) {
392 >                _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
393 >                throw new IOException("Can't get channel name due to configuration error");
394 >            }
395              _socketOut.println("JOIN "+_channel);
396              // allow alerts
397              _active = true;
# Line 363 | Line 417 | public class IRC__Alerter implements PluginAlerter {
417           * Overrides the {@link java.lang.Object#toString() Object.toString()}
418           * method to provide clean logging (every class should have this).
419           *
420 <         * This uses the uk.ac.ukc.iscream.util.NameFormat class
420 >         * This uses the uk.org.iscream.cms.server.util.NameFormat class
421           * to format the toString()
422           *
423           * @return the name of this class and its CVS revision
# Line 388 | Line 442 | public class IRC__Alerter implements PluginAlerter {
442                  _socketOut.println("PONG" + line.substring(4));
443              }
444              // see if it's for us
445 <            else if(getMsg(line).startsWith(_nickname+",")
446 <                    || getMsg(line).startsWith(_nickname+":")
447 <                    || getMsg(line).startsWith(_nickname+" ")) {
445 >            else if(getMsg(line).toLowerCase().startsWith(_nickname.toLowerCase()+",") ||
446 >                    getMsg(line).toLowerCase().startsWith(_nickname.toLowerCase()+":") ||
447 >                    getMsg(line).toLowerCase().startsWith(_nickname.toLowerCase()+" ")) {
448 >                // setup some String's
449 >                String stopCommand, startCommand, timeSinceLastAlertCommand, lastAlertCommand, joinCommand;
450 >                String nickChangeCommand, versionCommand, helpCommand, statCommand, uptimeCommand;
451 >                // get the command set
452 >                try {
453 >                    stopCommand = cp.getProperty(_name, "Alerter.IRC.stopCommand");
454 >                    startCommand = cp.getProperty(_name, "Alerter.IRC.startCommand");
455 >                    timeSinceLastAlertCommand = cp.getProperty(_name, "Alerter.IRC.timeSinceLastAlertCommand");
456 >                    lastAlertCommand = cp.getProperty(_name, "Alerter.IRC.lastAlertCommand");
457 >                    joinCommand = cp.getProperty(_name, "Alerter.IRC.joinCommand");
458 >                    nickChangeCommand = cp.getProperty(_name, "Alerter.IRC.nickChangeCommand");
459 >                    versionCommand = cp.getProperty(_name, "Alerter.IRC.versionCommand");
460 >                    helpCommand = cp.getProperty(_name, "Alerter.IRC.helpCommand");
461 >                    statCommand = cp.getProperty(_name, "Alerter.IRC.statCommand");
462 >                    uptimeCommand = cp.getProperty(_name, "Alerter.IRC.uptimeCommand");
463 >                } catch (PropertyNotFoundException e) {
464 >                    _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
465 >                    // lets bail from handling this line...
466 >                    // ...it's gonna be hard without a command set!
467 >                    return;
468 >                }
469 >                
470                  // we have a message for us
471                  String message = getMsg(line).substring(_nickname.length());
472 <                if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.stopCommand"))!=-1) {
472 >                if(message.indexOf(stopCommand)!=-1) {
473                      _active = false;
474                      sendMsg(getMsgSender(line)+", alerts have been stopped");
475                  }
476 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.startCommand"))!=-1) {
476 >                else if(message.indexOf(startCommand)!=-1) {
477                      _active = true;
478                      sendMsg(getMsgSender(line)+", alerts have been activated");
479                  }
480                  // this needs to go here if it contains the same words as the lastAlertCommand
481 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.timeSinceLastAlertCommand"))!=-1) {
481 >                else if(message.indexOf(timeSinceLastAlertCommand)!=-1) {
482                      if(_lastAlertTime != -1) {
483                          long uptime = (System.currentTimeMillis() - _lastAlertTime) / 1000;
484                          String uptimeText = DateUtils.formatTime(uptime, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs");
# Line 412 | Line 488 | public class IRC__Alerter implements PluginAlerter {
488                          sendMsg(getMsgSender(line)+", I've never sent an alert!");
489                      }
490                  }
491 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.lastAlertCommand"))!=-1) {
491 >                else if(message.indexOf(lastAlertCommand)!=-1) {
492                      if(_lastAlertTime != -1) {
493                          String date = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.UK).format(new Date(_lastAlertTime));
494                          sendMsg(getMsgSender(line)+", last alert was at "+date+"; "+_lastAlert);
# Line 422 | Line 498 | public class IRC__Alerter implements PluginAlerter {
498                      }
499                      
500                  }
501 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.joinCommand"))!=-1) {
502 <                    String joinCmd = cp.getProperty(_name, "Alerter.IRC.joinCommand");
501 >                else if(message.indexOf(joinCommand)!=-1) {
502 >                    String joinCmd = joinCommand;
503                      String newChan = message.substring(message.indexOf(joinCmd) + joinCmd.length() + 1);
504                      int endOfChan = newChan.indexOf(" ");
505                      if(endOfChan == -1) {
506                          endOfChan = newChan.length();
507                      }
508                      newChan = newChan.substring(0, endOfChan);
509 <                    sendMsg(getMsgSender(line)+", okay, I'm off to "+newChan);
510 <                    _socketOut.println("PART "+_channel);
511 <                    _socketOut.println("JOIN "+newChan);
512 <                    _channel = newChan;
509 >                    if(newChan.equals(_channel)) {
510 >                        sendMsg(getMsgSender(line)+", I'm already on "+newChan+"!");
511 >                    } else {
512 >                        sendMsg(getMsgSender(line)+", okay, I'm off to "+newChan);
513 >                        _socketOut.println("PART "+_channel);
514 >                        _socketOut.println("JOIN "+newChan);
515 >                        _channel = newChan;
516 >                    }
517                  }
518 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.nickChangeCommand"))!=-1) {
519 <                    String nickChangeCmd = cp.getProperty(_name, "Alerter.IRC.nickChangeCommand");
518 >                else if(message.indexOf(nickChangeCommand)!=-1) {
519 >                    String nickChangeCmd = nickChangeCommand;
520                      String newNick = message.substring(message.indexOf(nickChangeCmd) + nickChangeCmd.length() + 1);
521                      int endOfNick = newNick.indexOf(" ");
522                      if(endOfNick == -1) {
# Line 447 | Line 527 | public class IRC__Alerter implements PluginAlerter {
527                      _socketOut.println("NICK "+newNick);
528                      _nickname = newNick;
529                  }
530 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.versionCommand"))!=-1) {
530 >                else if(message.indexOf(versionCommand)!=-1) {
531                      sendMsg(getMsgSender(line)+", I am version "+REVISION.substring(11, REVISION.length() -2)+" of the i-scream alerting bot");
532                  }
533 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.helpCommand"))!=-1) {
533 >                else if(message.indexOf(helpCommand)!=-1) {
534                      sendPrivMsg(getMsgSender(line), "Hello, I am the i-scream alerting bot version "+REVISION.substring(11, REVISION.length() -2));
535                      sendPrivMsg(getMsgSender(line), "I understand the following commands;");
536 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.stopCommand"));
537 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.startCommand"));
538 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.lastAlertCommand"));
539 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.joinCommand"));
540 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.nickChangeCommand"));
541 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.statCommand"));
542 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.uptimeCommand"));
543 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.timeSinceLastAlertCommand"));
544 <                    sendPrivMsg(getMsgSender(line), cp.getProperty(_name, "Alerter.IRC.helpCommand"));
536 >                    sendPrivMsg(getMsgSender(line), stopCommand);
537 >                    sendPrivMsg(getMsgSender(line), startCommand);
538 >                    sendPrivMsg(getMsgSender(line), lastAlertCommand);
539 >                    sendPrivMsg(getMsgSender(line), joinCommand);
540 >                    sendPrivMsg(getMsgSender(line), nickChangeCommand);
541 >                    sendPrivMsg(getMsgSender(line), statCommand);
542 >                    sendPrivMsg(getMsgSender(line), uptimeCommand);
543 >                    sendPrivMsg(getMsgSender(line), timeSinceLastAlertCommand);
544 >                    sendPrivMsg(getMsgSender(line), helpCommand);
545                  }
546 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.statCommand"))!=-1) {
547 <                    sendMsg(getMsgSender(line)+", I have sent a total of "+_alertCount+" alerts!");
546 >                else if(message.indexOf(statCommand)!=-1) {
547 >                    sendMsg(getMsgSender(line)+", I have sent a total of "+_alertCount+" alerts, and ignored a total of "+_ignoredCount+"!");
548                  }
549 <                else if(message.indexOf(cp.getProperty(_name, "Alerter.IRC.uptimeCommand"))!=-1) {
549 >                else if(message.indexOf(uptimeCommand)!=-1) {
550                      long uptime = (System.currentTimeMillis() - _startTime) / 1000;
551                      String uptimeText = DateUtils.formatTime(uptime, "%DAYS% days, %HOURS% hours, %MINS% mins, and %SECS% secs");
552                      sendMsg(getMsgSender(line)+", I have been running for "+uptimeText);
553                  }
554 +                else if(message.indexOf("ping")!=-1) {
555 +                    sendMsg("pong");
556 +                }
557                  else if(message.indexOf("do a jibble dance")!=-1) {
558                      // little joke :)
559                      sendAction("jives to the funky beat shouting \"ii--screeeaaammm\"");
560                  }
561                  else {
562 <                    sendMsg(getMsgSender(line)+", "+cp.getProperty(_name, "Alerter.IRC.rejectMessage"));
562 >                    String rejectMessage = NOT_CONFIGURED;
563 >                    try {
564 >                        rejectMessage = cp.getProperty(_name, "Alerter.IRC.rejectMessage");
565 >                    } catch(PropertyNotFoundException e) {
566 >                        _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
567 >                    }
568 >                    sendMsg(getMsgSender(line)+", "+rejectMessage);
569                  }
570              }
571              else if(line.indexOf(_nickname)!=-1 && line.indexOf(_channel)!=-1 && line.indexOf("KICK")!=-1) {
572                  sendPrivMsg(getMsgSender(line), "That wasn't a nice thing to do...");
573 <                _channel = cp.getProperty(_name, "Alerter.IRC.channel");
573 >                try {
574 >                    _channel = cp.getProperty(_name, "Alerter.IRC.channel");
575 >                } catch(PropertyNotFoundException e) {
576 >                    _logger.write(this.toString(), Logger.ERROR, "Configuration error: "+e);
577 >                }
578                  _socketOut.println("JOIN "+_channel);
579              }
580          }
# Line 547 | Line 640 | public class IRC__Alerter implements PluginAlerter {
640           * A reminder of our current nickname...
641           */
642          private String _nickname;
643 +        
644 +        /**
645 +         * This holds a reference to the
646 +         * system logger that is being used.
647 +         */
648 +        protected Logger _logger = ReferenceManager.getInstance().getLogger();
649          
650      }
651  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines