mirror of
https://github.com/pragma-/pbot.git
synced 2025-02-13 03:51:01 +01:00
NickList now tracks user modes as metadata
This commit is contained in:
parent
f18426be16
commit
772ea03ddf
@ -196,7 +196,7 @@ sub on_mode {
|
|||||||
|
|
||||||
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
($nick, $user, $host) = $self->normalize_hostmask($nick, $user, $host);
|
||||||
|
|
||||||
my ($mode, $modifier);
|
my ($mode, $mode_char, $modifier);
|
||||||
my $i = 0;
|
my $i = 0;
|
||||||
my $target;
|
my $target;
|
||||||
|
|
||||||
@ -209,6 +209,7 @@ sub on_mode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$mode = $modifier . $char;
|
$mode = $modifier . $char;
|
||||||
|
$mode_char = $char;
|
||||||
$target = $event->{event}->{args}[++$i];
|
$target = $event->{event}->{args}[++$i];
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("Got mode: source: $nick!$user\@$host, mode: $mode, target: " . (defined $target ? $target : "(undef)") . ", channel: $channel\n");
|
$self->{pbot}->{logger}->log("Got mode: source: $nick!$user\@$host, mode: $mode, target: " . (defined $target ? $target : "(undef)") . ", channel: $channel\n");
|
||||||
@ -217,6 +218,14 @@ sub on_mode {
|
|||||||
$self->{pbot}->{bantracker}->track_mode("$nick!$user\@$host", $mode, $target, $channel);
|
$self->{pbot}->{bantracker}->track_mode("$nick!$user\@$host", $mode, $target, $channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (defined $target) {
|
||||||
|
if ($modifier eq '-') {
|
||||||
|
$self->{pbot}->{nicklist}->delete_meta($channel, $target, "+$mode_char");
|
||||||
|
} else {
|
||||||
|
$self->{pbot}->{nicklist}->set_meta($channel, $target, $mode, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (defined $target && $target eq $event->{conn}->nick) { # bot targeted
|
if (defined $target && $target eq $event->{conn}->nick) { # bot targeted
|
||||||
if ($mode eq "+o") {
|
if ($mode eq "+o") {
|
||||||
$self->{pbot}->{logger}->log("$nick opped me in $channel\n");
|
$self->{pbot}->{logger}->log("$nick opped me in $channel\n");
|
||||||
@ -258,7 +267,7 @@ sub on_mode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($mode eq "+q") {
|
elsif ($mode eq "+q") {
|
||||||
if($nick ne $event->{conn}->nick) {
|
if ($nick ne $event->{conn}->nick) { # bot muted
|
||||||
if ($self->{pbot}->{chanops}->can_gain_ops($channel)) {
|
if ($self->{pbot}->{chanops}->can_gain_ops($channel)) {
|
||||||
$self->{pbot}->{chanops}->{unmute_timeout}->hash->{$channel}->{$target}{timeout} = gettimeofday + $self->{pbot}->{registry}->get_value('bantracker', 'mute_timeout');
|
$self->{pbot}->{chanops}->{unmute_timeout}->hash->{$channel}->{$target}{timeout} = gettimeofday + $self->{pbot}->{registry}->get_value('bantracker', 'mute_timeout');
|
||||||
$self->{pbot}->{chanops}->{unmute_timeout}->save;
|
$self->{pbot}->{chanops}->{unmute_timeout}->save;
|
||||||
|
@ -54,7 +54,20 @@ sub initialize {
|
|||||||
|
|
||||||
sub dumpnicks {
|
sub dumpnicks {
|
||||||
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
my ($self, $from, $nick, $user, $host, $arguments) = @_;
|
||||||
my $nicklist = Dumper($self->{nicklist});
|
my $nicklist;
|
||||||
|
|
||||||
|
if (not length $arguments) {
|
||||||
|
$nicklist = Dumper($self->{nicklist});
|
||||||
|
} else {
|
||||||
|
my @args = split / /, $arguments;
|
||||||
|
|
||||||
|
if (@args == 1) {
|
||||||
|
$nicklist = Dumper($self->{nicklist}->{$arguments});
|
||||||
|
} else {
|
||||||
|
$nicklist = Dumper($self->{nicklist}->{$args[0]}->{$args[1]});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $nicklist;
|
return $nicklist;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,6 +117,51 @@ sub get_channels {
|
|||||||
return \@channels;
|
return \@channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub set_meta {
|
||||||
|
my ($self, $channel, $nick, $key, $value) = @_;
|
||||||
|
|
||||||
|
$channel = lc $channel;
|
||||||
|
$nick = lc $nick;
|
||||||
|
|
||||||
|
if (not exists $self->{nicklist}->{$channel} or not exists $self->{nicklist}->{$channel}->{$nick}) {
|
||||||
|
$self->{pbot}->{logger}->log("Nicklist: Attempt to set invalid meta ($key => $value) for $nick in $channel.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$self->{nicklist}->{$channel}->{$nick}->{$key} = $value;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub delete_meta {
|
||||||
|
my ($self, $channel, $nick, $key) = @_;
|
||||||
|
|
||||||
|
$channel = lc $channel;
|
||||||
|
$nick = lc $nick;
|
||||||
|
|
||||||
|
if (not exists $self->{nicklist}->{$channel}
|
||||||
|
or not exists $self->{nicklist}->{$channel}->{$nick}
|
||||||
|
or not exists $self->{nicklist}->{$channel}->{$nick}->{$key}) {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
return delete $self->{nicklist}->{$channel}->{$nick}->{$key};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_meta {
|
||||||
|
my ($self, $channel, $nick, $key) = @_;
|
||||||
|
|
||||||
|
$channel = lc $channel;
|
||||||
|
$nick = lc $nick;
|
||||||
|
|
||||||
|
if (not exists $self->{nicklist}->{$channel}
|
||||||
|
or not exists $self->{nicklist}->{$channel}->{$nick}
|
||||||
|
or not exists $self->{nicklist}->{$channel}->{$nick}->{$key}) {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $self->{nicklist}->{$channel}->{$nick}->{$key};
|
||||||
|
}
|
||||||
|
|
||||||
sub is_present_any_channel {
|
sub is_present_any_channel {
|
||||||
my ($self, $nick) = @_;
|
my ($self, $nick) = @_;
|
||||||
|
|
||||||
@ -191,8 +249,21 @@ sub on_namreply {
|
|||||||
my ($channel, $nicks) = ($event->{event}->{args}[2], $event->{event}->{args}[3]);
|
my ($channel, $nicks) = ($event->{event}->{args}[2], $event->{event}->{args}[3]);
|
||||||
|
|
||||||
foreach my $nick (split ' ', $nicks) {
|
foreach my $nick (split ' ', $nicks) {
|
||||||
$nick =~ s/^[@+%]//; # remove OP/Voice/etc indicator from nick
|
my $stripped_nick = $nick;
|
||||||
$self->add_nick($channel, $nick);
|
$stripped_nick =~ s/^[@+%]//g; # remove OP/Voice/etc indicator from nick
|
||||||
|
$self->add_nick($channel, $stripped_nick);
|
||||||
|
|
||||||
|
if ($nick =~ m/\@/) {
|
||||||
|
$self->set_meta($channel, $stripped_nick, '+o', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($nick =~ m/\+/) {
|
||||||
|
$self->set_meta($channel, $stripped_nick, '+v', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($nick =~ m/\%/) {
|
||||||
|
$self->set_meta($channel, $stripped_nick, '+h', 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -245,8 +316,10 @@ sub on_nickchange {
|
|||||||
|
|
||||||
foreach my $channel (keys %{ $self->{nicklist} }) {
|
foreach my $channel (keys %{ $self->{nicklist} }) {
|
||||||
if ($self->is_present($channel, $nick)) {
|
if ($self->is_present($channel, $nick)) {
|
||||||
$self->remove_nick($channel, $nick);
|
my $meta = delete $self->{nicklist}->{$channel}->{lc $nick};
|
||||||
$self->add_nick($channel, $newnick);
|
$meta->{nick} = $newnick;
|
||||||
|
$meta->{timestamp} = gettimeofday;
|
||||||
|
$self->{nicklist}->{$channel}->{lc $newnick} = $meta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user