diff options
author | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-05-19 07:01:24 +0000 |
---|---|---|
committer | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-05-19 07:01:24 +0000 |
commit | 2ce770e7e5817f8838fdaf7bc7eda2a8da972962 (patch) | |
tree | 4aa6306599d38b6af01c8495d6731a838944602e /lib/Multi | |
parent | 8b72b6535a553f8751842369a3abc0016d18611e (diff) |
Too many changes to keep track of. See ChangeLog. (I should commit more often -.-)
git-svn-id: svn://vndb.org/vndb@13 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
Diffstat (limited to 'lib/Multi')
-rw-r--r-- | lib/Multi/Anime.pm | 3 | ||||
-rw-r--r-- | lib/Multi/IRC.pm | 60 | ||||
-rw-r--r-- | lib/Multi/Maintenance.pm | 20 | ||||
-rw-r--r-- | lib/Multi/RG.pm | 2 |
4 files changed, 51 insertions, 34 deletions
diff --git a/lib/Multi/Anime.pm b/lib/Multi/Anime.pm index 44fafb92..0da54e2e 100644 --- a/lib/Multi/Anime.pm +++ b/lib/Multi/Anime.pm @@ -257,7 +257,7 @@ sub updateanime { # aid, data|'notfound' # aid, ANN id, NFO id, year, type, romaji, kanji, lastfetch my @col = $_[ARG1] eq 'notfound' ? ($_[ARG0], 0, 0, 0, 0, '', '', -1) - : (split(/\|/, $_[ARG1]), int time); + : (split(/\|/, $_[ARG1], 7), int time); if($col[7] > 0) { for (@col) { @@ -269,6 +269,7 @@ sub updateanime { # aid, data|'notfound' $col[4] = $_ if lc($VNDB::ANITYPE->[$_][1]) eq lc($col[4]); } $col[4] = 0 if $col[4] !~ /^[0-9]+$/; + $col[2] = '' if $col[2] =~ /^0,/; } # try to UPDATE first diff --git a/lib/Multi/IRC.pm b/lib/Multi/IRC.pm index 984d5d5d..58789675 100644 --- a/lib/Multi/IRC.pm +++ b/lib/Multi/IRC.pm @@ -27,7 +27,7 @@ sub spawn { ); POE::Session->create( package_states => [ - $p => [qw| _start irc_001 irc_public irc_ctcp_action irc_msg vndbid shutdown |], + $p => [qw| _start irc_001 irc_public irc_ctcp_action irc_msg irccmd vndbid shutdown |], ], heap => { irc => $irc, o => { @@ -36,7 +36,8 @@ sub spawn { ircname => 'VNDB.org Multi', channel => '#vndb', @_ - } + }, + log => {}, } ); } @@ -83,9 +84,10 @@ sub irc_001 { sub irc_public { - if($_[ARG2] =~ /^!info/) { - $_[KERNEL]->post(circ => privmsg => $_[ARG1][0], - 'Hello, I am HMX-12 Multi v'.$VNDB::VERSION.' made by the great Yorhel! (Please ask Ayo for more info)'); + if($_[ARG2] =~ /^!/) { + (my $cmd = $_[ARG2]) =~ s/^!//; + my $nick = (split /!/, $_[ARG0])[0]; + $_[KERNEL]->call(irc => irccmd => $_[ARG1][0], $cmd, $nick, $nick.', '); } else { $_[KERNEL]->call(irc => vndbid => $_[ARG1][0], $_[ARG2]); } @@ -99,26 +101,39 @@ sub irc_ctcp_action { sub irc_msg { my $nick = ( split /!/, $_[ARG0] )[0]; + $_[KERNEL]->call(irc => irccmd => $nick => $_[ARG2]); +} - if(!$_[HEAP]{irc}->is_channel_operator($_[HEAP]{o}{channel}, $nick) - && !$_[HEAP]{irc}->is_channel_owner($_[HEAP]{o}{channel}, $nick) - && !$_[HEAP]{irc}->is_channel_admin($_[HEAP]{o}{channel}, $nick)) { - $_[KERNEL]->post(circ => privmsg => $nick, 'You are not my master'); - return; - } - my $m = $_[ARG2]; - if($m =~ /^say (.+)$/) { +sub irccmd { # dest, cmd, [nick], [prep] + my($dest, $cmd, $nick, $prep) = @_[ARG0..$#_]; + $nick ||= $_[ARG0]; + $prep ||= ''; + + if($cmd =~ /^info/) { + return $_[KERNEL]->post(circ => privmsg => $dest, + 'Hello, I am HMX-12 Multi v'.$VNDB::VERSION.' made by the great Yorhel!'); + } + + return $_[KERNEL]->post(circ => privmsg => $dest, + $prep.'You are not my master!') + if !$_[HEAP]{irc}->is_channel_operator($_[HEAP]{o}{channel}, $nick) + && !$_[HEAP]{irc}->is_channel_owner($_[HEAP]{o}{channel}, $nick) + && !$_[HEAP]{irc}->is_channel_admin($_[HEAP]{o}{channel}, $nick); + + if($cmd =~ /^say (.+)$/) { $_[KERNEL]->post(circ => privmsg => $_[HEAP]{o}{channel}, $1); - } elsif($m =~ /^me (.+)$/) { + } elsif($cmd =~ /^me (.+)$/) { $_[KERNEL]->post(circ => ctcp => $_[HEAP]{o}{channel}, "ACTION $1"); - } elsif($m =~ /^cmd (.+)$/) { + } elsif($cmd =~ /^cmd (.+)$/) { $_[KERNEL]->post(core => queue => $1); - } elsif($m =~ /^eval (.+)$/) { - $_[KERNEL]->post(circ => privmsg => $nick, 'eval: '.$_) + $_[KERNEL]->post(circ => privmsg => $dest => sprintf "%sExecuting command '%s'", $prep, $1); + } elsif($cmd =~ /^eval (.+)$/) { + $_[KERNEL]->post(circ => privmsg => $dest, $prep.'eval: '.$_) for (split /\r?\n/, eval($1)||$@); } else { - $_[KERNEL]->post(circ => privmsg => $nick, 'Unkown command'); } + $_[KERNEL]->post(circ => privmsg => $dest, $prep.'Unkown command'); + } # TODO: add command to view the current queue, and a method to send log messages } @@ -126,12 +141,19 @@ sub irc_msg { sub vndbid { # dest, msg my $m = $_[ARG1]; + + $_[HEAP]{log}{$_} < time-60 and delete $_[HEAP]{log}{$_} + for (keys %{$_[HEAP]{log}}); + my @id; push @id, [$1,$2,$3,$4] while $m =~ s/^(.*)([duvpr])([0-9]+)(.*)$/ $1 $4 /i; for (reverse @id) { - next if $$_[0] =~ /(\.org\/|[a-z])$/i || $$_[3] =~ /^[a-z]/i; + next if $$_[0] =~ /[a-z0-9%/]$/i || $$_[3] =~ /^[a-z]/i; my($t, $id, $ext) = (lc($$_[1]), $$_[2], $$_[3]); + next if $_[HEAP]{log}{$t.$id}; + $_[HEAP]{log}{$t.$id} = time; + if($t ne 'd') { my $s = $Multi::SQL->prepare( $t eq 'v' ? 'SELECT vr.title FROM vn_rev vr JOIN vn v ON v.latest = vr.id WHERE v.id = ?' : diff --git a/lib/Multi/Maintenance.pm b/lib/Multi/Maintenance.pm index 1f1a337e..d0aa4dbc 100644 --- a/lib/Multi/Maintenance.pm +++ b/lib/Multi/Maintenance.pm @@ -26,24 +26,18 @@ sub spawn { sub _start { $_[KERNEL]->alias_set('maintenance'); - $_[KERNEL]->call(core => register => qr/^maintenance((?: (?:all|vncache|ratings|prevcache|integrity|unkanime|logrotate))+)$/, 'cmd_maintenance'); + $_[KERNEL]->call(core => register => qr/^maintenance((?: (?:vncache|ratings|prevcache|integrity|unkanime|logrotate))+)$/, 'cmd_maintenance'); - # Perform all maintenance functions every day on 0:00 - $_[KERNEL]->post(core => addcron => '0 0 * * *', 'maintenance all'); - # rotate logs every 1st day of the month at 0:05 - $_[KERNEL]->post(core => addcron => '5 0 1 * *' => 'maintenance logrotate'); + # Perform some maintenance functions every day on 0:00 + $_[KERNEL]->post(core => addcron => '0 0 * * *', 'maintenance ratings integrity unkanime'); + # update caches and rotate logs every 1st day of the month at 0:05 + $_[KERNEL]->post(core => addcron => '5 0 1 * *' => 'maintenance vncache prevcache logrotate'); } sub cmd_maintenance { - local $_ = $_[ARG1]; - - $_[KERNEL]->yield('vncache') if /(?:vncache|all)/; - $_[KERNEL]->yield('ratings') if /(?:ratings|all)/; - $_[KERNEL]->yield('prevcache') if /(?:prevcache|all)/; - $_[KERNEL]->yield('integrity') if /(?:integrity|all)/; - $_[KERNEL]->yield('unkanime') if /(?:unkanime|all)/; - $_[KERNEL]->yield('logrotate') if /logrotate/; + $_[KERNEL]->yield($_) + for (split /\s+/, $_[ARG1]); $_[KERNEL]->post(core => finish => $_[ARG0]); } diff --git a/lib/Multi/RG.pm b/lib/Multi/RG.pm index b32fedba..ebb93013 100644 --- a/lib/Multi/RG.pm +++ b/lib/Multi/RG.pm @@ -130,7 +130,7 @@ sub relscomplete { # heap->nodes and heap->rels are now assumed to contain all n # insert all nodes, ordered by release date for (sort { $a->[2] <=> $b->[2] } values %{$_[HEAP]{nodes}}) { my $date = sprintf '%08d', $_->[2]; - $date =~ s#^([0-9]{4})([0-9]{2}).+#$1==0?'N/A':$1==9999?'TBA':(($2&&$2>0?($_[HEAP]{moy}[$2-1].' '):'').$1)#e; + $date =~ s#^([0-9]{4})([0-9]{2}).+#$1==0?'N/A':$1==9999?'TBA':(($2&&$2<13?($_[HEAP]{moy}[$2-1].' '):'').$1)#e; my $title = unidecode($_->[1]); $title = substr($title, 0, 27).'...' if length($title) > 30; |