From d7d6083a2562041b565f391fc022e680adfc2074 Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Tue, 12 May 2015 21:46:40 -0700 Subject: [PATCH] Add ability to show alias relationships in `aka` command --- PBot/MessageHistory.pm | 19 +++++++++++++++---- PBot/MessageHistory_SQLite.pm | 18 ++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/PBot/MessageHistory.pm b/PBot/MessageHistory.pm index fb736e3f..5d5655bf 100644 --- a/PBot/MessageHistory.pm +++ b/PBot/MessageHistory.pm @@ -128,7 +128,7 @@ sub aka_unlink { sub list_also_known_as { my ($self, $from, $nick, $user, $host, $arguments) = @_; - my $usage = "Usage: aka [-h] [-i] [-n] ; -h show hostmasks; -i show ids; -n show nickserv accounts"; + my $usage = "Usage: aka [-h] [-i] [-n] [-r] ; -h show hostmasks; -i show ids; -n show nickserv accounts; -r show relationships"; if(not length $arguments) { return $usage; @@ -140,10 +140,11 @@ sub list_also_known_as { chomp $getopt_error; }; - my ($show_hostmasks, $show_nickserv, $show_id, $dont_use_aliases_table); + my ($show_hostmasks, $show_nickserv, $show_id, $show_relationship, $dont_use_aliases_table); my ($ret, $args) = GetOptionsFromString($arguments, 'h' => \$show_hostmasks, 'n' => \$show_nickserv, + 'r' => \$show_relationship, 'nt' => \$dont_use_aliases_table, 'i' => \$show_id); @@ -170,8 +171,18 @@ sub list_also_known_as { $result .= "$sep$aka"; } $result .= " ($akas{$aka}->{nickserv})" if $show_nickserv and exists $akas{$aka}->{nickserv}; - $result .= " [$akas{$aka}->{id}]" if $show_id; - if ($show_hostmasks or $show_nickserv or $show_id) { + + if ($show_relationship) { + if ($akas{$aka}->{id} == $akas{$aka}->{alias}) { + $result .= " [$akas{$aka}->{id}]"; + } else { + $result .= " [$akas{$aka}->{id} -> $akas{$aka}->{alias}]"; + } + } elsif ($show_id) { + $result .= " [$akas{$aka}->{id}]"; + } + + if ($show_hostmasks or $show_nickserv or $show_id or $show_relationship) { $sep = ",\n"; } else { $sep = ", "; diff --git a/PBot/MessageHistory_SQLite.pm b/PBot/MessageHistory_SQLite.pm index b418d7ca..d1acb9e3 100644 --- a/PBot/MessageHistory_SQLite.pm +++ b/PBot/MessageHistory_SQLite.pm @@ -956,14 +956,13 @@ sub get_also_known_as { my %akas = eval { my (%akas, %hostmasks, %ids); - if (not $dont_use_aliases_table) { + unless ($dont_use_aliases_table) { my ($id, $hostmask) = $self->find_message_account_by_nick($nick); if (not defined $id) { return %akas; } - $akas{$hostmask} = { hostmask => $hostmask, id => $id }; $ids{$id} = $id; my $sth = $self->{dbh}->prepare('SELECT alias FROM Aliases WHERE id = ?'); @@ -972,7 +971,18 @@ sub get_also_known_as { my $rows = $sth->fetchall_arrayref({}); foreach my $row (@$rows) { - $ids{$row->{alias}} = $row->{alias}; + $ids{$row->{alias}} = $id; + } + + foreach my $id (keys %ids) { + my $sth = $self->{dbh}->prepare('SELECT alias FROM Aliases WHERE id = ?'); + $sth->bind_param(1, $id); + $sth->execute(); + my $rows = $sth->fetchall_arrayref({}); + + foreach my $row (@$rows) { + $ids{$row->{alias}} = $id; + } } foreach my $id (keys %ids) { @@ -982,7 +992,7 @@ sub get_also_known_as { $rows = $sth->fetchall_arrayref({}); foreach my $row (@$rows) { - $akas{$row->{hostmask}} = { hostmask => $row->{hostmask}, id => $id }; + $akas{$row->{hostmask}} = { hostmask => $row->{hostmask}, id => $id, alias => $ids{$id} }; } $sth = $self->{dbh}->prepare('SELECT nickserv FROM Nickserv WHERE id = ?');