1 package Onis::Plugins::Bignumbers;
6 use Onis::Html (qw(get_filehandle));
7 use Onis::Language (qw(translate));
8 use Onis::Data::Core (qw(get_main_nick register_plugin));
9 use Onis::Data::Persistent ();
10 use Onis::Users (qw(nick_to_name));
11 use Onis::Plugins::Core (qw(get_core_nick_counters));
13 our $BigNumbers = Onis::Data::Persistent->new ('BigNumbers', 'nick', qw(questions uppercase smiley_happy smiley_sad));
16 register_plugin ('TEXT', \&add);
17 register_plugin ('ACTION', \&add);
18 register_plugin ('OUTPUT', \&output);
21 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
29 my $nick = $data->{'nick'};
30 my $text = $data->{'text'};
34 my @nums = $BigNumbers->get ($nick);
47 if ((uc ($text) eq $text) and ($text =~ m/[A-Z]/))
53 if ($text =~ m/( |^)[;:]-?\)( |$)/)
59 if ($text =~ m/( |^):-?\(( |$)/)
67 $BigNumbers->put ($nick, @nums);
75 for ($BigNumbers->keys ())
78 my $main = get_main_nick ($nick);
79 my ($questions, $uppercase, $smiley_happy, $smiley_sad) = $BigNumbers->get ($nick);
81 next unless (defined ($smiley_sad));
83 if (!defined ($CalcData->{$main}))
85 my ($lines, $words, $chars) = get_core_nick_counters ($main);
86 next unless (defined ($chars));
100 $CalcData->{$main}{'questions'} += $questions;
101 $CalcData->{$main}{'uppercase'} += $uppercase;
102 $CalcData->{$main}{'smiley_happy'} += $smiley_happy;
103 $CalcData->{$main}{'smiley_sad'} += $smiley_sad;
115 my $fh = get_filehandle ();
117 $trans = translate ('Big Numbers');
119 <table class="plugin bignumbers">
124 ($first_nick, $second_nick) = sort_by_field ('questions');
127 my $percent = 100 * $CalcData->{$first_nick}{'questions'} / $CalcData->{$first_nick}{'lines'};
128 my $trans = translate ('questions0: %s %2.1f%%');
129 $first_name = nick_to_name ($first_nick) || $first_nick;
131 print $fh " <tr>\n <td>";
132 printf $fh ($trans, $first_name, $percent);
136 $percent = 100 * $CalcData->{$second_nick}{'questions'} / $CalcData->{$second_nick}{'lines'};
137 $trans = translate ('questions1: %s %2.1f%%');
138 $second_name = nick_to_name ($second_nick) || $second_nick;
140 print $fh "<br />\n",
141 qq# <span class="small">#;
142 printf $fh ($trans, $second_name, $percent);
146 print $fh "</td>\n </tr>\n";
149 ($first_nick, $second_nick) = sort_by_field ('uppercase');
152 my $percent = 100 * $CalcData->{$first_nick}{'uppercase'} / $CalcData->{$first_nick}{'lines'};
153 my $trans = translate ('yells0: %s %2.1f%%');
154 $first_name = nick_to_name ($first_nick) || $first_nick;
156 print $fh " <tr>\n <td>";
157 printf $fh ($trans, $first_name, $percent);
161 $percent = 100 * $CalcData->{$second_nick}{'uppercase'} / $CalcData->{$second_nick}{'lines'};
162 $trans = translate ('yells1: %s %2.1f%%');
163 $second_name = nick_to_name ($second_nick) || $second_nick;
165 print $fh "<br />\n",
166 qq# <span class="small">#;
167 printf $fh ($trans, $second_name, $percent);
171 print $fh "</td>\n </tr>\n";
174 ($first_nick, $second_nick) = sort_by_field ('smiley_happy');
177 my $percent = 100 * $CalcData->{$first_nick}{'smiley_happy'} / $CalcData->{$first_nick}{'lines'};
178 my $trans = translate ('happy0: %s %2.1f%%');
179 $first_name = nick_to_name ($first_nick) || $first_nick;
181 print $fh " <tr>\n <td>";
182 printf $fh ($trans, $first_name, $percent);
186 $percent = 100 * $CalcData->{$second_nick}{'smiley_happy'} / $CalcData->{$second_nick}{'lines'};
187 $trans = translate ('happy1: %s %2.1f%%');
188 $second_name = nick_to_name ($second_nick) || $second_nick;
190 print $fh "<br />\n",
191 qq# <span class="small">#;
192 printf $fh ($trans, $second_name, $percent);
196 print $fh "</td>\n </tr>\n";
199 ($first_nick, $second_nick) = sort_by_field ('smiley_sad');
202 my $percent = 100 * $CalcData->{$first_nick}{'smiley_sad'} / $CalcData->{$first_nick}{'lines'};
203 my $trans = translate ('sad0: %s %2.1f%%');
204 $first_name = nick_to_name ($first_nick) || $first_nick;
206 print $fh " <tr>\n <td>";
207 printf $fh ($trans, $first_name, $percent);
211 $percent = 100 * $CalcData->{$second_nick}{'smiley_sad'} / $CalcData->{$second_nick}{'lines'};
212 $trans = translate ('sad1: %s %2.1f%%');
213 $second_name = nick_to_name ($second_nick) || $second_nick;
215 print $fh "<br />\n",
216 qq# <span class="small">#;
217 printf $fh ($trans, $second_name, $percent);
221 print $fh "</td>\n </tr>\n";
225 my @names = sort_by_field ('chars');
237 $chan_chars += $CalcData->{$_}{'chars'} || 0;
238 $chan_lines += $CalcData->{$_}{'lines'} || 0;
243 $longest = shift (@names);
247 $longest2 = shift (@names);
251 $shortest = pop (@names);
255 $shortest2 = pop (@names);
260 my $avg = $CalcData->{$longest}{'chars'} / $CalcData->{$longest}{'lines'};
261 my $trans = translate ('max chars0: %s %1.1f');
262 $first_name = nick_to_name ($longest) || $longest;
264 print $fh " <tr>\n <td>";
265 printf $fh ($trans, $first_name, $avg);
269 $avg = $CalcData->{$longest2}{'chars'} / $CalcData->{$longest2}{'lines'};
270 $trans = translate ('max chars1: %s %1.1f');
271 $second_name = nick_to_name ($longest2) || $longest2;
273 print $fh "<br />\n",
274 qq# <span class="small">#;
275 printf $fh ($trans, $second_name, $avg);
279 $avg = $chan_chars / $chan_lines;
280 $trans = translate ('chars avg: %1.1f');
282 print $fh "<br />\n",
283 qq# <span class="small">#;
284 printf $fh ($trans, $avg);
285 print $fh "</span></td>\n </tr>\n";
290 my $avg = $CalcData->{$shortest}{'chars'} / $CalcData->{$shortest}{'lines'};
291 my $trans = translate ('min chars0: %s %1.1f');
292 $first_name = nick_to_name ($shortest) || $shortest;
294 print $fh " <tr>\n <td>";
295 printf $fh ($trans, $first_name, $avg);
299 $avg = $CalcData->{$shortest2}{'chars'} / $CalcData->{$shortest2}{'lines'};
300 $trans = translate ('min chars1: %s %1.1f');
301 $second_name = nick_to_name ($shortest2) || $shortest2;
303 print $fh "<br />\n",
304 qq# <span class="small">#;
305 printf $fh ($trans, $second_name, $avg);
308 print $fh "</td>\n </tr>\n";
313 my @names = sort_by_field ('words');
323 $chan_words += $CalcData->{$_}{'words'} || 0;
324 $chan_lines += $CalcData->{$_}{'lines'} || 0;
329 $first_nick = shift (@names);
333 $second_nick = shift (@names);
338 my $avg = $CalcData->{$first_nick}{'words'} / $CalcData->{$first_nick}{'lines'};
339 my $trans = translate ('max words0: %s %1.1f');
340 $first_name = nick_to_name ($first_nick) || $first_nick;
342 print $fh " <tr>\n <td>";
343 printf $fh ($trans, $first_name, $avg);
347 $avg = $CalcData->{$second_nick}{'words'} / $CalcData->{$second_nick}{'lines'};
348 $trans = translate ('max words1: %s %1.1f');
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, $avg);
357 $avg = $chan_words / $chan_lines;
358 $trans = translate ('words avg: %1.1f');
360 print $fh "<br />\n",
361 qq# <span class="small">#;
362 printf $fh ($trans, $avg);
363 print $fh "</span></td>\n </tr>\n";
367 print $fh "</table>\n\n";
376 ($CalcData->{$b}{$field} / $CalcData->{$b}{'lines'})
378 ($CalcData->{$a}{$field} / $CalcData->{$a}{'lines'})
381 defined ($CalcData->{$_}{'lines'})
382 and ($CalcData->{$_}{'lines'} != 0)
383 and defined ($CalcData->{$_}{$field})
387 while (scalar (@retval) < 2)