html/autoreminder.pl


   1 #####################
   2 #
   3 # irssi autoreminder script.
   4 # Copyright (C) Terry Lewis
   5 # Terry Lewis <mrkennie@kryogenic.co.uk>
   6 #
   7 # This program is free software; you can redistribute it and/or
   8 # modify it under the terms of the GNU General Public License
   9 # as published by the Free Software Foundation; either version 2
  10 # of the License, or (at your option) any later version.
  11 #
  12 # This program is distributed in the hope that it will be useful,
  13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 # GNU General Public License for more details.
  16 #
  17 # You should have received a copy of the GNU General Public License
  18 # along with this program; if not, write to the Free Software
  19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20 #
  21 #####################
  22 #
  23 # Auto reminder script for irssi
  24 # This is really a first attempt at an irssi script,
  25 # really more of a hack I suppose, to auto remind 
  26 # someone at certain intervals.
  27 # It will not remind at every interval defined, so its 
  28 # kinda less annoying, but hopefully effective.
  29 #
  30 # To start:
  31 #     /start <nick> <"reminder message"> [interval] 
  32 #     (<> = required, [] = optional)
  33 # reminder Message must use "" parenthasis.
  34 #
  35 # to stop reminding use /stop
  36 #
  37 # I know the code is not fantastic but I will appreciate
  38 # any patches for improvements, just mail them to me if
  39 # you do improve it :)
  40 #
  41 # I use a rather nice script called cron.pl by Piotr 
  42 # Krukowiecki which I found at http://www.irssi.org/scripts/
  43 # so I can start and stop the script at certain times.
  44 # I hope someone finds this useful, Enjoy =)
  45 #
  46 #####################
  47 
  48 use strict;
  49 use vars qw($VERSION %IRSSI);
  50 
  51 use Irssi;
  52 $VERSION = '0.01';
  53 %IRSSI = (
  54     authors     => 'Terry Lewis',
  55     contact     => 'terry@kryogenic.co.uk',
  56     name        => 'Auto Reminder',
  57     description => 'This script ' .
  58                    'Reminds people ' .
  59                    'to do stuff! :)',
  60     license     => 'GPLv2',
  61 );
  62 
  63 my($timeout_tag, $timeout, $state, @opts, $date, @time, @hour, $start_hour, $end_hour);
  64 
  65 
  66 #default state 0 meaning we are not started yet
  67 $state = 0;
  68 
  69 
  70 # /start <nick> <"message"> [interval]
  71 sub cmd_start {
  72     if($state != 1){
  73         my($data,$server,$channel) = @_;
  74         @opts = split(/\s\B\"(.*)\b\"/, $data);
  75 	
  76 	if($opts[0] ne ''){  
  77 	    if($opts[1] ne ''){
  78 	        if($opts[0] =~ /\s/g){
  79 	            Irssi::print("Invalid username");
  80             	}elsif($opts[1] eq ''){
  81 	            Irssi::print("You must type a message to send");
  82                 }else{
  83 	        
  84 	            $state = 1;
  85 
  86 	            if($opts[2] =~ /[0-9]/g){
  87 		        $opts[2] =~ s/\s//g;
  88 		        $timeout = $opts[2];
  89                         timeout_init($timeout);
  90 	            }else{
  91 		        Irssi::print("Invalid interval value, using defaults (15mins)") unless $opts[2] eq '';
  92 		        $timeout = "900000";
  93 		        timeout_init($timeout);
  94 		    }
  95 		    Irssi::print "Bugging $opts[0] with message \"$opts[1]\" every \"$timeout ms\"";
  96 	        }
  97             }else{
  98 	         Irssi::print ("Usage: /start nick \"bug_msg\" [interval] (interval is optional)");
  99 	    }
 100 	}else{
 101 	    Irssi::print ("Usage: /start nick \"bug_msg\" [interval] (interval is optional)");
 102 	}
 103 	
 104     }else{
 105         Irssi::print "Already started";
 106     }
 107 }
 108 
 109 # /stop
 110 sub cmd_stop {
 111     if($state == 1){
 112         $state = 0;
 113 	Irssi::print "No longer bugging $opts[0]";
 114 	Irssi::timeout_remove($timeout_tag);
 115 	$timeout_tag = undef;
 116     }else{
 117       Irssi::print "Not started";
 118     }
 119 }
 120 
 121 sub timeout_init {
 122     if($state == 1){
 123     
 124         Irssi::timeout_remove($timeout_tag);
 125         $timeout_tag = undef;
 126         $timeout_tag = Irssi::timeout_add($timeout, "remind_them", "");
 127     }
 128 }
 129 
 130 sub remind_them {
 131     if($state == 1){
 132         my (@servers) = Irssi::servers();    
 133         
 134 	# make it random, so we dont remind at every defined interval
 135         my $time = rand()*3;
 136 
 137         if($time < 1){
 138             $servers[0]->command("MSG $opts[0] Hi, this is an automated reminder, $opts[1]");
 139 	}
 140         timeout_init($timeout);
 141     }
 142 }
 143 
 144 
 145 Irssi::command_bind('start', \&cmd_start);
 146 Irssi::command_bind('stop', \&cmd_stop);
 147