summaryrefslogtreecommitdiffstats
path: root/scripts/autolimit.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/autolimit.pl')
-rw-r--r--scripts/autolimit.pl53
1 files changed, 53 insertions, 0 deletions
diff --git a/scripts/autolimit.pl b/scripts/autolimit.pl
new file mode 100644
index 0000000..d77666c
--- /dev/null
+++ b/scripts/autolimit.pl
@@ -0,0 +1,53 @@
+use strict;
+use Irssi 20010920.0000 ();
+use vars qw($VERSION %IRSSI);
+$VERSION = "1.01";
+%IRSSI = (
+ authors => 'David Leadbeater',
+ contact => 'dgl@dgl.cx',
+ name => 'autolimit',
+ description => 'does an autolimit for a channel',
+ license => 'GNU GPLv2 or later',
+ url => 'http://irssi.dgl.cx/',
+);
+
+my $sname=$IRSSI{name};
+my $channel;
+my $offset;
+my $tolerence;
+my $time;
+my $timeouttag;
+
+sub sig_setup_changed {
+ $channel=Irssi::settings_get_str($sname.'_channel');
+ $offset=Irssi::settings_get_int($sname.'_offset');
+ $tolerence=Irssi::settings_get_int($sname.'_tolerence');
+ $time=Irssi::settings_get_int($sname.'_time');
+ if (defined $timeouttag) {
+ Irssi::timeout_remove($timeouttag);
+ }
+ $timeouttag = Irssi::timeout_add($time * 1000, 'checklimit','');
+}
+
+sub checklimit {
+ my $c = Irssi::channel_find($channel);
+ return unless ref $c;
+ return unless $c->{chanop};
+ my $users = scalar @{[$c->nicks]};
+
+ if(($c->{limit} <= ($users+$offset-$tolerence)) ||
+ ($c->{limit} > ($users+$offset+$tolerence))) {
+ $c->{server}->send_raw("MODE $channel +l " . ($users+$offset));
+ }
+}
+
+Irssi::signal_add('setup changed', \&sig_setup_changed);
+
+Irssi::settings_add_str($sname, $sname.'_channel', "#channel");
+Irssi::settings_add_int($sname, $sname.'_offset', 5);
+Irssi::settings_add_int($sname, $sname.'_tolerence', 2);
+Irssi::settings_add_int($sname, $sname.'_time', 60);
+
+sig_setup_changed();
+
+# vim:set ts=3 sw=3 expandtab: