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(nick_to_ident register_plugin));
11 our $SOLILOQUIES = {};
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 = ('InterestingNumbersCache', 'nick', qw(actions joins kicks_given kicks_received modes soliloquies));
22 our $SOLILOQUIES_COUNT = 5;
23 if (get_config ('soliloquies_count'))
25 my $tmp = get_config ('soliloquies_count');
28 $SOLILOQUIES_COUNT = $tmp if ($tmp);
32 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
39 my $nick = $data->{'nick'};
41 my $ident = $data->{'ident'};
43 $DATA->{'byident'}{$ident}{'actions'}++;
52 my $ident = $data->{'ident'};
54 $DATA->{'byident'}{$ident}{'joins'}++;
63 my $ident_give = $data->{'ident'};
64 my $ident_rcvt = nick_to_ident ($data->{'nick_received'});
66 $DATA->{'byident'}{$ident_give}{'kick_given'}++;
70 $DATA->{'byident'}{$ident_rcvt}{'kick_received'}++;
80 my $ident = $data->{'ident'};
81 my $text = $data->{'mode'};
83 my ($mode) = split (m/\s+/, $text);
86 for (split (m//, $mode))
89 if (($tmp eq '-') or ($tmp eq '+'))
101 if ($modifier eq '-')
103 $DATA->{'byident'}{$ident}{'op_taken'}++;
105 else # ($modifier eq '+')
107 $DATA->{'byident'}{$ident}{'op_given'}++;
119 my $ident = $data->{'ident'};
121 if (!defined ($SOLILOQUIES->{'ident'}))
123 $SOLILOQUIES->{'ident'} = $ident;
124 $SOLILOQUIES->{'count'} = 1;
128 if ($SOLILOQUIES->{'ident'} eq $ident)
130 my $count = ++$SOLILOQUIES->{'count'};
131 if ($count == $SOLILOQUIES_COUNT)
133 $DATA->{'byident'}{$ident}{'soliloquies'}++;
138 $SOLILOQUIES->{'ident'} = $ident;
139 $SOLILOQUIES->{'count'} = 1;
151 my $fh = get_filehandle ();
153 my $trans = translate ('Interesting Numbers');
156 <table class="plugin interestingnumbers">
161 ($first, $second) = sort_by_field ('kick_received');
164 my $num = $DATA->{'byname'}{$first}{'kick_received'};
165 $trans = translate ('kick_received0: %s %u');
167 print $fh " <tr>\n <td>";
168 printf $fh ($trans, $first, $num);
172 $num = $DATA->{'byname'}{$second}{'kick_received'};
173 $trans = translate ('kick_received1: %s %u');
175 print $fh "<br />\n",
176 qq# <span class="small">#;
177 printf $fh ($trans, $second, $num);
181 print $fh "</td>\n </tr>\n";
184 ($first, $second) = sort_by_field ('kick_given');
187 my $num = $DATA->{'byname'}{$first}{'kick_given'};
188 $trans = translate ('kick_given0: %s %u');
190 print $fh " <tr>\n <td>";
191 printf $fh ($trans, $first, $num);
195 $num = $DATA->{'byname'}{$second}{'kick_given'};
196 $trans = translate ('kick_given1: %s %u');
198 print $fh "<br />\n",
199 qq# <span class="small">#;
200 printf $fh ($trans, $second, $num);
204 print $fh "</td>\n </tr>\n";
207 ($first, $second) = sort_by_field ('op_given');
210 my $num = $DATA->{'byname'}{$first}{'op_given'};
211 $trans = translate ('op_given0: %s %u');
213 print $fh " <tr>\n <td>";
214 printf $fh ($trans, $first, $num);
218 $num = $DATA->{'byname'}{$second}{'op_given'};
219 $trans = translate ('op_given1: %s %u');
221 print $fh "<br />\n",
222 qq# <span class="small">#;
223 printf $fh ($trans, $second, $num);
227 print $fh "</td>\n </tr>\n";
230 ($first, $second) = sort_by_field ('op_taken');
233 my $num = $DATA->{'byname'}{$first}{'op_taken'};
234 $trans = translate ('op_taken0: %s %u');
236 print $fh " <tr>\n <td>";
237 printf $fh ($trans, $first, $num);
241 $num = $DATA->{'byname'}{$second}{'op_taken'};
242 $trans = translate ('op_taken1: %s %u');
244 print $fh "<br />\n",
245 qq# <span class="small">#;
246 printf $fh ($trans, $second, $num);
250 print $fh "</td>\n </tr>\n";
253 ($first, $second) = sort_by_field ('actions');
256 my $num = $DATA->{'byname'}{$first}{'actions'};
257 $trans = translate ('action0: %s %u');
259 print $fh " <tr>\n <td>";
260 printf $fh ($trans, $first, $num);
264 $num = $DATA->{'byname'}{$second}{'actions'};
265 $trans = translate ('action1: %s %u');
267 print $fh "<br />\n",
268 qq# <span class="small">#;
269 printf $fh ($trans, $second, $num);
273 print $fh "</td>\n </tr>\n";
276 ($first, $second) = sort_by_field ('soliloquies');
279 my $num = $DATA->{'byname'}{$first}{'soliloquies'};
280 $trans = translate ('soliloquies0: %s %u');
282 print $fh " <tr>\n <td>";
283 printf $fh ($trans, $first, $num);
287 $num = $DATA->{'byname'}{$second}{'soliloquies'};
288 $trans = translate ('soliloquies1: %s %u');
290 print $fh "<br />\n",
291 qq# <span class="small">#;
292 printf $fh ($trans, $second, $num);
296 print $fh "</td>\n </tr>\n";
299 ($first, $second) = sort_by_field ('joins');
302 my $num = $DATA->{'byname'}{$first}{'joins'};
303 $trans = translate ('joins0: %s %u');
305 print $fh " <tr>\n <td>";
306 printf $fh ($trans, $first, $num);
310 $num = $DATA->{'byname'}{$second}{'joins'};
311 $trans = translate ('joins1: %s %u');
313 print $fh "<br />\n",
314 qq# <span class="small">#;
315 printf $fh ($trans, $second, $num);
319 print $fh "</td>\n </tr>\n";
322 print $fh "</table>\n\n";
331 $DATA->{'byname'}{$b}{$field}
333 $DATA->{'byname'}{$a}{$field}
336 defined ($DATA->{'byname'}{$_}{$field})
337 and defined ($DATA->{'byname'}{$_}{'lines'})
338 and ($DATA->{'byname'}{$_}{'lines'} >= 100)
339 } (keys (%{$DATA->{'byname'}}));
341 while (scalar (@retval) < 2)