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;