1use strict;
2use vars qw($VERSION %IRSSI);
3
4use Irssi;
5$VERSION = '1.00';
6%IRSSI = (
7    authors     => 'Erik Fears',
8    contact     => 'strtok@softhome.net',
9    name        => 'whos',
10    description => 'This script allows ' .
11                   'you to view all users ' .
12                   'on a specific server.',
13    license     => 'GPL',
14);
15
16Irssi::command_bind('whos', \&cmd_whos);
17Irssi::signal_add('redir whos', \&sig_whos);
18Irssi::signal_add('redir whosend', \&sig_whosend);
19
20Irssi::theme_register([
21   'whos' => '%#{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}',
22   'whos_end' => 'End of /WHOS list'
23]);
24
25#server name given in /whos if any
26my $SERVER_NAME;
27
28#WHOS <CHANNEL>
29sub cmd_whos
30{
31   my @parv;
32   my ($data, $server, $witem) = @_;
33   my $chan;
34
35   if( !($witem && $witem->{type} eq "CHANNEL") )
36   {
37      return;
38   }
39
40   $chan = $witem->{name};
41
42   @parv = split(/\s+/,$data);
43
44   $server->redirect_event("who", 1, $chan, 0, undef, {
45      "event 352" => "redir whos",
46      "event 315" => "redir whosend",
47      "" => "event empty"}
48   );
49
50
51   if(length($parv[0]) <= 0)
52   {
53      $SERVER_NAME = $server->{tag};
54   }
55   else
56   {
57      $SERVER_NAME = $parv[0];
58   }
59
60   $server->send_raw("WHO " . $chan);
61}
62
63#strtok #ribena strtok not.deprecated irc.choopa.net strtok H@ :0 (char *, const char *);
64
65
66sub sig_whos
67{
68   my @who;
69   my ($server, $msg, $nick, $address, $target) = @_;
70
71   @who = split(/\s+/,$msg,9);
72
73   if($who[4] =~ /$SERVER_NAME/)
74   {
75      Irssi::printformat(MSGLEVEL_CRAP, 'whos',$who[1], $who[5],$who[6], $who[7], $who[2], $who[3], $who[8]);
76   }
77}
78
79sub sig_whosend
80{
81   my ($server, $msg, $nick, $address, $target) = @_;
82   Irssi::printformat(MSGLEVEL_CRAP, 'whos_end');
83}
84