1#!/usr/local/bin/perl
2
3use strict;
4use 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
17use Irssi;
18
19# draws a nice box, author is Stefan 'tommie' Tomanek
20sub 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
31sub 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
46Irssi::signal_add('message join', 'event_message_join');
47
48Irssi::print '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded.', MSGLEVEL_CLIENTCRAP;
49