html/u.pl


   1 use vars qw($VERSION %IRSSI);
   2 
   3 use Irssi 20020120;
   4 $VERSION = "1.2";
   5 %IRSSI = (
   6     authors	=> "Michiel",
   7     contact	=> "michiel\@dotgeek.org",
   8     name	=> "List nicks in channel",
   9     description	=> "BitchX /u clone. Use /u <regex> to show all nicks (including ident\@host) matching regex in the current channel.",
  10     license	=> "GNU GPL",
  11     url		=> "http://otoria.freecode.nl/~michiel/u.pl",
  12     changed	=> "Thu Jun  3 11:04:27 CEST 2004",
  13 );
  14 
  15 
  16 sub cmd_u
  17 {
  18 	my ($data, $server, $channel) = @_;
  19 	my @nicks;
  20 	my $space;
  21 	my $msg;
  22 	my $match;
  23 	my $nick;
  24 
  25 	if ($channel->{type} ne "CHANNEL")
  26 	{
  27 		Irssi::print("You are not on a channel");
  28 		return;
  29 	}
  30 
  31 	@nicks = $channel->nicks();
  32 
  33 	$space = ' 'x50;
  34 
  35 	foreach $nick (@nicks)
  36 	{
  37 
  38 		# user status?
  39 		$msg = ($nick->{serverop} ? '[*' : '[ ');
  40 		$msg .= ($nick->{other} ? chr($nick->{other}) : ($nick->{op} ? '@' : ($nick->{halfop} ? '%' : ($nick->{voice} ? '+' : ' '))));
  41 
  42 		# if nick is too long, cut it off
  43 		if (length($nick->{nick}) > 10)
  44 		{
  45 			$msg .= substr($nick->{nick}, 0, 10)."] ";
  46 		}
  47 		else # if it is too short, add some spaces
  48 		{
  49 			$msg .= $nick->{nick}.substr($space, 0, 10-length($nick->{nick}))."] ";
  50 		}
  51 
  52 		# if host is too long, cut it off
  53 		if (length($nick->{host}) > 50)
  54 		{
  55 			$msg .= '['.substr($nick->{host}, 0, 50).']';
  56 		}
  57 		else # if it is too short, add some spaces
  58 		{
  59 			$msg .= '['.$nick->{host}.substr($space, 0, 50-length($nick->{host})).']';
  60 		}
  61 		
  62 		$match = $nick->{nick}.'!'.$nick->{host}; # For regexp matching
  63 
  64 		$channel->print($msg) if $match =~ /$data/i;
  65 		
  66 	}
  67 }
  68 
  69 Irssi::command_bind('u','cmd_u');