keepnick.pl: detect if ISON timed out / is disabled

This commit is contained in:
wowaname 2017-03-04 07:03:37 +00:00
parent 0f54bef93a
commit 69da72df8e

View File

@ -11,7 +11,7 @@ my $SCRIPT_VERSION = '1.0';
my $SCRIPT_LICENCE = 'Public domain'; my $SCRIPT_LICENCE = 'Public domain';
my $SCRIPT_DESC = 'Keep your primary nickname'; my $SCRIPT_DESC = 'Keep your primary nickname';
our (%waiting, %connecting); our (%waiting, %connecting, %noison);
my %OPTIONS = ( my %OPTIONS = (
default_enable => ['Whether to enable keepnick on servers by default', '0'], default_enable => ['Whether to enable keepnick on servers by default', '0'],
@ -116,6 +116,7 @@ sub ison_check
next unless weechat::infolist_integer($iptr, 'is_connected'); next unless weechat::infolist_integer($iptr, 'is_connected');
my $server = lc weechat::infolist_string($iptr, 'name'); my $server = lc weechat::infolist_string($iptr, 'name');
next unless is_waiting($server); next unless is_waiting($server);
next unless exists $noison{$server};
weechat::hook_hsignal_send('irc_redirect_command', { weechat::hook_hsignal_send('irc_redirect_command', {
server => $server, server => $server,
pattern => 'ison', pattern => 'ison',
@ -134,6 +135,10 @@ sub ison_check
sub irc_ison sub irc_ison
{ {
my %hashtable = %{ pop() }; my %hashtable = %{ pop() };
unless ($hashtable{output}) {
$noison{lc $hashtable{server}} = 1;
return weechat::WEECHAT_RC_ERROR;
}
my %nicks = map { lc $_ => 1 } my %nicks = map { lc $_ => 1 }
split / +/, ($hashtable{output} =~ s/^:[^ ]* 303 [^ ]+ :?//r); split / +/, ($hashtable{output} =~ s/^:[^ ]* 303 [^ ]+ :?//r);
@ -231,7 +236,7 @@ sub cmd_keepnick
info($server, "keepnick disabled on this server"); info($server, "keepnick disabled on this server");
} }
else { else {
my @waiting = enable($server, 0, $command =~ s/ /,/gr); my @waiting = enable($server, 1, $command =~ s/ /,/gr);
if (@waiting) { info($server, "now waiting for '".(join "', '", @waiting)."'"); } if (@waiting) { info($server, "now waiting for '".(join "', '", @waiting)."'"); }
else { info($server, "you already have your primary nick! doing nothing"); } else { info($server, "you already have your primary nick! doing nothing"); }
} }