html/events.pl


   1 use strict;
   2 use vars qw($VERSION %IRSSI);
   3 
   4 use Irssi;
   5 use Irssi::Irc;
   6 
   7 $VERSION = '1.0';
   8 %IRSSI = (
   9     authors     => 'Taneli Kaivola',
  10     contact     => 'dist@sci.fi',
  11     name        => 'Extended events',
  12     description => 'Expand "event mode" and emit "event mode {channel,user,server} *"',
  13     license     => 'GPLv2',
  14     url         => 'http://scripts.irssi.de',
  15     changed     => 'Mon May 20 04:04:47 EEST 2002',
  16 );
  17 
  18 sub event_mode {
  19   my($server,$args,$nick,$addr)=@_;
  20   my($target,$modes,$modeparms)=split(" ",$args,3);
  21   my(@modeparm)=split(/ /,$modeparms);
  22   my($target_type)="other";
  23   my($chan);
  24   my($modetype)="";
  25   my($pos)=0;
  26 
  27   if($target =~ /^#/) {
  28     $chan=$server->channel_find($target);
  29     $target_type="channel";
  30   }
  31 
  32   #emit $chan $mode $param
  33   if($target_type eq "channel") {
  34     foreach my $mode (split(//,$modes)) {
  35       if($mode eq "+" || $mode eq "-") {
  36         $modetype=$mode;
  37       } elsif($mode =~ /[vbkeIqhdOo]/ || ($mode eq "l" && $modetype eq "+")) { # Thanks friends.pl
  38         Irssi::signal_emit("event mode $target_type ".$modetype.$mode,$chan,$nick,$modeparm[$pos]);
  39         $pos++;
  40       } else {
  41         Irssi::signal_emit("event mode $target_type ".$modetype.$mode,$chan,$nick);
  42       }
  43     }
  44   } else {
  45     # Some user/server/other? mode
  46     # print "Target: [$target] Modes: [$modes] Modeparms: [$modeparms]";
  47   }
  48 }
  49 Irssi::signal_add_last("event mode",\&event_mode);
  50 
  51 # Signals you can catch after loading this script:
  52 # "event mode channel {+o,-o,+v,-v,+b,-b,+k,+e,-e,+I,-I,+q,-q,+h,-h,+d,-d,+O,-O,+l}"
  53 # "event mode user {}" (Maybe soon)
  54 # "event mode server {}" (Maybe soon)