1 package Onis::Plugins::Nicks;
6 use Onis::Html (qw(get_filehandle));
7 use Onis::Language (qw(translate));
8 use Onis::Data::Core (qw(register_plugin));
9 use Onis::Data::Persistent ();
10 use Onis::Users (qw(nick_to_name));
12 register_plugin ('TEXT', \&add);
13 register_plugin ('ACTION', \&add);
14 register_plugin ('OUTPUT', \&output);
16 our $MentionedNicksCache = Onis::Data::Persistent->new ('MentionedNicksCache', 'nick', qw(counter lastusedtime lastusedby));
17 our $MentionedNicksData = [];
20 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
28 my $nick = $data->{'nick'};
29 my $text = $data->{'text'};
30 my $time = $data->{'epoch'};
32 # All allowed chars according to RFC2812
33 my @potential_nicks = split (/[^a-zA-Z0-9\[\]\\`_^{|}]+/, $text);
35 for (@potential_nicks)
39 # Not allowed according to RFC2812
40 if ($pot_nick =~ m/^[0-9\-]/)
45 if (nick_to_ident ($pot_nick))
47 my ($counter) = $MentionedNicksCache->get ($pot_nick);
50 $MentionedNicksCache->put ($pot_nick, $counter, $time, $nick);
59 if (get_config ('plugin_max'))
61 my $tmp = get_config ('plugin_max');
64 $max = $tmp if ($tmp);
67 for ($MentionedNicksData->keys ())
70 my ($counter, $lastusedtime, $lastusedby) = $MentionedNicksData->get ($nick);
71 die unless (defined ($lastusedby));
73 $lastusedby = get_main_nick ($lastusedby);
74 push (@data, [$nick, $counter, $lastusedby, $lastusedtime]);
77 @$MentionedNicksData = sort { $b->[1] <=> $a->[1] } (@data);
78 splice (@$MentionedNicksData, $max);
85 my $fh = get_filehandle ();
87 my $nick = translate ('Nick');
88 my $times = translate ('Times used');
89 my $last = translate ('Last used by');
92 <table class="plugin">
94 <td class="invis"> </td>
101 foreach (@$MentionedNicksData)
104 my ($nick, $count, $usedby) = @$_;
105 my $usedby_name = nick_to_name ($usedby) || $usedby;
108 qq# <td class="numeration">$i</td>\n#,
109 qq# <td>$nick</td>\n#,
110 qq# <td>$count</td>\n#,
111 qq# <td>$usedby_name</td>\n#,
115 print $fh "</table>\n\n";