mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-26 22:09:26 +01:00
MessageHistory: aka
can now sort output; added option -l
to show last seen time
This commit is contained in:
parent
565f4b080b
commit
da9abb4fbc
@ -55,7 +55,7 @@ sub initialize {
|
|||||||
sub cmd_list_also_known_as {
|
sub cmd_list_also_known_as {
|
||||||
my ($self, $context) = @_;
|
my ($self, $context) = @_;
|
||||||
|
|
||||||
my $usage = "Usage: aka [-hingr] <nick | hostmask>; -h show hostmasks; -i show ids; -n show nickserv accounts; -g show gecos, -r show relationships";
|
my $usage = "Usage: aka [-hilngr] <nick> [-sort <by>]; -h show hostmasks; -i show ids; -l show last seen, -n show nickserv accounts; -g show gecos, -r show relationships";
|
||||||
|
|
||||||
if (not length $context->{arguments}) { return $usage; }
|
if (not length $context->{arguments}) { return $usage; }
|
||||||
|
|
||||||
@ -65,25 +65,95 @@ sub cmd_list_also_known_as {
|
|||||||
chomp $getopt_error;
|
chomp $getopt_error;
|
||||||
};
|
};
|
||||||
|
|
||||||
Getopt::Long::Configure("bundling");
|
Getopt::Long::Configure("bundling_override");
|
||||||
|
|
||||||
my ($show_hostmasks, $show_gecos, $show_nickserv, $show_id, $show_relationship, $show_weak, $dont_use_aliases_table);
|
my $sort_method = 'nick';
|
||||||
|
my ($show_hostmasks, $show_gecos, $show_nickserv, $show_id, $show_relationship, $show_weak, $show_last_seen, $dont_use_aliases_table);
|
||||||
my @opt_args = $self->{pbot}->{interpreter}->split_line($context->{arguments}, strip_quotes => 1);
|
my @opt_args = $self->{pbot}->{interpreter}->split_line($context->{arguments}, strip_quotes => 1);
|
||||||
GetOptionsFromArray(
|
GetOptionsFromArray(
|
||||||
\@opt_args,
|
\@opt_args,
|
||||||
'h' => \$show_hostmasks,
|
'h' => \$show_hostmasks,
|
||||||
|
'l' => \$show_last_seen,
|
||||||
'n' => \$show_nickserv,
|
'n' => \$show_nickserv,
|
||||||
'r' => \$show_relationship,
|
'r' => \$show_relationship,
|
||||||
'g' => \$show_gecos,
|
'g' => \$show_gecos,
|
||||||
'w' => \$show_weak,
|
'w' => \$show_weak,
|
||||||
'z' => \$dont_use_aliases_table,
|
'z' => \$dont_use_aliases_table,
|
||||||
'i' => \$show_id
|
'i' => \$show_id,
|
||||||
|
'sort|s=s' => \$sort_method,
|
||||||
);
|
);
|
||||||
|
|
||||||
return "/say $getopt_error -- $usage" if defined $getopt_error;
|
return "/say $getopt_error -- $usage" if defined $getopt_error;
|
||||||
return "Too many arguments -- $usage" if @opt_args > 1;
|
return "Too many arguments -- $usage" if @opt_args > 1;
|
||||||
return "Missing argument -- $usage" if @opt_args != 1;
|
return "Missing argument -- $usage" if @opt_args != 1;
|
||||||
|
|
||||||
|
my %sort = (
|
||||||
|
'id' => sub {
|
||||||
|
if ($_[1] eq '+') {
|
||||||
|
return $_[0]->{$a}->{id} <=> $_[0]->{$b}->{id};
|
||||||
|
} else {
|
||||||
|
return $_[0]->{$b}->{id} <=> $_[0]->{$a}->{id};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'seen' => sub {
|
||||||
|
if ($_[1] eq '+') {
|
||||||
|
return $_[0]->{$b}->{last_seen} <=> $_[0]->{$a}->{last_seen};
|
||||||
|
} else {
|
||||||
|
return $_[0]->{$a}->{last_seen} <=> $_[0]->{$b}->{last_seen};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'nickserv' => sub {
|
||||||
|
if ($_[1] eq '+') {
|
||||||
|
return lc $_[0]->{$a}->{nickserv} cmp lc $_[0]->{$b}->{nickserv};
|
||||||
|
} else {
|
||||||
|
return lc $_[0]->{$b}->{nickserv} cmp lc $_[0]->{$a}->{nickserv};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'nick' => sub {
|
||||||
|
if ($_[1] eq '+') {
|
||||||
|
return lc $_[0]->{$a}->{nick} cmp lc $_[0]->{$b}->{nick};
|
||||||
|
} else {
|
||||||
|
return lc $_[0]->{$b}->{nick} cmp lc $_[0]->{$a}->{nick};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'user' => sub {
|
||||||
|
if ($_[1] eq '+') {
|
||||||
|
return lc $_[0]->{$a}->{user} cmp lc $_[0]->{$b}->{user};
|
||||||
|
} else {
|
||||||
|
return lc $_[0]->{$b}->{user} cmp lc $_[0]->{$a}->{user};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'host' => sub {
|
||||||
|
if ($_[1] eq '+') {
|
||||||
|
return lc $_[0]->{$a}->{host} cmp lc $_[0]->{$b}->{host};
|
||||||
|
} else {
|
||||||
|
return lc $_[0]->{$b}->{host} cmp lc $_[0]->{$a}->{host};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'hostmask' => sub {
|
||||||
|
if ($_[1] eq '+') {
|
||||||
|
return lc $_[0]->{$a}->{hostmask} cmp lc $_[0]->{$b}->{hostmask};
|
||||||
|
} else {
|
||||||
|
return lc $_[0]->{$b}->{hostmask} cmp lc $_[0]->{$a}->{hostmask};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
my $sort_direction = '+';
|
||||||
|
if ($sort_method =~ s/^(\+|\-)//) {
|
||||||
|
$sort_direction = $1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not exists $sort{$sort_method}) {
|
||||||
|
return "Invalid sort method '$sort_method'; valid methods are: " . join(', ', sort keys %sort) . "; prefix with - to invert sort direction.";
|
||||||
|
}
|
||||||
|
|
||||||
my %akas = $self->{database}->get_also_known_as($opt_args[0], $dont_use_aliases_table);
|
my %akas = $self->{database}->get_also_known_as($opt_args[0], $dont_use_aliases_table);
|
||||||
|
|
||||||
if (%akas) {
|
if (%akas) {
|
||||||
@ -91,7 +161,7 @@ sub cmd_list_also_known_as {
|
|||||||
|
|
||||||
my %nicks;
|
my %nicks;
|
||||||
my $sep = "";
|
my $sep = "";
|
||||||
foreach my $aka (sort keys %akas) {
|
foreach my $aka (sort { $sort{$sort_method}->(\%akas, $sort_direction) } keys %akas) {
|
||||||
next if $aka =~ /^Guest\d+(?:!.*)?$/;
|
next if $aka =~ /^Guest\d+(?:!.*)?$/;
|
||||||
next if exists $akas{$aka}->{type} and $akas{$aka}->{type} == $self->{database}->{alias_type}->{WEAK} && not $show_weak;
|
next if exists $akas{$aka}->{type} and $akas{$aka}->{type} == $self->{database}->{alias_type}->{WEAK} && not $show_weak;
|
||||||
|
|
||||||
@ -117,6 +187,11 @@ sub cmd_list_also_known_as {
|
|||||||
|
|
||||||
$result .= " [WEAK]" if exists $akas{$aka}->{type} and $akas{$aka}->{type} == $self->{database}->{alias_type}->{WEAK};
|
$result .= " [WEAK]" if exists $akas{$aka}->{type} and $akas{$aka}->{type} == $self->{database}->{alias_type}->{WEAK};
|
||||||
|
|
||||||
|
if ($show_last_seen) {
|
||||||
|
my $seen = concise ago (gettimeofday - $akas{$aka}->{last_seen});
|
||||||
|
$result .= " last seen: $seen";
|
||||||
|
}
|
||||||
|
|
||||||
if ($show_hostmasks or $show_nickserv or $show_gecos or $show_id or $show_relationship) { $sep = ",\n"; }
|
if ($show_hostmasks or $show_nickserv or $show_gecos or $show_id or $show_relationship) { $sep = ",\n"; }
|
||||||
else { $sep = ", "; }
|
else { $sep = ", "; }
|
||||||
}
|
}
|
||||||
|
@ -1608,7 +1608,7 @@ sub get_also_known_as {
|
|||||||
last if not $new_aliases;
|
last if not $new_aliases;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $hostmask_sth = $self->{dbh}->prepare('SELECT hostmask, nickchange FROM Hostmasks WHERE id = ?');
|
my $hostmask_sth = $self->{dbh}->prepare('SELECT hostmask, nickchange, last_seen FROM Hostmasks WHERE id = ?');
|
||||||
my $nickserv_sth = $self->{dbh}->prepare('SELECT nickserv FROM Nickserv WHERE id = ?');
|
my $nickserv_sth = $self->{dbh}->prepare('SELECT nickserv FROM Nickserv WHERE id = ?');
|
||||||
my $gecos_sth = $self->{dbh}->prepare('SELECT gecos FROM Gecos WHERE id = ?');
|
my $gecos_sth = $self->{dbh}->prepare('SELECT gecos FROM Gecos WHERE id = ?');
|
||||||
|
|
||||||
@ -1619,7 +1619,19 @@ sub get_also_known_as {
|
|||||||
$rows = $hostmask_sth->fetchall_arrayref({});
|
$rows = $hostmask_sth->fetchall_arrayref({});
|
||||||
|
|
||||||
foreach my $row (@$rows) {
|
foreach my $row (@$rows) {
|
||||||
$akas{$row->{hostmask}} = {hostmask => $row->{hostmask}, id => $id, alias => $ids{$id}->{id}, type => $ids{$id}->{type}, nickchange => $row->{nickchange}};
|
my ($nick, $user, $host) = $row->{hostmask} =~ m/^([^!]+)!([^@]+)@(.*)/;
|
||||||
|
$akas{$row->{hostmask}} = {
|
||||||
|
id => $id,
|
||||||
|
alias => $ids{$id}->{id},
|
||||||
|
nick => $nick,
|
||||||
|
user => $user,
|
||||||
|
host => $host,
|
||||||
|
hostmask => $row->{hostmask},
|
||||||
|
type => $ids{$id}->{type},
|
||||||
|
nickchange => $row->{nickchange},
|
||||||
|
last_seen => $row->{last_seen},
|
||||||
|
};
|
||||||
|
|
||||||
$self->{pbot}->{logger}->log("[$id] Adding hostmask $row->{hostmask} -> $ids{$id}->{id} [type $ids{$id}->{type}]\n") if $debug;
|
$self->{pbot}->{logger}->log("[$id] Adding hostmask $row->{hostmask} -> $ids{$id}->{id} [type $ids{$id}->{type}]\n") if $debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user