diff options
Diffstat (limited to '')
-rw-r--r-- | scripts/whos.pl | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/scripts/whos.pl b/scripts/whos.pl new file mode 100644 index 0000000..96eb898 --- /dev/null +++ b/scripts/whos.pl @@ -0,0 +1,109 @@ +use strict; +use vars qw($VERSION %IRSSI); + +use Irssi; +$VERSION = '1.01'; +%IRSSI = ( + authors => 'Erik Fears', + contact => 'strtok@softhome.net', + name => 'whos', + description => 'This script allows ' . + 'you to view all users ' . + 'on a specific server.', + license => 'GPL', +); + +Irssi::command_bind('whos', \&cmd_whos); +Irssi::command_bind('whoss', \&cmd_whoss); +Irssi::signal_add('redir whos', \&sig_whos); +Irssi::signal_add('redir whosend', \&sig_whosend); + +Irssi::theme_register([ + 'whos' => '%#{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}', + 'whos_end' => 'End of /WHOS list', + 'whos_hil' => '{hilight $0} $1' +]); + +#results +my %res; + +#WHOS <CHANNEL> +sub cmd_whos +{ + my @parv; + my ($data, $server, $witem) = @_; + my $chan; + if (exists $res{$server->{tag}}) { + $res{$server->{tag}}=(); + } + $res{$server->{tag}}->{result}=(); + $res{$server->{tag}}->{server}=(); + $res{$server->{tag}}->{regex}=''; + + if( !($witem && $witem->{type} eq "CHANNEL") ) + { + return; + } + + $chan = $witem->{name}; + + @parv = split(/\s+/,$data); + + $server->redirect_event("who", 1, $chan, 0, undef, { + "event 352" => "redir whos", + "event 315" => "redir whosend", + "" => "event empty"} + ); + + + if(length($parv[0]) <= 0) + { + $res{$server->{tag}}->{regex}=''; + } + else + { + $res{$server->{tag}}->{regex}=$parv[0]; + } + + $server->send_raw("WHO " . $chan); +} + +#strtok #ribena strtok not.deprecated irc.choopa.net strtok H@ :0 (char *, const char *); + + +sub sig_whos +{ + my @who; + my ($server, $msg, $nick, $address, $target) = @_; + + @who = split(/\s+/,$msg,9); + + $res{$server->{tag}}->{result}->{$who[5]}=[@who]; +} + +sub sig_whosend +{ + my ($server, $msg, $nick, $address, $target) = @_; + if ($res{$server->{tag}}->{regex} eq '') { + $res{$server->{tag}}->{regex}= $nick; + } + Irssi::printformat(MSGLEVEL_CRAP,'whos_hil','regex:',$res{$server->{tag}}->{regex}); + foreach (sort keys %{$res{$server->{tag}}->{result}}) { + my @r=@{$res{$server->{tag}}->{result}->{$_}}; + if ($r[4] =~ m/$res{$server->{tag}}->{regex}/ ) { + Irssi::printformat(MSGLEVEL_CRAP,'whos',@r[1,5,6,7,2,3,8]); + } + $res{$server->{tag}}->{server}->{$r[4]}=1; + } + Irssi::printformat(MSGLEVEL_CRAP, 'whos_end'); +} + +sub cmd_whoss { + my ($args, $server, $witem) = @_; + Irssi::printformat(MSGLEVEL_CRAP,'whos_hil','servers:'); + foreach (sort keys %{$res{$server->{tag}}->{server}}) { + Irssi::print($_,MSGLEVEL_CRAP); + } +} + +# vim:set ts=3 sw=3 expandtab: |