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