| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 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:
 |