summaryrefslogtreecommitdiffstats
path: root/scripts/isbanned.pl
diff options
context:
space:
mode:
authorGeert Hauwaerts2015-06-12 21:43:19 +0200
committerGeert Hauwaerts2015-06-12 21:43:19 +0200
commitf0d62f2021bcd611939f84e15033ae9549331731 (patch)
tree9f47199626c9bdb96c74e7987f1a749a79a57167 /scripts/isbanned.pl
parentdca0c3de79a96dc4e2eddea519a9f198a2c97ae8 (diff)
downloadscripts.irssi.org-f0d62f2021bcd611939f84e15033ae9549331731.tar.bz2
Update isbanned.pl (#116)
Update isbanned.pl (#116)
Diffstat (limited to 'scripts/isbanned.pl')
-rw-r--r--scripts/isbanned.pl57
1 files changed, 46 insertions, 11 deletions
diff --git a/scripts/isbanned.pl b/scripts/isbanned.pl
index 3feaca2..0dc1755 100644
--- a/scripts/isbanned.pl
+++ b/scripts/isbanned.pl
@@ -13,9 +13,9 @@ use vars qw($VERSION %IRSSI);
authors => "mniip",
contact => "mniip \@ freenode",
license => "Public domain",
- modified => "2015-01-13"
+ modified => "2015-01-16"
);
-$VERSION = "0.6.2";
+$VERSION = "0.6.4";
# Commands:
# /isbanned <channel> <user>
@@ -53,6 +53,13 @@ $VERSION = "0.6.2";
#
# 0.6.2 (2015.01.13)
# Fixed a few warnings.
+#
+# 0.6.3 (2015.01.16)
+# Improve command argument parsing. Display usage on incorrect use.
+# Support multiple modes at once in islisted.
+#
+# 0.6.4 (2015.03.22)
+# Fix translation from python: fix bans containing the letter Z not matching
my $active = 0;
my $user;
@@ -146,7 +153,7 @@ my %char_classes =
"?" => "."
);
$char_classes{$_} = $_ foreach split //, '-_`^0123456789';
-for(my $c = 0; $c < 25; $c++)
+for(my $c = 0; $c <= 25; $c++)
{
my $lc = chr($c + ord "a");
my $uc = chr($c + ord "A");
@@ -157,6 +164,7 @@ for(my $c = 0; $c < 25; $c++)
sub match_pattern
{
my ($string, $pattern) = @_;
+ $string = "" if !defined $string;
$pattern =~ s|[?*]+|"?" x ($& =~ tr/?/?/) . ($& =~ /\*/ ? "*" : "")|ge;
my $last_pos = 0;
@@ -336,6 +344,7 @@ sub reset
sub lookup_host
{
my ($host) = @_;
+ $host = "" if !defined $host;
Irssi::print("\x0302Resolving <$host>");
my @addresses = gethostbyname($host);
if(@addresses)
@@ -355,15 +364,19 @@ sub lookup_host
sub query_list
{
- $lists_left++;
my ($server, $channel, $mode) = @_;
$server->command("quote MODE $channel");
- $server->command("quote MODE $channel $mode");
+ for my $m(split //, $mode)
+ {
+ $lists_left++;
+ $server->command("quote MODE $channel $m");
+ }
}
sub query_whois
{
my ($server, $nick) = @_;
+ $nick =~ s/\s+//g;
$server->command("quote WHOIS $nick");
}
@@ -477,7 +490,6 @@ sub no_list
my ($server, $data, $nick, $address) = @_;
my @w = split / /, $data;
Irssi::print("\x0304Could not obtain modes for $w[1], report may be incomplete");
- Irssi::print("eq nolist");
if(nick_eq($w[1], $channel) && !$modes)
{
$modes = "+";
@@ -576,23 +588,46 @@ sub start_search
sub isbanned
{
my ($arg, $server, $witem) = @_;
- my ($chan, $user) = split / /, $arg, 2;
- start_search($server, $chan, $user, "b");
+ if($arg =~ /^\s*(\S+)\s+(.*\S)\s*/)
+ {
+ my $chan = $1;
+ my $user = $2;
+ return start_search($server, $chan, $user, "b") if $chan ne "" && $user ne "";
+ }
+ Irssi::print("Usage: /isbanned <channel> <user>");
}
sub ismuted
{
my ($arg, $server, $witem) = @_;
my ($chan, $user) = split / /, $arg, 2;
- start_search($server, $chan, $user, "q");
- query_list($server, $chan, "b");
+ if($arg =~ /^\s*(\S+)\s+(.*\S)\s*/)
+ {
+ my $chan = $1;
+ my $user = $2;
+ if($chan ne "" && $user ne "")
+ {
+ start_search($server, $chan, $user, "q");
+ query_list($server, $chan, "b");
+ return;
+ }
+ }
+ Irssi::print("Usage: /ismuted <channel> <user>");
}
sub islisted
{
my ($arg, $server, $witem) = @_;
my ($chan, $mode, $user) = split / /, $arg, 3;
- start_search($server, $chan, $user, $mode =~ s/^\+//r);
+ if($arg =~ /^\s*(\S+)\s+(\S+)\s+(.*\S)\s*/)
+ {
+ my $chan = $1;
+ my $mode = $2;
+ my $user = $3;
+ $mode =~ s/\+//g;
+ return start_search($server, $chan, $user, $mode) if $chan ne "" && $mode ne "" && $user ne "";
+ }
+ Irssi::print("Usage: /islisted <channel> <mode> <user>");
}
Irssi::signal_add("event 329", \&ignored);