1use strict; 2use vars qw($VERSION %IRSSI); 3 4use Irssi; 5use 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 18sub 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} 49Irssi::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) 55