mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-29 23:39:24 +01:00
Plugins/AntiTwitter: use event queue to decrement offense counter
This commit is contained in:
parent
e6deebc876
commit
f258cf6cc6
@ -25,13 +25,13 @@ no if $] >= 5.018, warnings => "experimental::smartmatch";
|
|||||||
sub initialize {
|
sub initialize {
|
||||||
my ($self, %conf) = @_;
|
my ($self, %conf) = @_;
|
||||||
$self->{pbot}->{event_dispatcher}->register_handler('irc.public', sub { $self->on_public(@_) });
|
$self->{pbot}->{event_dispatcher}->register_handler('irc.public', sub { $self->on_public(@_) });
|
||||||
$self->{pbot}->{timer}->register(sub { $self->adjust_offenses }, 60 * 60 * 1, 'antitwitter');
|
|
||||||
$self->{offenses} = {};
|
$self->{offenses} = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
sub unload {
|
sub unload {
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
$self->{pbot}->{event_dispatcher}->remove_handler('irc.public');
|
$self->{pbot}->{event_dispatcher}->remove_handler('irc.public');
|
||||||
|
$self->{pbot}->{timer}->dequeue_event('antitwitter .*');
|
||||||
}
|
}
|
||||||
|
|
||||||
sub on_public {
|
sub on_public {
|
||||||
@ -61,6 +61,17 @@ sub on_public {
|
|||||||
my $length = 60 * ($offenses * $offenses + 1);
|
my $length = 60 * ($offenses * $offenses + 1);
|
||||||
$self->{pbot}->{chanops}->ban_user_timed($self->{pbot}->{registry}->get_value('irc', 'botnick'), 'using @nick too much', "*!*\@$host", $channel, $length);
|
$self->{pbot}->{chanops}->ban_user_timed($self->{pbot}->{registry}->get_value('irc', 'botnick'), 'using @nick too much', "*!*\@$host", $channel, $length);
|
||||||
$self->{pbot}->{chanops}->gain_ops($channel);
|
$self->{pbot}->{chanops}->gain_ops($channel);
|
||||||
|
|
||||||
|
$self->{pbot}->{timer}->enqueue_event(sub {
|
||||||
|
my ($event) = @_;
|
||||||
|
if (--$self->{offenses}->{$channel}->{$nick}->{offenses} <= 0) {
|
||||||
|
delete $self->{offenses}->{$channel}->{$nick};
|
||||||
|
delete $self->{offenses}->{$channel} if not keys %{$self->{offenses}->{$channel}};
|
||||||
|
$event->{repeating} = 0;
|
||||||
|
}
|
||||||
|
}, 60 * 60 * 24 * 2, "antitwitter offenses-- $channel $nick", 1
|
||||||
|
);
|
||||||
|
|
||||||
$length = duration $length;
|
$length = duration $length;
|
||||||
$event->{conn}->privmsg(
|
$event->{conn}->privmsg(
|
||||||
$nick,
|
$nick,
|
||||||
@ -74,20 +85,4 @@ sub on_public {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub adjust_offenses {
|
|
||||||
my $self = shift;
|
|
||||||
my $now = gettimeofday;
|
|
||||||
|
|
||||||
foreach my $channel (keys %{$self->{offenses}}) {
|
|
||||||
foreach my $nick (keys %{$self->{offenses}->{$channel}}) {
|
|
||||||
if ($now - $self->{offenses}->{$channel}->{$nick}->{time} >= 60 * 60 * 24 * 7) {
|
|
||||||
if (--$self->{offenses}->{$channel}->{$nick}->{offenses} <= 0) {
|
|
||||||
delete $self->{offenses}->{$channel}->{$nick};
|
|
||||||
delete $self->{offenses}->{$channel} if not keys %{$self->{offenses}->{$channel}};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
Loading…
Reference in New Issue
Block a user