X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=lib%2FOnis%2FPlugins%2FInterestingnumbers.pm;h=4397db6a883481aa3385bb963046238306c80bb6;hb=8d1eb6e92325eb096b6221fed7dbe785cd676936;hp=a397bd7ccb68a9c5b504a94f7fb2abaaae90e036;hpb=29beb25ba6496e8eb5073f65dccd029ce7d2181d;p=onis.git
diff --git a/lib/Onis/Plugins/Interestingnumbers.pm b/lib/Onis/Plugins/Interestingnumbers.pm
index a397bd7..4397db6 100644
--- a/lib/Onis/Plugins/Interestingnumbers.pm
+++ b/lib/Onis/Plugins/Interestingnumbers.pm
@@ -3,12 +3,16 @@ package Onis::Plugins::Interestingnumbers;
use strict;
use warnings;
+use Exporter;
+
use Onis::Config (qw(get_config));
use Onis::Html (qw(html_escape get_filehandle));
use Onis::Language (qw(translate));
-use Onis::Data::Core (qw(nick_to_ident register_plugin));
+use Onis::Data::Core (qw(register_plugin get_main_nick nick_to_name));
+use Onis::Data::Persistent;
-our $SOLILOQUIES = {};
+@Onis::Plugins::Interestingnumbers::EXPORT_OK = (qw(get_interestingnumbers));
+@Onis::Plugins::Interestingnumbers::ISA = ('Exporter');
register_plugin ('ACTION', \&add_action);
register_plugin ('JOIN', \&add_join);
@@ -17,7 +21,12 @@ register_plugin ('MODE', \&add_mode);
register_plugin ('TEXT', \&add_text);
register_plugin ('OUTPUT', \&output);
-our $InterestingNumbersCache = ('InterestingNumbersCache', 'nick', qw(actions joins kicks_given kicks_received modes soliloquies));
+our $InterestingNumbersCache = Onis::Data::Persistent->new ('InterestingNumbersCache', 'nick',
+ qw(actions joins kick_given kick_received op_given op_taken soliloquies));
+our $InterestingNumbersData = {};
+
+our $SoliloquiesNick = '';
+our $SoliloquiesCount = 0;
our $SOLILOQUIES_COUNT = 5;
if (get_config ('soliloquies_count'))
@@ -33,51 +42,55 @@ print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
return (1);
+sub get_or_empty
+{
+ my $nick = shift;
+ my @data = $InterestingNumbersCache->get ($nick);
+ @data = (0, 0, 0, 0, 0, 0, 0) unless (@data);
+ return (@data);
+}
+
sub add_action
{
my $data = shift;
my $nick = $data->{'nick'};
- my $ident = $data->{'ident'};
-
- $DATA->{'byident'}{$ident}{'actions'}++;
-
- return (1);
+ my @data = get_or_empty ($nick);
+ $data[0]++;
+ $InterestingNumbersCache->put ($nick, @data);
}
sub add_join
{
my $data = shift;
+ my $nick = $data->{'nick'};
- my $ident = $data->{'ident'};
-
- $DATA->{'byident'}{$ident}{'joins'}++;
-
- return (1);
+ my @data = get_or_empty ($nick);
+ $data[1]++;
+ $InterestingNumbersCache->put ($nick, @data);
}
sub add_kick
{
my $data = shift;
- my $ident_give = $data->{'ident'};
- my $ident_rcvt = nick_to_ident ($data->{'nick_received'});
+ my $nick_g = $data->{'nick'};
+ my $nick_r = $data->{'nick_received'};
- $DATA->{'byident'}{$ident_give}{'kick_given'}++;
+ my @data = get_or_empty ($nick_g);
+ $data[2]++;
+ $InterestingNumbersCache->put ($nick_g, @data);
- if ($ident_rcvt)
- {
- $DATA->{'byident'}{$ident_rcvt}{'kick_received'}++;
- }
-
- return (1);
+ @data = get_or_empty ($nick_r);
+ $data[3]++;
+ $InterestingNumbersCache->put ($nick_r, @data);
}
sub add_mode
{
my $data = shift;
- my $ident = $data->{'ident'};
+ my $nick = $data->{'nick'};
my $text = $data->{'mode'};
my ($mode) = split (m/\s+/, $text);
@@ -91,21 +104,21 @@ sub add_mode
$modifier = $tmp;
next;
}
- elsif (!$modifier)
- {
- next;
- }
+ next unless ($modifier);
+
if ($tmp eq 'o')
{
+ my @data = get_or_empty ($nick);
if ($modifier eq '-')
{
- $DATA->{'byident'}{$ident}{'op_taken'}++;
+ $data[5]++;
}
else # ($modifier eq '+')
{
- $DATA->{'byident'}{$ident}{'op_given'}++;
+ $data[4]++;
}
+ $InterestingNumbersCache->put ($nick, @data);
}
}
@@ -116,37 +129,75 @@ sub add_text
{
my $data = shift;
- my $ident = $data->{'ident'};
+ my $nick = $data->{'nick'};
- if (!defined ($SOLILOQUIES->{'ident'}))
+ if ($nick eq $SoliloquiesNick)
{
- $SOLILOQUIES->{'ident'} = $ident;
- $SOLILOQUIES->{'count'} = 1;
+ $SoliloquiesCount++;
+
+ if ($SoliloquiesCount == $SOLILOQUIES_COUNT)
+ {
+ my @data = get_or_empty ($nick);
+ $data[6]++;
+ $InterestingNumbersCache->put ($nick, @data);
+ }
}
else
{
- if ($SOLILOQUIES->{'ident'} eq $ident)
+ $SoliloquiesNick = $nick;
+ $SoliloquiesCount = 1;
+ }
+}
+
+sub calculate
+{
+ for ($InterestingNumbersCache->keys ())
+ {
+ my $nick = $_;
+ my ($actions, $joins,
+ $kick_given, $kick_received,
+ $op_given, $op_taken,
+ $soliloquies) = $InterestingNumbersCache->get ($nick);
+ my $main = get_main_nick ($nick);
+
+ next unless ($main);
+ next unless (defined ($soliloquies)); # Person has not written a single line, eg. bots..
+
+ if (!defined ($InterestingNumbersData->{$main}))
{
- my $count = ++$SOLILOQUIES->{'count'};
- if ($count == $SOLILOQUIES_COUNT)
+ $InterestingNumbersData->{$main} =
{
- $DATA->{'byident'}{$ident}{'soliloquies'}++;
- }
- }
- else
- {
- $SOLILOQUIES->{'ident'} = $ident;
- $SOLILOQUIES->{'count'} = 1;
+ actions => 0,
+ joins => 0,
+ kick_given => 0,
+ kick_received => 0,
+ op_given => 0,
+ op_taken => 0,
+ soliloquies => 0
+ };
}
- }
- return (1);
+ $InterestingNumbersData->{$main}{'actions'} += $actions;
+ $InterestingNumbersData->{$main}{'joins'} += $joins;
+ $InterestingNumbersData->{$main}{'kick_given'} += $kick_given;
+ $InterestingNumbersData->{$main}{'kick_received'} += $kick_received;
+ $InterestingNumbersData->{$main}{'op_given'} += $op_given;
+ $InterestingNumbersData->{$main}{'op_taken'} += $op_taken;
+ $InterestingNumbersData->{$main}{'soliloquies'} += $soliloquies;
+ }
}
+
+
+
sub output
{
- my $first;
- my $second;
+ calculate ();
+
+ my $first_nick;
+ my $first_name;
+ my $second_nick;
+ my $second_name;
my $fh = get_filehandle ();
@@ -158,161 +209,175 @@ sub output
$trans |
EOF
- ($first, $second) = sort_by_field ('kick_received');
- if ($first)
+ ($first_nick, $second_nick) = sort_by_field ('kick_received');
+ if ($first_nick)
{
- my $num = $DATA->{'byname'}{$first}{'kick_received'};
+ my $num = $InterestingNumbersData->{$first_nick}{'kick_received'};
$trans = translate ('kick_received0: %s %u');
+ $first_name = nick_to_name ($first_nick) || $first_nick;
print $fh " \n ";
- printf $fh ($trans, $first, $num);
+ printf $fh ($trans, $first_nick, $num);
- if ($second)
+ if ($second_nick)
{
- $num = $DATA->{'byname'}{$second}{'kick_received'};
+ $num = $InterestingNumbersData->{$second_nick}{'kick_received'};
$trans = translate ('kick_received1: %s %u');
+ $second_name = nick_to_name ($second_nick) || $second_nick;
print $fh " \n",
qq# #;
- printf $fh ($trans, $second, $num);
+ printf $fh ($trans, $second_nick, $num);
print $fh '';
}
print $fh " | \n
\n";
}
- ($first, $second) = sort_by_field ('kick_given');
- if ($first)
+ ($first_nick, $second_nick) = sort_by_field ('kick_given');
+ if ($first_nick)
{
- my $num = $DATA->{'byname'}{$first}{'kick_given'};
+ my $num = $InterestingNumbersData->{$first_nick}{'kick_given'};
$trans = translate ('kick_given0: %s %u');
+ $first_name = nick_to_name ($first_nick) || $first_nick;
print $fh " \n ";
- printf $fh ($trans, $first, $num);
+ printf $fh ($trans, $first_name, $num);
- if ($second)
+ if ($second_nick)
{
- $num = $DATA->{'byname'}{$second}{'kick_given'};
+ $num = $InterestingNumbersData->{$second_nick}{'kick_given'};
$trans = translate ('kick_given1: %s %u');
+ $second_name = nick_to_name ($second_nick) || $second_nick;
print $fh " \n",
qq# #;
- printf $fh ($trans, $second, $num);
+ printf $fh ($trans, $second_name, $num);
print $fh '';
}
print $fh " | \n
\n";
}
- ($first, $second) = sort_by_field ('op_given');
- if ($first)
+ ($first_nick, $second_nick) = sort_by_field ('op_given');
+ if ($first_nick)
{
- my $num = $DATA->{'byname'}{$first}{'op_given'};
+ my $num = $InterestingNumbersData->{$first_nick}{'op_given'};
$trans = translate ('op_given0: %s %u');
+ $first_name = nick_to_name ($first_nick) || $first_nick;
print $fh " \n ";
- printf $fh ($trans, $first, $num);
+ printf $fh ($trans, $first_name, $num);
- if ($second)
+ if ($second_nick)
{
- $num = $DATA->{'byname'}{$second}{'op_given'};
+ $num = $InterestingNumbersData->{$second_nick}{'op_given'};
$trans = translate ('op_given1: %s %u');
+ $second_name = nick_to_name ($second_nick) || $second_nick;
print $fh " \n",
qq# #;
- printf $fh ($trans, $second, $num);
+ printf $fh ($trans, $second_name, $num);
print $fh '';
}
print $fh " | \n
\n";
}
- ($first, $second) = sort_by_field ('op_taken');
- if ($first)
+ ($first_nick, $second_nick) = sort_by_field ('op_taken');
+ if ($first_nick)
{
- my $num = $DATA->{'byname'}{$first}{'op_taken'};
+ my $num = $InterestingNumbersData->{$first_nick}{'op_taken'};
$trans = translate ('op_taken0: %s %u');
+ $first_name = nick_to_name ($first_nick) || $first_nick;
print $fh " \n ";
- printf $fh ($trans, $first, $num);
+ printf $fh ($trans, $first_name, $num);
- if ($second)
+ if ($second_nick)
{
- $num = $DATA->{'byname'}{$second}{'op_taken'};
+ $num = $InterestingNumbersData->{$second_nick}{'op_taken'};
$trans = translate ('op_taken1: %s %u');
+ $second_name = nick_to_name ($second_nick) || $second_nick;
print $fh " \n",
qq# #;
- printf $fh ($trans, $second, $num);
+ printf $fh ($trans, $second_name, $num);
print $fh '';
}
print $fh " | \n
\n";
}
- ($first, $second) = sort_by_field ('actions');
- if ($first)
+ ($first_nick, $second_nick) = sort_by_field ('actions');
+ if ($first_nick)
{
- my $num = $DATA->{'byname'}{$first}{'actions'};
+ my $num = $InterestingNumbersData->{$first_nick}{'actions'};
$trans = translate ('action0: %s %u');
+ $first_name = nick_to_name ($first_nick) || $first_nick;
print $fh " \n ";
- printf $fh ($trans, $first, $num);
+ printf $fh ($trans, $first_name, $num);
- if ($second)
+ if ($second_nick)
{
- $num = $DATA->{'byname'}{$second}{'actions'};
+ $num = $InterestingNumbersData->{$second_nick}{'actions'};
$trans = translate ('action1: %s %u');
+ $second_name = nick_to_name ($second_nick) || $second_nick;
print $fh " \n",
qq# #;
- printf $fh ($trans, $second, $num);
+ printf $fh ($trans, $second_name, $num);
print $fh '';
}
print $fh " | \n
\n";
}
- ($first, $second) = sort_by_field ('soliloquies');
- if ($first)
+ ($first_nick, $second_nick) = sort_by_field ('soliloquies');
+ if ($first_nick)
{
- my $num = $DATA->{'byname'}{$first}{'soliloquies'};
+ my $num = $InterestingNumbersData->{$first_nick}{'soliloquies'};
$trans = translate ('soliloquies0: %s %u');
+ $first_name = nick_to_name ($first_nick) || $first_nick;
print $fh " \n ";
- printf $fh ($trans, $first, $num);
+ printf $fh ($trans, $first_name, $num);
- if ($second)
+ if ($second_nick)
{
- $num = $DATA->{'byname'}{$second}{'soliloquies'};
+ $num = $InterestingNumbersData->{$second_nick}{'soliloquies'};
$trans = translate ('soliloquies1: %s %u');
+ $second_name = nick_to_name ($second_nick) || $second_nick;
print $fh " \n",
qq# #;
- printf $fh ($trans, $second, $num);
+ printf $fh ($trans, $second_name, $num);
print $fh '';
}
print $fh " | \n
\n";
}
- ($first, $second) = sort_by_field ('joins');
- if ($first)
+ ($first_nick, $second_nick) = sort_by_field ('joins');
+ if ($first_nick)
{
- my $num = $DATA->{'byname'}{$first}{'joins'};
+ my $num = $InterestingNumbersData->{$first_nick}{'joins'};
$trans = translate ('joins0: %s %u');
+ $first_name = nick_to_name ($first_nick) || $first_nick;
print $fh " \n ";
- printf $fh ($trans, $first, $num);
+ printf $fh ($trans, $first_name, $num);
- if ($second)
+ if ($second_nick)
{
- $num = $DATA->{'byname'}{$second}{'joins'};
+ $num = $InterestingNumbersData->{$second_nick}{'joins'};
$trans = translate ('joins1: %s %u');
+ $second_name = nick_to_name ($second_nick) || $second_nick;
print $fh " \n",
qq# #;
- printf $fh ($trans, $second, $num);
+ printf $fh ($trans, $second_name, $num);
print $fh '';
}
@@ -328,15 +393,10 @@ sub sort_by_field
my @retval = sort
{
- $DATA->{'byname'}{$b}{$field}
+ $InterestingNumbersData->{$b}{$field}
<=>
- $DATA->{'byname'}{$a}{$field}
- } grep
- {
- defined ($DATA->{'byname'}{$_}{$field})
- and defined ($DATA->{'byname'}{$_}{'lines'})
- and ($DATA->{'byname'}{$_}{'lines'} >= 100)
- } (keys (%{$DATA->{'byname'}}));
+ $InterestingNumbersData->{$a}{$field}
+ } (keys (%$InterestingNumbersData));
while (scalar (@retval) < 2)
{
@@ -345,3 +405,15 @@ sub sort_by_field
return (@retval);
}
+
+sub get_interestingnumbers
+{
+ my $nick = shift;
+
+ if (!defined ($InterestingNumbersData->{$nick}))
+ {
+ return ({});
+ }
+
+ return ($InterestingNumbersData->{$nick});
+}
|