diff options
Diffstat (limited to 'scripts/events.pl')
| -rw-r--r-- | scripts/events.pl | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/scripts/events.pl b/scripts/events.pl new file mode 100644 index 0000000..4886fb7 --- /dev/null +++ b/scripts/events.pl @@ -0,0 +1,54 @@ +use strict; +use vars qw($VERSION %IRSSI); + +use Irssi; +use Irssi::Irc; + +$VERSION = '1.0'; +%IRSSI = ( +    authors     => 'Taneli Kaivola', +    contact     => 'dist@sci.fi', +    name        => 'Extended events', +    description => 'Expand "event mode" and emit "event mode {channel,user,server} *"', +    license     => 'GPLv2', +    url         => 'http://scripts.irssi.de', +    changed     => 'Mon May 20 04:04:47 EEST 2002', +); + +sub event_mode { +  my($server,$args,$nick,$addr)=@_; +  my($target,$modes,$modeparms)=split(" ",$args,3); +  my(@modeparm)=split(/ /,$modeparms); +  my($target_type)="other"; +  my($chan); +  my($modetype)=""; +  my($pos)=0; + +  if($target =~ /^#/) { +    $chan=$server->channel_find($target); +    $target_type="channel"; +  } + +  #emit $chan $mode $param +  if($target_type eq "channel") { +    foreach my $mode (split(//,$modes)) { +      if($mode eq "+" || $mode eq "-") { +        $modetype=$mode; +      } elsif($mode =~ /[vbkeIqhdOo]/ || ($mode eq "l" && $modetype eq "+")) { # Thanks friends.pl +        Irssi::signal_emit("event mode $target_type ".$modetype.$mode,$chan,$nick,$modeparm[$pos]); +        $pos++; +      } else { +        Irssi::signal_emit("event mode $target_type ".$modetype.$mode,$chan,$nick); +      } +    } +  } else { +    # Some user/server/other? mode +    # print "Target: [$target] Modes: [$modes] Modeparms: [$modeparms]"; +  } +} +Irssi::signal_add_last("event mode",\&event_mode); + +# Signals you can catch after loading this script: +# "event mode channel {+o,-o,+v,-v,+b,-b,+k,+e,-e,+I,-I,+q,-q,+h,-h,+d,-d,+O,-O,+l}" +# "event mode user {}" (Maybe soon) +# "event mode server {}" (Maybe soon) | 
