1 package Onis::Plugins::Interestingnumbers;
6 use Onis::Config (qw(get_config));
7 use Onis::Html (qw(html_escape get_filehandle));
8 use Onis::Language (qw(translate));
9 use Onis::Data::Core (qw(register_plugin));
10 use Onis::Data::Persistent;
11 use Onis::Users (qw(nick_to_name));
13 register_plugin ('ACTION', \&add_action);
14 register_plugin ('JOIN', \&add_join);
15 register_plugin ('KICK', \&add_kick);
16 register_plugin ('MODE', \&add_mode);
17 register_plugin ('TEXT', \&add_text);
18 register_plugin ('OUTPUT', \&output);
20 our $InterestingNumbersCache = Onis::Data::Persistent->new ('InterestingNumbersCache', 'nick', qw(actions joins kicks_given kicks_received ops_given ops_taken soliloquies));
21 our $InterestingNumbersData = {};
23 our $SoliloquiesNick = '';
24 our $SoliloquiesCount = 0;
26 our $SOLILOQUIES_COUNT = 5;
27 if (get_config ('soliloquies_count'))
29 my $tmp = get_config ('soliloquies_count');
32 $SOLILOQUIES_COUNT = $tmp if ($tmp);
36 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
43 my @data = $InterestingNumbersCache->get ($nick);
44 @data = (0, 0, 0, 0, 0, 0) unless (@data);
51 my $nick = $data->{'nick'};
53 my @data = get_or_empty ($nick);
55 $InterestingNumbersCache->put ($nick, @data);
61 my $nick = $data->{'nick'};
63 my @data = get_or_empty ($nick);
65 $InterestingNumbersCache->put ($nick, @data);
72 my $nick_g = $data->{'nick'};
73 my $nick_r = $data->{'nick_received'};
75 my @data = get_or_empty ($nick_g);
77 $InterestingNumbersCache->put ($nick_g, @data);
79 @data = get_or_empty ($nick_r);
81 $InterestingNumbersCache->put ($nick_r, @data);
88 my $nick = $data->{'nick'};
89 my $text = $data->{'mode'};
91 my ($mode) = split (m/\s+/, $text);
94 for (split (m//, $mode))
97 if (($tmp eq '-') or ($tmp eq '+'))
103 next unless ($modifier);
107 my @data = get_or_empty ($nick);
108 if ($modifier eq '-')
112 else # ($modifier eq '+')
126 my $nick = $data->{'nick'};
128 if ($nick eq $SoliloquiesNick)
132 if ($SoliloquiesCount == $SOLILOQUIES_COUNT)
134 my @data = get_or_empty ($nick);
136 $InterestingNumbersCache->put ($nick, @data);
141 $SoliloquiesNick = $nick;
142 $SoliloquiesCount = 1;
148 for ($InterestingNumbersCache->keys ())
151 my ($actions, $joins,
152 $kicks_given, $kicks_received,
153 $ops_given, $ops_taken,
154 $soliloquies) = $InterestingNumbersCache->get ($nick);
155 my $main = get_main_nick ($nick);
159 if (!defined ($InterestingNumbersData->{$main}))
161 $InterestingNumbersData->{$main} =
173 $InterestingNumbersData->{$main}{'actions'} += $actions;
174 $InterestingNumbersData->{$main}{'joins'} += $joins;
175 $InterestingNumbersData->{$main}{'kicks_given'} += $kicks_given;
176 $InterestingNumbersData->{$main}{'kicks_received'} += $kicks_received;
177 $InterestingNumbersData->{$main}{'ops_given'} += $ops_given;
178 $InterestingNumbersData->{$main}{'ops_taken'} += $ops_taken;
179 $InterestingNumbersData->{$main}{'soliloquies'} += $soliloquies;
195 my $fh = get_filehandle ();
197 my $trans = translate ('Interesting Numbers');
200 <table class="plugin interestingnumbers">
205 ($first_nick, $second_nick) = sort_by_field ('kick_received');
208 my $num = $InterestingNumbersData->{$first_nick}{'kick_received'};
209 $trans = translate ('kick_received0: %s %u');
210 $first_name = nick_to_name ($first_nick) || $first_nick;
212 print $fh " <tr>\n <td>";
213 printf $fh ($trans, $first_nick, $num);
217 $num = $InterestingNumbersData->{$second_nick}{'kick_received'};
218 $trans = translate ('kick_received1: %s %u');
219 $second_name = nick_to_name ($second_nick) || $second_nick;
221 print $fh "<br />\n",
222 qq# <span class="small">#;
223 printf $fh ($trans, $second_nick, $num);
227 print $fh "</td>\n </tr>\n";
230 ($first_nick, $second_nick) = sort_by_field ('kick_given');
233 my $num = $InterestingNumbersData->{$first_nick}{'kick_given'};
234 $trans = translate ('kick_given0: %s %u');
235 $first_name = nick_to_name ($first_nick) || $first_nick;
237 print $fh " <tr>\n <td>";
238 printf $fh ($trans, $first_name, $num);
242 $num = $InterestingNumbersData->{$second_nick}{'kick_given'};
243 $trans = translate ('kick_given1: %s %u');
244 $second_name = nick_to_name ($second_nick) || $second_nick;
246 print $fh "<br />\n",
247 qq# <span class="small">#;
248 printf $fh ($trans, $second_name, $num);
252 print $fh "</td>\n </tr>\n";
255 ($first_nick, $second_nick) = sort_by_field ('op_given');
258 my $num = $InterestingNumbersData->{$first_nick}{'op_given'};
259 $trans = translate ('op_given0: %s %u');
260 $first_name = nick_to_name ($first_nick) || $first_nick;
262 print $fh " <tr>\n <td>";
263 printf $fh ($trans, $first_name, $num);
267 $num = $InterestingNumbersData->{$second_nick}{'op_given'};
268 $trans = translate ('op_given1: %s %u');
269 $second_name = nick_to_name ($second_nick) || $second_nick;
271 print $fh "<br />\n",
272 qq# <span class="small">#;
273 printf $fh ($trans, $second_name, $num);
277 print $fh "</td>\n </tr>\n";
280 ($first_nick, $second_nick) = sort_by_field ('op_taken');
283 my $num = $InterestingNumbersData->{$first_nick}{'op_taken'};
284 $trans = translate ('op_taken0: %s %u');
285 $first_name = nick_to_name ($first_nick) || $first_nick;
287 print $fh " <tr>\n <td>";
288 printf $fh ($trans, $first_name, $num);
292 $num = $InterestingNumbersData->{$second_nick}{'op_taken'};
293 $trans = translate ('op_taken1: %s %u');
294 $second_name = nick_to_name ($second_nick) || $second_nick;
296 print $fh "<br />\n",
297 qq# <span class="small">#;
298 printf $fh ($trans, $second_name, $num);
302 print $fh "</td>\n </tr>\n";
305 ($first_nick, $second_nick) = sort_by_field ('actions');
308 my $num = $InterestingNumbersData->{$first_nick}{'actions'};
309 $trans = translate ('action0: %s %u');
310 $first_name = nick_to_name ($first_nick) || $first_nick;
312 print $fh " <tr>\n <td>";
313 printf $fh ($trans, $first_name, $num);
317 $num = $InterestingNumbersData->{$second_nick}{'actions'};
318 $trans = translate ('action1: %s %u');
319 $second_name = nick_to_name ($second_nick) || $second_nick;
321 print $fh "<br />\n",
322 qq# <span class="small">#;
323 printf $fh ($trans, $second_name, $num);
327 print $fh "</td>\n </tr>\n";
330 ($first_nick, $second_nick) = sort_by_field ('soliloquies');
333 my $num = $InterestingNumbersData->{$first_nick}{'soliloquies'};
334 $trans = translate ('soliloquies0: %s %u');
335 $first_name = nick_to_name ($first_nick) || $first_nick;
337 print $fh " <tr>\n <td>";
338 printf $fh ($trans, $first_name, $num);
342 $num = $InterestingNumbersData->{$second_nick}{'soliloquies'};
343 $trans = translate ('soliloquies1: %s %u');
344 $second_name = nick_to_name ($second_nick) || $second_nick;
346 print $fh "<br />\n",
347 qq# <span class="small">#;
348 printf $fh ($trans, $second_name, $num);
352 print $fh "</td>\n </tr>\n";
355 ($first_nick, $second_nick) = sort_by_field ('joins');
358 my $num = $InterestingNumbersData->{$first_nick}{'joins'};
359 $trans = translate ('joins0: %s %u');
360 $first_name = nick_to_name ($first_nick) || $first_nick;
362 print $fh " <tr>\n <td>";
363 printf $fh ($trans, $first_name, $num);
367 $num = $InterestingNumbersData->{$second_nick}{'joins'};
368 $trans = translate ('joins1: %s %u');
369 $second_name = nick_to_name ($second_nick) || $second_nick;
371 print $fh "<br />\n",
372 qq# <span class="small">#;
373 printf $fh ($trans, $second_name, $num);
377 print $fh "</td>\n </tr>\n";
380 print $fh "</table>\n\n";
389 $InterestingNumbersData->{$b}{$field}
391 $InterestingNumbersData->{$a}{$field}
392 } (keys (%$InterestingNumbersData));
394 while (scalar (@retval) < 2)