summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorailin-nemui2017-04-04 09:37:33 +0200
committerGitHub2017-04-04 09:37:33 +0200
commit9dc91df129a675e9198d7b7583308d6f0fd35e31 (patch)
treed6517747d6db5a3641fcf573fe2df99b069febc6 /scripts
parent8f4129f7212ecb4a2397aaf316d590c5c425e911 (diff)
parent7c018c5e88d5a22256a14651a7545c47d977c6a9 (diff)
downloadscripts.irssi.org-9dc91df129a675e9198d7b7583308d6f0fd35e31.tar.bz2
Merge pull request #386 from bw1/kicks
[kicks][crit] use strict; open
Diffstat (limited to 'scripts')
-rw-r--r--scripts/kicks.pl235
1 files changed, 121 insertions, 114 deletions
diff --git a/scripts/kicks.pl b/scripts/kicks.pl
index 9df9314..76e87ea 100644
--- a/scripts/kicks.pl
+++ b/scripts/kicks.pl
@@ -4,76 +4,77 @@
# - http://www.penguin-breeder.org/irssi/
#<scriptinfo>
+use strict;
use vars qw($VERSION %IRSSI);
use Irssi 20020120;
-$VERSION = "0.26";
+$VERSION = "0.27";
%IRSSI = (
- authors => "c0ffee",
- contact => "c0ffee\@penguin-breeder.org",
- name => "Various kick and ban commands",
- description => "Enhances /k /kb and /kn with some nice options.",
- license => "Public Domain",
- url => "http://www.penguin-breeder.org/irssi/",
- changed => "Tue Nov 14 23:19:19 CET 2006",
+ authors => "c0ffee",
+ contact => "c0ffee\@penguin-breeder.org",
+ name => "Various kick and ban commands",
+ description => "Enhances /k /kb and /kn with some nice options.",
+ license => "Public Domain",
+ url => "http://www.penguin-breeder.org/irssi/",
+ changed => "2017-03-31",
);
#</scriptinfo>
my %kickreasons = (
- default => ["random kick victim",
- "no",
- "are you stupid?",
- "i don't like you, go away!",
- "oh, fsck off",
- "waste other ppls time, elsewhere",
- "get out and STAY OUT",
- "don't come back",
- "no thanks",
- "on popular demand, you are now leaving the channel",
- "\$N",
- "*void*",
- "/part is the command you're looking for",
- "this is the irssi of borg. your mIRC will be assimilated. resistance is futile.",
- "Autokick! mwahahahah!"
- ],
- none => [""],
- topic => ["\$topic"],
+ default => ["random kick victim",
+ "no",
+ "are you stupid?",
+ "i don't like you, go away!",
+ "oh, fsck off",
+ "waste other ppls time, elsewhere",
+ "get out and STAY OUT",
+ "don't come back",
+ "no thanks",
+ "on popular demand, you are now leaving the channel",
+ "\$N",
+ "*void*",
+ "/part is the command you're looking for",
+ "this is the irssi of borg. your mIRC will be assimilated. resistance is futile.",
+ "Autokick! mwahahahah!"
+ ],
+ none => [""],
+ topic => ["\$topic"],
);
# fine tune the script for different chatnets
-# cmdline_k regular expr that matches a correct cmdline for /k
-# req_chan 0/1 whether the channel is always part of the cmdline
-# num_nicks number of nicks ... (-1 = inf)
-# start_with_dash 0/1 whether the normal cmdline may start with a dash
-# match_chn matches channels
-# match_n match nicks
-# match_reason matches reasons
-# default_reason reason to give as "no reason"
+# cmdline_k regular expr that matches a correct cmdline for /k
+# req_chan 0/1 whether the channel is always part of the cmdline
+# num_nicks number of nicks ... (-1 = inf)
+# start_with_dash 0/1 whether the normal cmdline may start with a dash
+# match_chn matches channels
+# match_n match nicks
+# match_reason matches reasons
+# default_reason reason to give as "no reason"
my %cfg = (
- IRC => {
- cmdline_k => '\s*([!#+&][^\x0\a\n\r ]*)\s+[-\[\]\\\\\`{}\w_|^\'~]+(,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+\S.*',
- req_chan => 0,
- num_nicks => 3, # actually, /k takes more, but
- # normal irc servers only take
- # three in a row
- start_with_dash => 1,
- match_chn => '([!#+&][^\x0\a\n\r ]*)\s',
- match_n => '(?:^|\s+)([-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\']+)*)',
- match_reason => '^\s*[!#+&][^\x0\a\n\r ]*\s+[-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+(\S.*)$',
- default_reason => '$N'
- },
-
- SILC => {
- cmdline_k => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+\s+\S.*',
- req_chan => 1,
- num_nicks => 1,
- start_with_dash => 0,
- match_chn => '\s*([^\x0-\x20\*\?,@!]+)\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*',
- match_n => '\s*(?:[^\x0-\x20\*\?,@!]+\s+)?([^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*)',
- match_reason => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*\s+(\S.*)',
- default_reason => '$N'
- }
+ IRC => {
+ cmdline_k => '\s*([!#+&][^\x0\a\n\r ]*)\s+[-\[\]\\\\\`{}\w_|^\'~]+(,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+\S.*',
+ req_chan => 0,
+ num_nicks => 3, # actually, /k takes more, but
+ # normal irc servers only take
+ # three in a row
+ start_with_dash => 1,
+ match_chn => '([!#+&][^\x0\a\n\r ]*)\s',
+ match_n => '(?:^|\s+)([-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\']+)*)',
+ match_reason => '^\s*[!#+&][^\x0\a\n\r ]*\s+[-\[\]\\\\\`{}\w_|^\'~]+(?:,[-\[\]\\\\\`{}\w_|^\'~]+)*\s+(\S.*)$',
+ default_reason => '$N'
+ },
+
+ SILC => {
+ cmdline_k => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+\s+\S.*',
+ req_chan => 1,
+ num_nicks => 1,
+ start_with_dash => 0,
+ match_chn => '\s*([^\x0-\x20\*\?,@!]+)\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*',
+ match_n => '\s*(?:[^\x0-\x20\*\?,@!]+\s+)?([^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*)',
+ match_reason => '\s*[^\x0-\x20\*\?,@!]+\s+[^\x0-\x20\*\?,@!]+(?:,[^\x0-\x20\*\?,@!]+)*\s+(\S.*)',
+ default_reason => '$N'
+ }
);
sub initialize {
@@ -83,51 +84,53 @@ sub initialize {
my ($basedir) = $conf_file =~ /^(.*\/).*?/;
if (-f $conf_file) {
- open CONF, $conf_file;
-
- while (<CONF>) {
- $line++;
-
- next if /^\s*#/;
-
- chomp;
- ($key, $reasons) = /^(\S+)\s+(.+)\s*$/ or next;
-
- if ($reasons =~ /\`([^\s]+).*?\`/) {
- $kickreasons{$key} = "$reasons";
- Irssi::print("Added executable $1 as $key...");
- next;
- }
-
- $reasons =~ s/^"(.*)"$/$1/;
- $reasons =~ s/~/$ENV{HOME}/;
- $reasons =~ s/^([^\/])/$basedir$1/;
-
- if (-f $reasons) {
-
- $kickreasons{$key} = [];
-
- open REASON, $reasons;
-
- while (<REASON>) {
- chomp;
- push @{$kickreasons{$key}}, $_;
- }
-
- close REASON;
- Irssi::print("Loaded $reasons as $key...");
- } else {
- Irssi::print("can't parse config line $line...");
- }
- }
- close CONF;
+ open CONF, '<', $conf_file;
+
+ my $line=0;
+
+ while (<CONF>) {
+ $line++;
+
+ next if /^\s*#/;
+
+ chomp;
+ my ($key, $reasons) = /^(\S+)\s+(.+)\s*$/ or next;
+
+ if ($reasons =~ /\`([^\s]+).*?\`/) {
+ $kickreasons{$key} = "$reasons";
+ Irssi::print("Added executable $1 as $key...");
+ next;
+ }
+
+ $reasons =~ s/^"(.*)"$/$1/;
+ $reasons =~ s/~/$ENV{HOME}/;
+ $reasons =~ s/^([^\/])/$basedir$1/;
+
+ if (-f $reasons) {
+
+ $kickreasons{$key} = [];
+
+ open REASON, '<', $reasons;
+
+ while (<REASON>) {
+ chomp;
+ push @{$kickreasons{$key}}, $_;
+ }
+
+ close REASON;
+ Irssi::print("Loaded $reasons as $key...");
+ } else {
+ Irssi::print("can't parse config line $line...");
+ }
+ }
+ close CONF;
} else {
Irssi::print("Could not find configuration file for kicks...");
- Irssi::print("... use /set kicks_configuration <file>");
+ Irssi::print("... use /set kicks_configuration <file>");
}
}
-
+
sub get_a_reason {
my ($topic) = @_;
@@ -147,15 +150,17 @@ sub cmd_realkick {
return if not $server
or not defined $cfg{$server->{chat_type}}
- or not $channel
- or $data =~ /^$cfg{$server->{chat_type}}{cmdline_k}$/;
+ or not $channel
+ or $data =~ /^$cfg{$server->{chat_type}}{cmdline_k}$/;
Irssi::signal_stop();
# let's see whether some options where supplied
- $default = Irssi::settings_get_str("default_kick_options");
+ my $default = Irssi::settings_get_str("default_kick_options");
$data = "$default $data" if not $default =~ /^\s*$/;
- @opts = split /\s+/, $data;
+ my @opts = split /\s+/, $data;
+ my $opt;
+ my $fail=0;
while (($opt) = (shift @opts) =~ /^\s*-(\S+)/) {
@@ -163,18 +168,18 @@ sub cmd_realkick {
$data =~ s/^\s*-$opt\s+//,
$reasons = lc $opt,
- next if defined $kickreasons{lc $opt};
+ next if defined $kickreasons{lc $opt};
last if $cfg{$server->{chat_type}}{start_with_dash};
Irssi::print("Unknown option -$opt");
- $fail = true;
+ $fail = 1;
}
return if $fail;
- $chn = "";
+ my $chn = "";
($chn) = $data =~ /^$cfg{$server->{chat_type}}{match_chn}/;
if ($cfg{$server->{chat_type}}{req_chan} && ($chn eq "")) {
@@ -184,37 +189,39 @@ sub cmd_realkick {
# do we need to add a channel?
if ($chn eq "") {
- Irssi::print("Not joined to any channel"), return
- if $channel->{type} ne "CHANNEL";
+ Irssi::print("Not joined to any channel"), return
+ if $channel->{type} ne "CHANNEL";
$chn = $channel->{name};
- $data = "$chn $data";
+ $data = "$chn $data";
}
# is a reason already supplied?
+ my $reason;
$reason = get_a_reason($reasons)
if not (($reason) = $data =~ /$cfg{$server->{chat_type}}{match_reason}/);
$reason = $cfg{$server->{chat_type}}{default_reason}
if $reason =~ /^\s*$/;
- @nicks = split /,/, ($data =~ /$cfg{$server->{chat_type}}{match_n}/)[0];
- $num_nicks = $cfg{$server->{chat_type}}{num_nicks};
+ my @nicks = split /,/, ($data =~ /$cfg{$server->{chat_type}}{match_n}/)[0];
+ my $num_nicks = $cfg{$server->{chat_type}}{num_nicks};
$num_nicks = @nicks if $num_nicks <= 0;
+ my @commands;
undef @commands;
while (@nicks) {
- $tmp = ($chn ne "" ? "$chn " : "") .
+ my $tmp = ($chn ne "" ? "$chn " : "") .
join ",", (splice @nicks,0,$num_nicks);
- $tmp =~ s/([;\\\$])/\\$1/g;
- push @commands, "$tmp $reason";
+ $tmp =~ s/([;\\\$])/\\$1/g;
+ push @commands, "$tmp $reason";
}
foreach (@commands) {
if ($_ =~ /^$cfg{$server->{chat_type}}{cmdline_k}$/) {
s/\s+$//;
- $channel->command("EVAL $cmd $_")
+ $channel->command("EVAL $cmd $_");
} else {
Irssi::print("BUG: generated invalid $cmd command: $_");
}
@@ -237,7 +244,7 @@ sub cmd_kickban {
Irssi::settings_add_str("misc", "default_kick_options", "");
Irssi::settings_add_str("misc", "kicks_configuration",
- Irssi::get_irssi_dir() . "/kicks.conf");
+ Irssi::get_irssi_dir() . "/kicks.conf");
Irssi::command_bind("kick", "cmd_kick");
Irssi::command_bind("kickban", "cmd_kickban");