mirror of
https://github.com/pragma-/pbot.git
synced 2025-02-02 07:24:09 +01:00
extend unmute to automagically unmute all of a user's hosts (#39)
This commit is contained in:
parent
4f6993efb4
commit
2f190a57c3
@ -73,7 +73,7 @@ sub gain_ops {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $channel = shift;
|
my $channel = shift;
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
|
|
||||||
return if exists $self->{op_requested}->{$channel};
|
return if exists $self->{op_requested}->{$channel};
|
||||||
return if not $self->can_gain_ops($channel);
|
return if not $self->can_gain_ops($channel);
|
||||||
|
|
||||||
@ -126,18 +126,16 @@ sub ban_user {
|
|||||||
$self->gain_ops($channel);
|
$self->gain_ops($channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub unban_user {
|
sub get_akas {
|
||||||
my $self = shift;
|
my ($self, $mask, $channel) = @_;
|
||||||
my ($mask, $channel, $immediately) = @_;
|
my $masks;
|
||||||
|
|
||||||
my $bans;
|
|
||||||
|
|
||||||
if ($mask !~ m/[!@\$]/) {
|
if ($mask !~ m/[!@\$]/) {
|
||||||
my ($message_account, $hostmask) = $self->{pbot}->{messagehistory}->{database}->find_message_account_by_nick($mask);
|
my ($message_account, $hostmask) = $self->{pbot}->{messagehistory}->{database}->find_message_account_by_nick($mask);
|
||||||
|
|
||||||
if (defined $hostmask) {
|
if (defined $hostmask) {
|
||||||
my $nickserv = $self->{pbot}->{messagehistory}->{database}->get_current_nickserv_account($message_account);
|
my $nickserv = $self->{pbot}->{messagehistory}->{database}->get_current_nickserv_account($message_account);
|
||||||
$bans = $self->{pbot}->{bantracker}->get_baninfo($hostmask, $channel, $nickserv);
|
$masks = $self->{pbot}->{bantracker}->get_baninfo($hostmask, $channel, $nickserv);
|
||||||
}
|
}
|
||||||
|
|
||||||
my %akas = $self->{pbot}->{messagehistory}->{database}->get_also_known_as($mask);
|
my %akas = $self->{pbot}->{messagehistory}->{database}->get_also_known_as($mask);
|
||||||
@ -148,12 +146,25 @@ sub unban_user {
|
|||||||
|
|
||||||
my $b = $self->{pbot}->{bantracker}->get_baninfo($aka, $channel);
|
my $b = $self->{pbot}->{bantracker}->get_baninfo($aka, $channel);
|
||||||
if (defined $b) {
|
if (defined $b) {
|
||||||
$bans = {} if not defined $bans;
|
$masks = {} if not defined $masks;
|
||||||
push @$bans, @$b;
|
push @$masks, @$b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $masks
|
||||||
|
}
|
||||||
|
|
||||||
|
sub unban_user {
|
||||||
|
my $self = shift;
|
||||||
|
my ($mask, $channel, $immediately) = @_;
|
||||||
|
|
||||||
|
$mask = lc $mask;
|
||||||
|
$channel = lc $channel;
|
||||||
|
$self->{pbot}->{logger}->log("Unbanning $channel $mask\n");
|
||||||
|
|
||||||
|
my $bans = $self->get_akas($mask, $channel);
|
||||||
|
|
||||||
if (not defined $bans) {
|
if (not defined $bans) {
|
||||||
my $baninfo = {};
|
my $baninfo = {};
|
||||||
$baninfo->{banmask} = $mask;
|
$baninfo->{banmask} = $mask;
|
||||||
@ -215,16 +226,28 @@ sub mute_user {
|
|||||||
sub unmute_user {
|
sub unmute_user {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my ($mask, $channel, $immediately) = @_;
|
my ($mask, $channel, $immediately) = @_;
|
||||||
|
|
||||||
$mask = lc $mask;
|
$mask = lc $mask;
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
$self->{pbot}->{logger}->log("Unmuting $channel $mask\n");
|
$self->{pbot}->{logger}->log("Unmuting $channel $mask\n");
|
||||||
|
|
||||||
if ($self->{unmute_timeout}->find_index($channel, $mask)) {
|
my $mutes = $self->get_akas($mask, $channel);
|
||||||
$self->{unmute_timeout}->hash->{$channel}->{$mask}{timeout} = gettimeofday + 7200; # try again in 2 hours if unmute doesn't immediately succeed
|
|
||||||
$self->{unmute_timeout}->save;
|
if (not defined $mutes) {
|
||||||
|
my $muteinfo = {};
|
||||||
|
$muteinfo->{banmask} = $mask;
|
||||||
|
$muteinfo->{type} = '+q';
|
||||||
|
push @$mutes, $muteinfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
my %unmutes;
|
||||||
|
foreach my $muteinfo (@$mutes) {
|
||||||
|
next if $muteinfo->{type} ne '+q';
|
||||||
|
next if exists $unmutes{$muteinfo->{banmask}};
|
||||||
|
$unmutes{$muteinfo->{banmask}} = 1;
|
||||||
|
$self->add_to_unban_queue($channel, 'q', $muteinfo->{banmask});
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->add_to_unban_queue($channel, 'q', $mask);
|
|
||||||
$self->check_unban_queue if $immediately;
|
$self->check_unban_queue if $immediately;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -379,8 +402,8 @@ sub check_opped_timeouts {
|
|||||||
|
|
||||||
foreach my $channel (keys %{ $self->{is_opped} }) {
|
foreach my $channel (keys %{ $self->{is_opped} }) {
|
||||||
if($self->{is_opped}->{$channel}{timeout} < $now) {
|
if($self->{is_opped}->{$channel}{timeout} < $now) {
|
||||||
unless (exists $self->{pbot}->{channels}->{channels}->hash->{$channel}
|
unless (exists $self->{pbot}->{channels}->{channels}->hash->{$channel}
|
||||||
and exists $self->{pbot}->{channels}->{channels}->hash->{$channel}{permop}
|
and exists $self->{pbot}->{channels}->{channels}->hash->{$channel}{permop}
|
||||||
and $self->{pbot}->{channels}->{channels}->hash->{$channel}{permop}) {
|
and $self->{pbot}->{channels}->{channels}->hash->{$channel}{permop}) {
|
||||||
$self->lose_ops($channel);
|
$self->lose_ops($channel);
|
||||||
delete $self->{is_opped}->{$channel}; # assume chanserv is alive and deop will succeed
|
delete $self->{is_opped}->{$channel}; # assume chanserv is alive and deop will succeed
|
||||||
|
Loading…
Reference in New Issue
Block a user