html/chanfull.pl


   1 #!/usr/bin/perl
   2 
   3 use strict;
   4 use vars qw($VERSION %IRSSI);
   5 
   6 $VERSION = "2003011700";
   7 %IRSSI = (
   8     authors     => "Joern 'Wulf' Heissler",
   9     contact     => "wulf\@wulf.eu.org",
  10     name        => "chanfull",
  11     description => "Notifies the user when some channel limit is reached",
  12     license     => "GPLv2",
  13     url         => "",
  14     changed     => "$VERSION"
  15 );
  16 
  17 use Irssi;
  18 
  19 # draws a nice box, author is Stefan 'tommie' Tomanek
  20 sub draw_box ($$$) {
  21     my ($title, $text, $footer) = @_;
  22     my $box = ''; 
  23     $box .= '%R,--[%n%9%U'.$title.'%U%9%R]%n'."\n";
  24     foreach (split(/\n/, $text)) {
  25         $box .= '%R|%n '.$_."\n";
  26     }
  27     $box .= '%R`--<%n'.$footer.'%R>->%n';
  28     return $box; 
  29 }
  30 
  31 sub event_message_join ($$$$) {
  32 	my ($server, $channel, $nick, $address) = @_;
  33 	my $c=Irssi::channel_find($channel);
  34 	my $users=scalar @{[$c->nicks]};
  35 	return if($c->{limit} == 0);
  36 	my $left = $c->{limit} - $users;
  37 	if($left < 4) {
  38 		if($left<=0) {
  39 			$c->print(draw_box('warning', 'Channel is full!!', 'chanfull'), MSGLEVEL_CLIENTCRAP);
  40 		} else {
  41 			$c->print(draw_box('warning', 'Channel is nearly full! ('.$left.' client'.(($left==1)?'':'s').' left)', 'chanfull'), MSGLEVEL_CLIENTCRAP);
  42 		}
  43 	}
  44 }
  45 
  46 Irssi::signal_add('message join', 'event_message_join');
  47 
  48 Irssi::print '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded.', MSGLEVEL_CLIENTCRAP;