From 3ff4f9cac96746d01817d397d7fb51952e0fe3ed Mon Sep 17 00:00:00 2001 From: Alexandre Morignot <erdnaxeli@cervoi.se> Date: Sun, 3 Apr 2016 01:13:06 +0200 Subject: [PATCH] New command !broken: check if a link is broken Yes: mark it as broken No: update data if needed Need an external id --- PlayBot/commands/broken.pm | 89 ++++++++++++++++++++++++++++++++++++++ PlayBot/commands/parser.pm | 22 +++++++++- 2 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 PlayBot/commands/broken.pm diff --git a/PlayBot/commands/broken.pm b/PlayBot/commands/broken.pm new file mode 100644 index 0000000..07bdb28 --- /dev/null +++ b/PlayBot/commands/broken.pm @@ -0,0 +1,89 @@ +package PlayBot::commands::broken; + +use strict; +use warnings; + +use PlayBot::utils::db; +use PlayBot::utils::db::get; +use PlayBot::utils::print; + +use Try::Tiny; + +sub exec { + my ($chan, $id) = @_; + my $dbh = PlayBot::utils::db::main_session; + + my $query = PlayBot::commands::get::query->new( + chan => $chan, + query => $id, + ); + my $db_query = PlayBot::utils::db::get->new(); + my $content = $db_query->get($query); + + die("La cuillère n'existe pas\n") if (not $content); + + if (not $content->{external_id}) + { + return "Cette feature n'est pas encore disponible pour ce contenu"; + } + + + my $content_r; + try + { + my $site = 'PlayBot::sites::'.$content->{site}; + eval "require $site"; + my %h = $site->get($content->{external_id}); + $content_r = \%h; + } + catch + { + # mark as broken + # TODO: be more subtil + my $sth = $dbh->prepare(' + UPDATE playbot + SET broken = 1 + WHERE type = ? AND external_id = ? + '); + $sth->execute($content->{site}, $content->{external_id}); + $dbh->commit; + die "Monde de merde\n"; + }; + + try + { + foreach my $k (keys %$content_r) + { + die if($content_r->{$k} ne $content->{$k}); + } + } + catch + { + # the content needs an update + my $sth = $dbh->prepare(' + UPDATE playbot SET + sender = ?, + title = ?, + duration = ?, + url = ? + WHERE type = ? AND external_id = ? + '); + $sth->execute( + $content_r->{author}, + $content_r->{title}, + $content_r->{duration}, + $content_r->{url}, + $content_r->{site}, + $content_r->{external_id}, + ); + $dbh->commit; + + my $msg = PlayBot::utils::print::print($content); + die"Ça, c’est bon, c’est réparé\n$msg\n"; + }; + + return "http://chezmoicamarche.org/"; +} + + +1; diff --git a/PlayBot/commands/parser.pm b/PlayBot/commands/parser.pm index c953c66..b55cfc6 100644 --- a/PlayBot/commands/parser.pm +++ b/PlayBot/commands/parser.pm @@ -5,11 +5,11 @@ use warnings; use Try::Tiny; use PlayBot::commands::conf; -use PlayBot::commands::stats; use PlayBot::commands::fav; use PlayBot::commands::later; use PlayBot::commands::tag; use PlayBot::commands::get; +use PlayBot::commands::broken; use PlayBot::commands::stats; use PlayBot::utils::id; @@ -102,6 +102,23 @@ sub exec { $lastID->{$chan} = $id; } } + elsif ($msg =~ /^ *!broken(?: (\S+))? *$/) { + my $index = $1; + try { + my $id = PlayBot::utils::id::get($chan, $index); + + my @msg; + try { + @msg = PlayBot::commands::broken::exec($chan, $id); + } catch { + @msg = split(/\n/, $_); + }; + + $irc->yield(privmsg => $chan => $_) foreach (@msg); + } catch { + $irc->yield(privmsg => $chan => $insultes[rand @insultes]); + }; + } elsif ($msg =~ /^ *!stats(?: (\S+))? *$/) { my $index = $1; try { @@ -109,7 +126,7 @@ sub exec { PlayBot::commands::stats::exec($chan, $id) } catch { $irc->yield(privmsg => $chan => $insultes[rand @insultes]); - } + }; } elsif ($msg =~ /^ *!conf +(.*)/) { my @args = split(/ +/, $1); @@ -124,6 +141,7 @@ sub exec { $irc->yield(privmsg => $nick => '!get [<id>|<query>] : sort aléatoirement une vidéo'); $irc->yield(privmsg => $nick => ' Si un id est précisé, sort ce contenu (s\'il existe).'); $irc->yield(privmsg => $nick => ' <query> : composée de tags commençant par un \'#\' ou de mots. Les mots sont recherché dans le titre ainsi que le nom de l\'auteur du contenu.'); + $irc->yield(privmsg => $nick => "!broken [<id>] : marque un contenu comme indisponible"); $irc->yield(privmsg => $nick => "!stats [<id>] : informations sur un contenu"); $irc->yield(privmsg => $nick => "---"); $irc->yield(privmsg => $nick => "Un tag est de la forme « #[a-zA-Z0-9_]+ ». Par exemple « #loLILol_mdr42 » est un tag valide, tandis que « #céducaca » et « #je-suis-nul » n'en sont pas et seront considéré respectivement comme « #c » et « #je »."); -- GitLab