1 package Onis::Plugins::Interestingnumbers;
8 use Onis::Config (qw(get_config));
9 use Onis::Html (qw(html_escape get_filehandle));
10 use Onis::Language (qw(translate));
11 use Onis::Data::Core (qw(register_plugin get_main_nick nick_to_name));
12 use Onis::Data::Persistent;
16 Onis::Plugins::Interestingnumbers
20 Counts actions, joins, given and received kicks and ops and soliloquies for
21 each nick and prints the most significant nicks in a table.
25 @Onis::Plugins::Interestingnumbers::EXPORT_OK = (qw(get_interestingnumbers));
26 @Onis::Plugins::Interestingnumbers::ISA = ('Exporter');
28 register_plugin ('ACTION', \&add_action);
29 register_plugin ('JOIN', \&add_join);
30 register_plugin ('KICK', \&add_kick);
31 register_plugin ('MODE', \&add_mode);
32 register_plugin ('TEXT', \&add_text);
33 register_plugin ('OUTPUT', \&output);
35 our $InterestingNumbersCache = Onis::Data::Persistent->new ('InterestingNumbersCache', 'nick',
36 qw(actions joins kick_given kick_received op_given op_taken soliloquies));
37 our $InterestingNumbersData = {};
39 our $SoliloquiesNick = '';
40 our $SoliloquiesCount = 0;
42 our $SOLILOQUIES_COUNT = 5;
43 if (get_config ('soliloquies_count'))
45 my $tmp = get_config ('soliloquies_count');
48 $SOLILOQUIES_COUNT = $tmp if ($tmp);
52 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
59 my @data = $InterestingNumbersCache->get ($nick);
60 @data = (0, 0, 0, 0, 0, 0, 0) unless (@data);
67 my $nick = $data->{'nick'};
69 my @data = get_or_empty ($nick);
71 $InterestingNumbersCache->put ($nick, @data);
77 my $nick = $data->{'nick'};
79 my @data = get_or_empty ($nick);
81 $InterestingNumbersCache->put ($nick, @data);
88 my $nick_g = $data->{'nick'};
89 my $nick_r = $data->{'nick_received'};
91 my @data = get_or_empty ($nick_g);
93 $InterestingNumbersCache->put ($nick_g, @data);
95 @data = get_or_empty ($nick_r);
97 $InterestingNumbersCache->put ($nick_r, @data);
104 my $nick = $data->{'nick'};
105 my $text = $data->{'mode'};
107 my ($mode) = split (m/\s+/, $text);
110 for (split (m//, $mode))
113 if (($tmp eq '-') or ($tmp eq '+'))
119 next unless ($modifier);
123 my @data = get_or_empty ($nick);
124 if ($modifier eq '-')
128 else # ($modifier eq '+')
132 $InterestingNumbersCache->put ($nick, @data);
143 my $nick = $data->{'nick'};
145 if ($nick eq $SoliloquiesNick)
149 if ($SoliloquiesCount == $SOLILOQUIES_COUNT)
151 my @data = get_or_empty ($nick);
153 $InterestingNumbersCache->put ($nick, @data);
158 $SoliloquiesNick = $nick;
159 $SoliloquiesCount = 1;
165 for ($InterestingNumbersCache->keys ())
168 my ($actions, $joins,
169 $kick_given, $kick_received,
170 $op_given, $op_taken,
171 $soliloquies) = $InterestingNumbersCache->get ($nick);
172 my $main = get_main_nick ($nick);
175 next unless (defined ($soliloquies)); # Person has not written a single line, eg. bots..
177 if (!defined ($InterestingNumbersData->{$main}))
179 $InterestingNumbersData->{$main} =
191 $InterestingNumbersData->{$main}{'actions'} += $actions;
192 $InterestingNumbersData->{$main}{'joins'} += $joins;
193 $InterestingNumbersData->{$main}{'kick_given'} += $kick_given;
194 $InterestingNumbersData->{$main}{'kick_received'} += $kick_received;
195 $InterestingNumbersData->{$main}{'op_given'} += $op_given;
196 $InterestingNumbersData->{$main}{'op_taken'} += $op_taken;
197 $InterestingNumbersData->{$main}{'soliloquies'} += $soliloquies;
213 my $fh = get_filehandle ();
215 my $trans = translate ('Interesting Numbers');
218 <table class="plugin interestingnumbers">
223 ($first_nick, $second_nick) = sort_by_field ('kick_received');
226 my $num = $InterestingNumbersData->{$first_nick}{'kick_received'};
227 $trans = translate ('kick_received0: %s %u');
228 $first_name = nick_to_name ($first_nick) || $first_nick;
230 print $fh " <tr>\n <td>";
231 printf $fh ($trans, $first_nick, $num);
235 $num = $InterestingNumbersData->{$second_nick}{'kick_received'};
236 $trans = translate ('kick_received1: %s %u');
237 $second_name = nick_to_name ($second_nick) || $second_nick;
239 print $fh "<br />\n",
240 qq# <span class="small">#;
241 printf $fh ($trans, $second_nick, $num);
245 print $fh "</td>\n </tr>\n";
248 ($first_nick, $second_nick) = sort_by_field ('kick_given');
251 my $num = $InterestingNumbersData->{$first_nick}{'kick_given'};
252 $trans = translate ('kick_given0: %s %u');
253 $first_name = nick_to_name ($first_nick) || $first_nick;
255 print $fh " <tr>\n <td>";
256 printf $fh ($trans, $first_name, $num);
260 $num = $InterestingNumbersData->{$second_nick}{'kick_given'};
261 $trans = translate ('kick_given1: %s %u');
262 $second_name = nick_to_name ($second_nick) || $second_nick;
264 print $fh "<br />\n",
265 qq# <span class="small">#;
266 printf $fh ($trans, $second_name, $num);
270 print $fh "</td>\n </tr>\n";
273 ($first_nick, $second_nick) = sort_by_field ('op_given');
276 my $num = $InterestingNumbersData->{$first_nick}{'op_given'};
277 $trans = translate ('op_given0: %s %u');
278 $first_name = nick_to_name ($first_nick) || $first_nick;
280 print $fh " <tr>\n <td>";
281 printf $fh ($trans, $first_name, $num);
285 $num = $InterestingNumbersData->{$second_nick}{'op_given'};
286 $trans = translate ('op_given1: %s %u');
287 $second_name = nick_to_name ($second_nick) || $second_nick;
289 print $fh "<br />\n",
290 qq# <span class="small">#;
291 printf $fh ($trans, $second_name, $num);
295 print $fh "</td>\n </tr>\n";
298 ($first_nick, $second_nick) = sort_by_field ('op_taken');
301 my $num = $InterestingNumbersData->{$first_nick}{'op_taken'};
302 $trans = translate ('op_taken0: %s %u');
303 $first_name = nick_to_name ($first_nick) || $first_nick;
305 print $fh " <tr>\n <td>";
306 printf $fh ($trans, $first_name, $num);
310 $num = $InterestingNumbersData->{$second_nick}{'op_taken'};
311 $trans = translate ('op_taken1: %s %u');
312 $second_name = nick_to_name ($second_nick) || $second_nick;
314 print $fh "<br />\n",
315 qq# <span class="small">#;
316 printf $fh ($trans, $second_name, $num);
320 print $fh "</td>\n </tr>\n";
323 ($first_nick, $second_nick) = sort_by_field ('actions');
326 my $num = $InterestingNumbersData->{$first_nick}{'actions'};
327 $trans = translate ('action0: %s %u');
328 $first_name = nick_to_name ($first_nick) || $first_nick;
330 print $fh " <tr>\n <td>";
331 printf $fh ($trans, $first_name, $num);
335 $num = $InterestingNumbersData->{$second_nick}{'actions'};
336 $trans = translate ('action1: %s %u');
337 $second_name = nick_to_name ($second_nick) || $second_nick;
339 print $fh "<br />\n",
340 qq# <span class="small">#;
341 printf $fh ($trans, $second_name, $num);
345 print $fh "</td>\n </tr>\n";
348 ($first_nick, $second_nick) = sort_by_field ('soliloquies');
351 my $num = $InterestingNumbersData->{$first_nick}{'soliloquies'};
352 $trans = translate ('soliloquies0: %s %u');
353 $first_name = nick_to_name ($first_nick) || $first_nick;
355 print $fh " <tr>\n <td>";
356 printf $fh ($trans, $first_name, $num);
360 $num = $InterestingNumbersData->{$second_nick}{'soliloquies'};
361 $trans = translate ('soliloquies1: %s %u');
362 $second_name = nick_to_name ($second_nick) || $second_nick;
364 print $fh "<br />\n",
365 qq# <span class="small">#;
366 printf $fh ($trans, $second_name, $num);
370 print $fh "</td>\n </tr>\n";
373 ($first_nick, $second_nick) = sort_by_field ('joins');
376 my $num = $InterestingNumbersData->{$first_nick}{'joins'};
377 $trans = translate ('joins0: %s %u');
378 $first_name = nick_to_name ($first_nick) || $first_nick;
380 print $fh " <tr>\n <td>";
381 printf $fh ($trans, $first_name, $num);
385 $num = $InterestingNumbersData->{$second_nick}{'joins'};
386 $trans = translate ('joins1: %s %u');
387 $second_name = nick_to_name ($second_nick) || $second_nick;
389 print $fh "<br />\n",
390 qq# <span class="small">#;
391 printf $fh ($trans, $second_name, $num);
395 print $fh "</td>\n </tr>\n";
398 print $fh "</table>\n\n";
407 $InterestingNumbersData->{$b}{$field}
409 $InterestingNumbersData->{$a}{$field}
410 } (keys (%$InterestingNumbersData));
412 while (scalar (@retval) < 2)
420 =head1 EXPORTED FUNCTIONS
424 =item B<get_interestingnumbers> (I<$nick>)
426 Returns a hash-ref with the interesting numbers (counters) for this nick. The
427 hash-ref has the following fields:
439 sub get_interestingnumbers
443 if (!defined ($InterestingNumbersData->{$nick}))
448 return ($InterestingNumbersData->{$nick});
455 Florian octo Forster, E<lt>octo at verplant.orgE<gt>