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;
14 @Onis::Plugins::Interestingnumbers::EXPORT_OK = (qw(get_interestingnumbers));
15 @Onis::Plugins::Interestingnumbers::ISA = ('Exporter');
17 register_plugin ('ACTION', \&add_action);
18 register_plugin ('JOIN', \&add_join);
19 register_plugin ('KICK', \&add_kick);
20 register_plugin ('MODE', \&add_mode);
21 register_plugin ('TEXT', \&add_text);
22 register_plugin ('OUTPUT', \&output);
24 our $InterestingNumbersCache = Onis::Data::Persistent->new ('InterestingNumbersCache', 'nick',
25 qw(actions joins kicks_given kicks_received ops_given ops_taken soliloquies));
26 our $InterestingNumbersData = {};
28 our $SoliloquiesNick = '';
29 our $SoliloquiesCount = 0;
31 our $SOLILOQUIES_COUNT = 5;
32 if (get_config ('soliloquies_count'))
34 my $tmp = get_config ('soliloquies_count');
37 $SOLILOQUIES_COUNT = $tmp if ($tmp);
41 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
48 my @data = $InterestingNumbersCache->get ($nick);
49 @data = (0, 0, 0, 0, 0, 0, 0) unless (@data);
56 my $nick = $data->{'nick'};
58 my @data = get_or_empty ($nick);
60 $InterestingNumbersCache->put ($nick, @data);
66 my $nick = $data->{'nick'};
68 my @data = get_or_empty ($nick);
70 $InterestingNumbersCache->put ($nick, @data);
77 my $nick_g = $data->{'nick'};
78 my $nick_r = $data->{'nick_received'};
80 my @data = get_or_empty ($nick_g);
82 $InterestingNumbersCache->put ($nick_g, @data);
84 @data = get_or_empty ($nick_r);
86 $InterestingNumbersCache->put ($nick_r, @data);
93 my $nick = $data->{'nick'};
94 my $text = $data->{'mode'};
96 my ($mode) = split (m/\s+/, $text);
99 for (split (m//, $mode))
102 if (($tmp eq '-') or ($tmp eq '+'))
108 next unless ($modifier);
112 my @data = get_or_empty ($nick);
113 if ($modifier eq '-')
117 else # ($modifier eq '+')
131 my $nick = $data->{'nick'};
133 if ($nick eq $SoliloquiesNick)
137 if ($SoliloquiesCount == $SOLILOQUIES_COUNT)
139 my @data = get_or_empty ($nick);
141 $InterestingNumbersCache->put ($nick, @data);
146 $SoliloquiesNick = $nick;
147 $SoliloquiesCount = 1;
153 for ($InterestingNumbersCache->keys ())
156 my ($actions, $joins,
157 $kicks_given, $kicks_received,
158 $ops_given, $ops_taken,
159 $soliloquies) = $InterestingNumbersCache->get ($nick);
160 my $main = get_main_nick ($nick);
164 if (!defined ($InterestingNumbersData->{$main}))
166 $InterestingNumbersData->{$main} =
178 $InterestingNumbersData->{$main}{'actions'} += $actions;
179 $InterestingNumbersData->{$main}{'joins'} += $joins;
180 $InterestingNumbersData->{$main}{'kicks_given'} += $kicks_given;
181 $InterestingNumbersData->{$main}{'kicks_received'} += $kicks_received;
182 $InterestingNumbersData->{$main}{'ops_given'} += $ops_given;
183 $InterestingNumbersData->{$main}{'ops_taken'} += $ops_taken;
184 $InterestingNumbersData->{$main}{'soliloquies'} += $soliloquies;
200 my $fh = get_filehandle ();
202 my $trans = translate ('Interesting Numbers');
205 <table class="plugin interestingnumbers">
210 ($first_nick, $second_nick) = sort_by_field ('kick_received');
213 my $num = $InterestingNumbersData->{$first_nick}{'kick_received'};
214 $trans = translate ('kick_received0: %s %u');
215 $first_name = nick_to_name ($first_nick) || $first_nick;
217 print $fh " <tr>\n <td>";
218 printf $fh ($trans, $first_nick, $num);
222 $num = $InterestingNumbersData->{$second_nick}{'kick_received'};
223 $trans = translate ('kick_received1: %s %u');
224 $second_name = nick_to_name ($second_nick) || $second_nick;
226 print $fh "<br />\n",
227 qq# <span class="small">#;
228 printf $fh ($trans, $second_nick, $num);
232 print $fh "</td>\n </tr>\n";
235 ($first_nick, $second_nick) = sort_by_field ('kick_given');
238 my $num = $InterestingNumbersData->{$first_nick}{'kick_given'};
239 $trans = translate ('kick_given0: %s %u');
240 $first_name = nick_to_name ($first_nick) || $first_nick;
242 print $fh " <tr>\n <td>";
243 printf $fh ($trans, $first_name, $num);
247 $num = $InterestingNumbersData->{$second_nick}{'kick_given'};
248 $trans = translate ('kick_given1: %s %u');
249 $second_name = nick_to_name ($second_nick) || $second_nick;
251 print $fh "<br />\n",
252 qq# <span class="small">#;
253 printf $fh ($trans, $second_name, $num);
257 print $fh "</td>\n </tr>\n";
260 ($first_nick, $second_nick) = sort_by_field ('op_given');
263 my $num = $InterestingNumbersData->{$first_nick}{'op_given'};
264 $trans = translate ('op_given0: %s %u');
265 $first_name = nick_to_name ($first_nick) || $first_nick;
267 print $fh " <tr>\n <td>";
268 printf $fh ($trans, $first_name, $num);
272 $num = $InterestingNumbersData->{$second_nick}{'op_given'};
273 $trans = translate ('op_given1: %s %u');
274 $second_name = nick_to_name ($second_nick) || $second_nick;
276 print $fh "<br />\n",
277 qq# <span class="small">#;
278 printf $fh ($trans, $second_name, $num);
282 print $fh "</td>\n </tr>\n";
285 ($first_nick, $second_nick) = sort_by_field ('op_taken');
288 my $num = $InterestingNumbersData->{$first_nick}{'op_taken'};
289 $trans = translate ('op_taken0: %s %u');
290 $first_name = nick_to_name ($first_nick) || $first_nick;
292 print $fh " <tr>\n <td>";
293 printf $fh ($trans, $first_name, $num);
297 $num = $InterestingNumbersData->{$second_nick}{'op_taken'};
298 $trans = translate ('op_taken1: %s %u');
299 $second_name = nick_to_name ($second_nick) || $second_nick;
301 print $fh "<br />\n",
302 qq# <span class="small">#;
303 printf $fh ($trans, $second_name, $num);
307 print $fh "</td>\n </tr>\n";
310 ($first_nick, $second_nick) = sort_by_field ('actions');
313 my $num = $InterestingNumbersData->{$first_nick}{'actions'};
314 $trans = translate ('action0: %s %u');
315 $first_name = nick_to_name ($first_nick) || $first_nick;
317 print $fh " <tr>\n <td>";
318 printf $fh ($trans, $first_name, $num);
322 $num = $InterestingNumbersData->{$second_nick}{'actions'};
323 $trans = translate ('action1: %s %u');
324 $second_name = nick_to_name ($second_nick) || $second_nick;
326 print $fh "<br />\n",
327 qq# <span class="small">#;
328 printf $fh ($trans, $second_name, $num);
332 print $fh "</td>\n </tr>\n";
335 ($first_nick, $second_nick) = sort_by_field ('soliloquies');
338 my $num = $InterestingNumbersData->{$first_nick}{'soliloquies'};
339 $trans = translate ('soliloquies0: %s %u');
340 $first_name = nick_to_name ($first_nick) || $first_nick;
342 print $fh " <tr>\n <td>";
343 printf $fh ($trans, $first_name, $num);
347 $num = $InterestingNumbersData->{$second_nick}{'soliloquies'};
348 $trans = translate ('soliloquies1: %s %u');
349 $second_name = nick_to_name ($second_nick) || $second_nick;
351 print $fh "<br />\n",
352 qq# <span class="small">#;
353 printf $fh ($trans, $second_name, $num);
357 print $fh "</td>\n </tr>\n";
360 ($first_nick, $second_nick) = sort_by_field ('joins');
363 my $num = $InterestingNumbersData->{$first_nick}{'joins'};
364 $trans = translate ('joins0: %s %u');
365 $first_name = nick_to_name ($first_nick) || $first_nick;
367 print $fh " <tr>\n <td>";
368 printf $fh ($trans, $first_name, $num);
372 $num = $InterestingNumbersData->{$second_nick}{'joins'};
373 $trans = translate ('joins1: %s %u');
374 $second_name = nick_to_name ($second_nick) || $second_nick;
376 print $fh "<br />\n",
377 qq# <span class="small">#;
378 printf $fh ($trans, $second_name, $num);
382 print $fh "</td>\n </tr>\n";
385 print $fh "</table>\n\n";
394 $InterestingNumbersData->{$b}{$field}
396 $InterestingNumbersData->{$a}{$field}
397 } (keys (%$InterestingNumbersData));
399 while (scalar (@retval) < 2)
407 sub get_interestingnumbers
411 if (defined ($InterestingNumbersData->{$nick}))
416 return ($InterestingNumbersData->{$nick});