diff --git a/src/Core/IRC.pm b/src/Core/IRC.pm index fe71de0..3a3a6db 100644 --- a/src/Core/IRC.pm +++ b/src/Core/IRC.pm @@ -28,6 +28,18 @@ hook_add("on_uprivmsg", "ctcp_version_reply", sub { return 1; }); +# QUIT hook; delete user from chanusers. +hook_add("on_quit", "quit_update_chanusers", sub { + my (($svr, $src, undef)) = @_; + my %src = %{ $src }; + + # Delete the user from all channels. + foreach my $ccu (keys %{ $Parser::IRC::chanusers{$svr} }) { + if (defined $Parser::IRC::chanusers{$svr}{$ccu}{$src{nick}}) { delete $Parser::IRC::chanusers{$svr}{$ccu}{$src{nick}}; } + } + + return 1; +}); 1; # vim: set ai sw=4 ts=4: diff --git a/src/Parser/IRC.pm b/src/Parser/IRC.pm index 2fdaa80..d693411 100644 --- a/src/Parser/IRC.pm +++ b/src/Parser/IRC.pm @@ -609,11 +609,6 @@ sub quit my ($svr, @ex) = @_; my %src = API::IRC::usrc(substr($ex[0], 1)); - # Delete the user from all channels. - foreach my $ccu (keys %{ $chanusers{$svr} }) { - delete $chanusers{$svr}{$ccu}{$src{nick}} if defined $chanusers{$svr}{$ccu}{$src{nick}}; - } - # Set $msg to the quit message. my $msg = 0; if (defined $ex[2]) { @@ -626,7 +621,7 @@ sub quit } # Trigger on_quit. - API::Std::event_run("on_quit", ($svr, %src, $msg)); + API::Std::event_run("on_quit", ($svr, \%src, $msg)); return 1; }