Skip to content
Extraits de code Groupes Projets

Comparer les révisions

Les modifications sont affichées comme si la révision source était fusionnée avec la révision cible. En savoir plus sur la comparaison des révisions.

Source

Sélectionner le projet cible
No results found
Sélectionner une révision Git
Loading items

Cible

Sélectionner le projet cible
  • morignot2011/playbot.old
  • defrance2011/playbot
2 résultats
Sélectionner une révision Git
Loading items
Afficher les modifications
Validations sur la source (3)
Affichage de
avec 756 ajouts et 725 suppressions
......@@ -6,6 +6,7 @@ use utf8;
use POE;
use PlayBot::sessions::irc;
#use PlayBot::sessions::facebook;
use PlayBot::sessions::downloader;
......
......@@ -23,22 +23,18 @@ sub exec {
die("La cuillère n'existe pas\n") if ( not $content );
if (not $content->{external_id})
{
if ( not $content->{external_id} ) {
return "Cette feature n'est pas encore disponible pour ce contenu";
}
my $content_r;
try
{
try {
my $site = 'PlayBot::sites::' . $content->{site};
eval "require $site";
my %h = $site->get( $content->{external_id} );
$content_r = \%h;
}
catch
{
catch {
# mark as broken
# TODO: be more subtil
my $sth = $dbh->prepare( '
......@@ -51,15 +47,12 @@ sub exec {
die "Monde de merde\n";
};
try
{
foreach my $k (keys %$content_r)
{
try {
foreach my $k ( keys %$content_r ) {
die if ( $content_r->{$k} ne $content->{$k} );
}
}
catch
{
catch {
# the content needs an update
my $sth = $dbh->prepare( '
UPDATE playbot SET
......@@ -70,12 +63,9 @@ sub exec {
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},
$content_r->{author}, $content_r->{title},
$content_r->{duration}, $content_r->{url},
$content_r->{site}, $content_r->{external_id},
);
$dbh->commit;
......@@ -86,5 +76,4 @@ sub exec {
return "http://chezmoicamarche.org/";
}
1;
......@@ -4,7 +4,10 @@ use strict;
use warnings;
use utf8;
use Module::Pluggable sub_name => 'sites', search_path => ['PlayBot::sites'], require => 1;
use Module::Pluggable
sub_name => 'sites',
search_path => ['PlayBot::sites'],
require => 1;
use PlayBot::utils::print;
use PlayBot::utils::db;
......@@ -12,25 +15,21 @@ use PlayBot::utils::db::chan;
our $irc;
sub exec
{
sub exec {
my ( $chan, $nick, $cmd, @args ) = @_;
print "$chan, $nick, $cmd, " . join( '+', @args ) . "\n";
my $msg = 'done';
if (not $irc->is_channel_operator($chan, $nick))
{
if ( not $irc->is_channel_operator( $chan, $nick ) ) {
$irc->yield( privmsg => $chan => "C'est non." );
return;
}
if ($cmd eq 'list')
{
if ( $cmd eq 'list' ) {
my $sites = list($chan);
my @list;
foreach (keys %$sites)
{
foreach ( keys %$sites ) {
$_ .= '*' if ( $sites->{$_} );
push @list, $_;
......@@ -38,39 +37,31 @@ sub exec
$msg = join( ' ', @list );
}
elsif ($cmd eq 'add')
{
elsif ( $cmd eq 'add' ) {
add( $chan, @args );
}
elsif ($cmd eq 'remove')
{
elsif ( $cmd eq 'remove' ) {
remove( $chan, @args );
}
else
{
else {
die;
}
$irc->yield( privmsg => $chan => $msg );
}
sub list
{
sub list {
my $chan = shift;
my $chan_conf = PlayBot::utils::db::chan->new($chan);
my $sites = {};
foreach my $site (__PACKAGE__->sites)
{
foreach my $site ( __PACKAGE__->sites ) {
$site = ( split( /::/, $site ) )[-1];
if (grep { $site eq $_ } @{ $chan_conf->sites })
{
if ( grep { $site eq $_ } @{ $chan_conf->sites } ) {
$sites->{$site} = 1;
}
else
{
else {
$sites->{$site} = 0;
}
}
......@@ -78,26 +69,20 @@ sub list
return $sites;
}
sub add
{
sub add {
my ( $chan, @sites ) = @_;
my $chan_conf = PlayBot::utils::db::chan->new($chan);
foreach (@sites)
{
foreach (@sites) {
$chan_conf->add_site($_);
}
}
sub remove
{
sub remove {
my ( $chan, @sites ) = @_;
my $chan_conf = PlayBot::utils::db::chan->new($chan);
foreach (@sites)
{
foreach (@sites) {
$chan_conf->remove_site($_);
}
}
......
......@@ -16,10 +16,13 @@ sub exec {
or $log->error( "Couldn't finish transaction: " . $dbh->errstr );
if ( !$sth->rows ) {
$irc->yield(privmsg => $nick => "Ce nick n'est associé à aucun login arise. Va sur http://nightiies.iiens.net/links/fav pour obtenir ton code personel.");
$irc->yield( privmsg => $nick =>
"Ce nick n'est associé à aucun login arise. Va sur http://nightiies.iiens.net/links/fav pour obtenir ton code personel."
);
}
else {
my $sth2 = $dbh->prepare('INSERT INTO playbot_fav (id, user) VALUES (?, ?)');
my $sth2 =
$dbh->prepare('INSERT INTO playbot_fav (id, user) VALUES (?, ?)');
$sth2->execute( $id, $sth->fetch->[0] )
or $log->error( "Couldn't finish transaction: " . $dbh->errstr );
}
......
......@@ -32,7 +32,9 @@ sub exec {
and not $query->force )
{
my $search_name = $db_query->make_view($query);
$irc->yield(privmsg => $chan => "trop de résultats ($rows), utilise -f pour forcer la recherche ou va voir ici : http://nightiies.iiens.net/links/search/$search_name");
$irc->yield( privmsg => $chan =>
"trop de résultats ($rows), utilise -f pour forcer la recherche ou va voir ici : http://nightiies.iiens.net/links/search/$search_name"
);
return;
}
......@@ -40,6 +42,7 @@ sub exec {
if ( !$content ) {
if ( $rows > 0 ) {
# the request was already executed, there is nothing more
$irc->yield( privmsg => $chan => "Tu tournes en rond, Jack !" );
}
......@@ -47,6 +50,7 @@ sub exec {
$msg = "Je n'ai rien dans ce registre.";
if ( not $query->is_global ) {
# we check is there is result with global
my $q = PlayBot::commands::get::query->new(
chan => $query->chan,
......@@ -68,17 +72,20 @@ sub exec {
$irc->yield( privmsg => $chan => $msg );
}
else {
$irc->yield(privmsg => $chan => "Poste d'abord du contenu, n00b.");
$irc->yield(
privmsg => $chan => "Poste d'abord du contenu, n00b." );
}
return
return;
}
my $dbh = PlayBot::utils::db::main_session();
my $sth = $dbh->prepare("select tag
my $sth = $dbh->prepare(
"select tag
from playbot_tags
where id = ?
");
"
);
$sth->execute( $content->{id} );
my @tags;
......@@ -123,5 +130,4 @@ sub exec {
return $content->{id};
}
1;
......@@ -74,13 +74,13 @@ has 'date' => (
init_arg => undef,
);
sub _build_is_global {
my $self = shift;
if ( $self->chan !~ /^#/ || $self->query =~ /(^|\s)-a(ll)?($|\s)/ ) {
return 1;
} else {
}
else {
return 0;
}
}
......@@ -88,9 +88,11 @@ sub _build_is_global {
sub _build_force {
my $self = shift;
if ($self->fts || $self->chan !~ /^#/ || $self->query =~ /(^|\s)-f($|\s)/) {
if ( $self->fts || $self->chan !~ /^#/ || $self->query =~ /(^|\s)-f($|\s)/ )
{
return 1;
} else {
}
else {
return 0;
}
}
......@@ -119,7 +121,8 @@ sub _build_id {
if ( looks_like_number( $self->words->[0] ) ) {
return $self->words->[0];
} else {
}
else {
return -1;
}
}
......@@ -141,8 +144,7 @@ sub _equals {
return ( $self->is_global eq $query->is_global
and @tags1 ~~ @tags2
and @words1 ~~ @words2
and $self->id eq $query->id
);
and $self->id eq $query->id );
}
1;
......@@ -13,7 +13,8 @@ sub exec {
$time = 6 if ( !$time );
$time *= ( $unit eq 's' ) ? 1 : ( $unit eq 'm' ) ? 60 : 3600;
my $sth = $dbh->prepare('INSERT INTO playbot_later (content, nick, date) VALUES (?, ?, ?)');
my $sth = $dbh->prepare(
'INSERT INTO playbot_later (content, nick, date) VALUES (?, ?, ?)');
unless ( defined $sth ) {
$log->error("Couldn't prepare querie; aborting");
return;
......
......@@ -18,7 +18,12 @@ my $lastID;
my $irc;
my $dbh;
my @insultes = ("Ahahahah ! 23 à 0 !", "C'est la piquette, Jack !", "Tu sais pas jouer, Jack !", "T'es mauvais, Jack !");
my @insultes = (
"Ahahahah ! 23 à 0 !",
"C'est la piquette, Jack !",
"Tu sais pas jouer, Jack !",
"T'es mauvais, Jack !"
);
# store a chan last command
my %command;
......@@ -60,7 +65,8 @@ sub exec {
try {
my $id = PlayBot::utils::id::get( $chan, $index );
PlayBot::commands::fav::exec( $nick, $id )
} catch {
}
catch {
$irc->yield( privmsg => $chan => $insultes[ rand @insultes ] );
}
}
......@@ -70,8 +76,10 @@ sub exec {
try {
my $id = PlayBot::utils::id::get( $chan, $index );
PlayBot::commands::later::exec($kernel, $nick, $id, $chan, $time, $unit);
} catch {
PlayBot::commands::later::exec( $kernel, $nick, $id, $chan, $time,
$unit );
}
catch {
$irc->yield( privmsg => $chan => $insultes[ rand @insultes ] );
};
}
......@@ -90,7 +98,8 @@ sub exec {
try {
$id = PlayBot::utils::id::get( $chan, $index );
PlayBot::commands::tag::exec( $id, $tags );
} catch {
}
catch {
$irc->yield( privmsg => $chan => $insultes[ rand @insultes ] );
};
}
......@@ -113,12 +122,14 @@ sub exec {
my @msg;
try {
@msg = PlayBot::commands::broken::exec( $chan, $id );
} catch {
}
catch {
@msg = split( /\n/, $_ );
};
$irc->yield( privmsg => $chan => $_ ) foreach (@msg);
} catch {
}
catch {
$irc->yield( privmsg => $chan => $insultes[ rand @insultes ] );
};
}
......@@ -127,7 +138,8 @@ sub exec {
try {
my $id = PlayBot::utils::id::get( $chan, $index );
PlayBot::commands::stats::exec( $chan, $id )
} catch {
}
catch {
$irc->yield( privmsg => $chan => $insultes[ rand @insultes ] );
};
}
......@@ -136,25 +148,49 @@ sub exec {
PlayBot::commands::conf::exec( $chan, $nick, @args );
}
elsif ( $msg =~ /^ *!help/ ) {
$irc->yield(privmsg => $nick => '!fav [<id>] : enregistre la vidéo dans les favoris');
$irc->yield(privmsg => $nick => '!tag [<id>] <tag1> <tag2> ... : tag la vidéo');
$irc->yield(privmsg => $nick => '!later [<id>] [in <x>[s|m|h]] : vidéo rappelée par query (par défaut temps de 6h)');
$irc->yield(privmsg => $nick => " Sans id précisée, la dernière vidéo postée sur le chan est utilisée.");
$irc->yield(privmsg => $nick => ' L\'id peut être négatif, auquel cas -1 correspond à l\'avant dernière vidéo.');
$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 =>
'!fav [<id>] : enregistre la vidéo dans les favoris' );
$irc->yield( privmsg => $nick =>
'!tag [<id>] <tag1> <tag2> ... : tag la vidéo' );
$irc->yield( privmsg => $nick =>
'!later [<id>] [in <x>[s|m|h]] : vidéo rappelée par query (par défaut temps de 6h)'
);
$irc->yield( privmsg => $nick =>
" Sans id précisée, la dernière vidéo postée sur le chan est utilisée."
);
$irc->yield( privmsg => $nick =>
' L\'id peut être négatif, auquel cas -1 correspond à l\'avant dernière vidéo.'
);
$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 ».");
$irc->yield(privmsg => $nick => "Toutes ces commandes fonctionnent en query.");
$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 »."
);
$irc->yield(
privmsg => $nick => "Toutes ces commandes fonctionnent en query." );
$irc->yield( privmsg => $nick => "---" );
$irc->yield(privmsg => $nick => "Configuration d'un channel, utilisable uniquement par un op :");
$irc->yield(privmsg => $nick => " !conf list : liste les sites supportés, ceux indiqués avec une astérisque étant activés");
$irc->yield(privmsg => $nick => " !conf add|remove <site> : active ou désactive le support d'un site");
$irc->yield( privmsg => $nick =>
"Configuration d'un channel, utilisable uniquement par un op :" );
$irc->yield( privmsg => $nick =>
" !conf list : liste les sites supportés, ceux indiqués avec une astérisque étant activés"
);
$irc->yield( privmsg => $nick =>
" !conf add|remove <site> : active ou désactive le support d'un site"
);
$irc->yield( privmsg => $nick => "---" );
$irc->yield(privmsg => $nick => "Niveau vie privée, !fav, !later, et bien sûr poster un lien supporté entrainent un enregistrement dans la base de données avec au minimum la date, l'heure et le nick de la personne ayant exécuté la commande.");
$irc->yield( privmsg => $nick =>
"Niveau vie privée, !fav, !later, et bien sûr poster un lien supporté entrainent un enregistrement dans la base de données avec au minimum la date, l'heure et le nick de la personne ayant exécuté la commande."
);
}
elsif ( $msg =~ /^ *!(fav|lat|tag|stats)/ ) {
$irc->yield( privmsg => $chan => $insultes[ rand @insultes ] );
......
......@@ -10,7 +10,12 @@ use PlayBot::utils::db::stats;
our $irc;
my @insultes = ("Ahahahah ! 23 à 0 !", "C'est la piquette, Jack !", "Tu sais pas jouer, Jack !", "T'es mauvais, Jack !");
my @insultes = (
"Ahahahah ! 23 à 0 !",
"C'est la piquette, Jack !",
"Tu sais pas jouer, Jack !",
"T'es mauvais, Jack !"
);
sub exec {
my ( $chan, $id ) = @_;
......@@ -26,5 +31,4 @@ sub exec {
}
}
1;
......@@ -15,8 +15,7 @@ sub exec {
}
}
sub addTag
{
sub addTag {
my ( $id, $tag ) = @_;
# BRUTALE
......@@ -29,9 +28,7 @@ sub addTag
$sth = $dbh->prepare('INSERT INTO playbot_tags (id, tag) VALUES (?, ?)');
$log->error("Couldn't prepare querie; aborting") unless ( defined $sth );
eval {
$sth->execute($id, $tag)
};
eval { $sth->execute( $id, $tag ) };
if ($@) {
$log->error( "Couldn't finish transaction: " . $@ );
}
......
......@@ -17,14 +17,14 @@ open CONF, '<', 'playbot.conf';
my $json = <CONF>;
my $conf = decode_json($json);
if ($conf->{download})
{
if ( $conf->{download} ) {
POE::Session->create(
inline_states => {
_start => \&on_start,
ddl => \&PlayBot::sessions::downloader::ddl::exec,
filename => \&PlayBot::sessions::downloader::ddl::filename,
signal_filename => \&PlayBot::sessions::downloader::ddl::signal_filename,
signal_filename =>
\&PlayBot::sessions::downloader::ddl::signal_filename,
signal_ddl => \&PlayBot::sessions::downloader::ddl::signal_ddl,
signal_move => \&PlayBot::sessions::downloader::ddl::signal_move,
signal_rm => \&PlayBot::sessions::downloader::ddl::signal_rm,
......@@ -33,7 +33,6 @@ if ($conf->{download})
);
}
sub on_start {
my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
$kernel->alias_set('downloader');
......
......@@ -38,12 +38,9 @@ sub exec {
# first we need to got filename
my $child = POE::Wheel::Run->new(
Program => [
"youtube-dl",
"--restrict-filename",
"--get-filename",
"-o",
$conf->{save_format},
$url,
"youtube-dl", "--restrict-filename",
"--get-filename", "-o",
$conf->{save_format}, $url,
],
StdoutEvent => "filename",
StderrEvent => "devnull",
......@@ -58,6 +55,7 @@ sub exec {
# we link wheel id to playbot id
$heap->{ddl}->{wid}->{ $child->ID } = $id;
# we link PID to child object
$heap->{ddl}->{pid}->{ $child->PID } = $child;
}
......@@ -90,10 +88,8 @@ sub signal_filename {
# we actually download the content
$child = POE::Wheel::Run->new(
Program => [
"youtube-dl",
"--restrict-filename",
"-o",
"/tmp/".$conf->{save_format},
"youtube-dl", "--restrict-filename",
"-o", "/tmp/" . $conf->{save_format},
$heap->{ddl}->{pb}->{$id}->{url},
],
StdoutEvent => "devnull",
......@@ -106,6 +102,7 @@ sub signal_filename {
# we link wheel id to playbot id
$heap->{ddl}->{wid}->{ $child->ID } = $id;
# we link PID to child object
$heap->{ddl}->{pid}->{ $child->PID } = $child;
}
......@@ -120,7 +117,8 @@ sub signal_ddl {
if ( $status ne "0" ) {
$log->error("error downloading $id : $status");
rm($kernel, $heap, $id, "/tmp/".$heap->{ddl}->{pb}->{$id}->{filename}.".part");
rm( $kernel, $heap, $id,
"/tmp/" . $heap->{ddl}->{pb}->{$id}->{filename} . ".part" );
return;
}
......@@ -141,6 +139,7 @@ sub signal_ddl {
# we link wheel id to playbot id
$heap->{ddl}->{wid}->{ $child->ID } = $id;
# we link PID to child object
$heap->{ddl}->{pid}->{ $child->PID } = $child;
}
......@@ -157,13 +156,15 @@ sub signal_move {
$log->error("error moving $id from tmp : $status");
# rm file
rm($kernel, $heap, $id, "/tmp/".$heap->{ddl}->{pb}->{$id}->{filename});
rm( $kernel, $heap, $id,
"/tmp/" . $heap->{ddl}->{pb}->{$id}->{filename} );
return;
}
# we update db
eval {
PlayBot::utils::db::set_filename($id, $heap->{ddl}->{pb}->{$id}->{filename});
PlayBot::utils::db::set_filename( $id,
$heap->{ddl}->{pb}->{$id}->{filename} );
$kernel->yield( "end_task", $id );
};
if ($a) {
......@@ -181,10 +182,7 @@ sub rm {
my ( $kernel, $heap, $id, $filename ) = @_;
my $child = POE::Wheel::Run->new(
Program => [
"rm",
$filename
],
Program => [ "rm", $filename ],
StdoutEvent => "devnull",
StderrEvent => "devnull",
);
......@@ -195,6 +193,7 @@ sub rm {
# we link wheel id to playbot id
$heap->{ddl}->{wid}->{ $child->ID } = $id;
# we link PID to child object
$heap->{ddl}->{pid}->{ $child->PID } = $child;
}
......
......@@ -38,7 +38,10 @@ sub on_start {
sub on_fbmsg {
my ( $kernel, $args ) = @_[ KERNEL, ARG0 ];
$kernel->post('bot' => 'irc_public' => $args->[0], ['#nightiies.facebook'], $args->[1]);
$kernel->post(
'bot' => 'irc_public' => $args->[0],
['#nightiies.facebook'], $args->[1]
);
}
1;
......@@ -27,12 +27,16 @@ my $conf = decode_json($json);
## CONNEXION
my ($irc) = POE::Component::IRC::State->spawn();
my $dbh = DBI->connect('DBI:mysql:'.$conf->{'bdd'}.';host='.$conf->{'host'}, $conf->{'user'}, $conf->{'passwd'}, {
my $dbh = DBI->connect(
'DBI:mysql:' . $conf->{'bdd'} . ';host=' . $conf->{'host'},
$conf->{'user'},
$conf->{'passwd'},
{
PrintError => 0,
AutoCommit => 1,
mysql_auto_reconnect => 1
})
or die("Couldn't connect to database: ".DBI->errstr);
}
) or die( "Couldn't connect to database: " . DBI->errstr );
# config
my $serveur = '193.54.225.86';
......@@ -67,18 +71,15 @@ POE::Session->create(
irc_notice => \&on_notice,
_flux => \&flux,
_later => sub {
PlayBot::sessions::irc::later::consume(@_[ARG0, ARG1, ARG2])
PlayBot::sessions::irc::later::consume( @_[ ARG0, ARG1, ARG2 ] );
}
},
);
my %commandes_admin = ( "cycle" => \&cycle );
### FONCTIONS
sub flux
{
sub flux {
my $kernel = $_[KERNEL];
my $date = strftime( "%Y-%m-%d", localtime( time - 3600 * 24 ) );
......@@ -88,22 +89,25 @@ sub flux
FROM playbot p
JOIN playbot_chan pc ON p.id = pc.content
WHERE date = ? and chan = ?' );
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$log->error("Couldn't prepare querie; aborting")
unless ( defined $sth );
$sth->execute( $date, $_ )
or $log->error( "Couldn't finish transaction: " . $dbh->errstr );
my ($nbr) = $sth->fetchrow_array;
if ($nbr) {
$irc->yield(privmsg => $_ => $nbr.' liens aujourd\'hui : '.$baseurl . substr ($_, 1) . '/' . $date);
$irc->yield( privmsg => $_ => $nbr
. ' liens aujourd\'hui : '
. $baseurl
. substr( $_, 1 ) . '/'
. $date );
}
}
$kernel->delay_set( '_flux', 3600 * 24 );
}
sub cycle
{
sub cycle {
my ($arg) = @_;
$log->info("refresh modules");
......@@ -113,9 +117,7 @@ sub cycle
setConf();
}
sub setConf
{
sub setConf {
PlayBot::commands::parser::setConf( $irc, $dbh, $log, \%lastID );
$PlayBot::sites::irc = $irc;
......@@ -124,7 +126,6 @@ sub setConf
$PlayBot::sites::soundcloud::clientSecret = $conf->{'soundcloud_secret'};
}
## GESTION EVENTS
# Au démarrage
......@@ -146,15 +147,15 @@ sub bot_start {
);
}
# A la connection
sub on_connect
{
sub on_connect {
my $kernel = $_[KERNEL];
$log->info('connected');
setConf();
$irc->yield(privmsg => "NickServ" => "identify ".$conf->{'nickserv_pwd'}) unless ($debug);
$irc->yield(
privmsg => "NickServ" => "identify " . $conf->{'nickserv_pwd'} )
unless ($debug);
foreach (@channels) {
$irc->delay( [ join => $_ ], 20 );
......@@ -167,10 +168,8 @@ sub on_connect
#$kernel->delay_set('_flux', (23-$hour)*3600 + (60-$min)*60);
}
# Discussion privée
sub on_query
{
sub on_query {
my ( $kernel, $user, $msg ) = @_[ KERNEL, ARG0, ARG2 ];
my ($nick) = split( /!/, $user );
......@@ -181,7 +180,8 @@ sub on_query
if ( $msg =~ m/^!/ && $nick eq $admin ) {
my $commande = ( $msg =~ m/^!([^ ]*)/ )[0];
my @params = grep {!/^\s*$/} split(/\s+/, substr($msg, length("!$commande")));
my @params = grep { !/^\s*$/ }
split( /\s+/, substr( $msg, length("!$commande") ) );
foreach ( keys(%commandes_admin) ) {
if ( $commande eq $_ ) {
......@@ -191,6 +191,7 @@ sub on_query
}
}
elsif ( $msg =~ /^PB/ ) {
# on vérifie si le nick est register
push( @nicksToVerify, $nick );
push( @codesToVerify, $msg );
......@@ -199,9 +200,7 @@ sub on_query
}
}
sub on_notice
{
sub on_notice {
my ( $user, $msg ) = @_[ ARG0, ARG2 ];
my ($nick) = split( /!/, $user );
......@@ -217,22 +216,28 @@ sub on_notice
push( @codesToVerify, $code );
}
elsif ( $msg =~ /isn't registered/ ) {
$irc->yield(privmsg => $nickToVerify => "Il faut que ton pseudo soit enregistré auprès de NickServ");
$irc->yield( privmsg => $nickToVerify =>
"Il faut que ton pseudo soit enregistré auprès de NickServ" );
}
else {
my $sth = $dbh->prepare('SELECT user FROM playbot_codes WHERE code = ?');
$log->error("Counldn't prepare querie; aborting") unless (defined $sth);
my $sth =
$dbh->prepare('SELECT user FROM playbot_codes WHERE code = ?');
$log->error("Counldn't prepare querie; aborting")
unless ( defined $sth );
$sth->execute($code);
if ( $sth->rows ) {
my $sth = $dbh->prepare('UPDATE playbot_codes SET nick = ? WHERE code = ?');
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
my $sth =
$dbh->prepare('UPDATE playbot_codes SET nick = ? WHERE code = ?');
$log->error("Couldn't prepare querie; aborting")
unless ( defined $sth );
$sth->execute( $nickToVerify, $code )
or $log->error( "Couldn't finish transaction: " . $dbh->errstr );
$irc->yield( privmsg => $nickToVerify => 'Association effectuée' );
$irc->yield(privmsg => $nickToVerify => 'pour enregistrer un lien dans tes favoris : !fav <id>');
$irc->yield( privmsg => $nickToVerify =>
'pour enregistrer un lien dans tes favoris : !fav <id>' );
}
else {
$irc->yield( privmsg => $nickToVerify => "Ce code n'existe pas" );
......@@ -241,8 +246,7 @@ sub on_notice
}
# Quand on m'invite, je join
sub on_invite
{
sub on_invite {
my ( $kernel, $user, $chan ) = @_[ KERNEL, ARG0, ARG1 ];
my ( $nick, $mask ) = split( /!/, $user );
......@@ -253,8 +257,7 @@ sub on_invite
}
# Quand un user parle
sub on_speak
{
sub on_speak {
my ( $kernel, $user, $chan, $msg ) = @_[ KERNEL, ARG0, ARG1, ARG2 ];
my @args = ( $kernel, $user, lc $chan->[0], $msg );
......@@ -266,12 +269,10 @@ sub on_speak
# and we check for command
my $cmd = ( split /\s/, $msg )[0];
if ($cmd eq "!fav")
{
if ( $cmd eq "!fav" ) {
@args = ( $kernel, $user, lc $chan->[0], $cmd );
}
else
{
else {
@args = ( $kernel, $user, lc $chan->[0], $msg );
}
PlayBot::commands::parser::exec(@args);
......
......@@ -6,8 +6,7 @@ use utf8;
use PlayBot::commands::get;
sub consume
{
sub consume {
my ( $nick, $id, $chan_src ) = @_;
my @args = ( 0, $nick, $id, $chan_src );
......
......@@ -6,7 +6,10 @@ use utf8;
use LWP::UserAgent;
use JSON;
use Module::Pluggable sub_name => 'sites', search_path => ['PlayBot::sites'], require => 1;
use Module::Pluggable
sub_name => 'sites',
search_path => ['PlayBot::sites'],
require => 1;
use Storable qw(dclone);
use PlayBot::utils::db;
......@@ -19,31 +22,33 @@ our $log;
our $regex;
our $playbot_api_key;
sub external_parse {
my $url = shift;
sub parse {
my ($kernel, $user, $chan, $msg, $playlist) = @_;
my ($nick,$mask) = split(/!/,$user);
my $content = `./PlayBot.go "$url"`;
if ( $? >> 8 != 0 ) {
die "Error";
}
my $ua = LWP::UserAgent->new(
timeout => 2,
env_proxy => 0,
);
my $response = $ua->post(
"http://cloud.cervoi.se:12345/rpc",
"X-PLAYBOT-KEY" => $playbot_api_key,
Content => encode_json {"channel" => $chan, "user" => $nick, "value" => $msg},
my ( $matched_url, $external_id, $url, $title, $author, $duration ) =
split( /\n/, $content );
return (
author => $author,
external_id => $external_id,
duration => $duration,
matched_url => $matched_url,
playlist => 0,
site => 'soundcloud',
title => $title,
url => $url,
);
if ($response->is_success)
{
$log->info("Handled by scala");
$irc->yield(privmsg => $chan => $response->decoded_content);
return;
}
else
{
$log->info($response->code. " still perl job");
}
sub parse {
my ( $kernel, $user, $chan, $msg, $playlist ) = @_;
my ( $nick, $mask ) = split( /!/, $user );
my $chan_conf = PlayBot::utils::db::chan->new($chan);
my %content;
......@@ -51,20 +56,23 @@ sub parse {
my $matching_url;
my @matching_tags;
eval { %content = external_parse($msg) };
if ($@) {
# parsing
foreach my $site (__PACKAGE__->sites)
{
not grep { $site eq "PlayBot::sites::$_" } @{ $chan_conf->sites } and next;
foreach my $site ( __PACKAGE__->sites ) {
if ( not grep { $site eq "PlayBot::sites::$_" } @{ $chan_conf->sites } ) {
next;
}
my @args;
if (@args = ($msg =~ $site->regex))
{
if ( @args = ( $msg =~ $site->regex ) ) {
eval { %content = $site->get(@args) };
$matching_url = $&;
$content{playlist} = 0;
last;
}
elsif ($site->can('regex_playlist') and @args = ($msg =~ $site->regex_playlist))
elsif ( $site->can('regex_playlist')
and @args = ( $msg =~ $site->regex_playlist ) )
{
eval { %content = $site->get_playlist(@args) };
$matching_url = $&;
......@@ -78,16 +86,21 @@ sub parse {
$log->warning($@);
return;
}
} else {
$matching_url = $content{matched_url};
delete $content{matched_url};
}
my $id;
# if we get a new content, we must save it
if (%content) {
($id, @matching_tags) = insert_content($kernel, $nick, $chan, dclone(\%content), $msg, $playlist);
( $id, @matching_tags ) =
insert_content( $kernel, $nick, $chan, dclone( \%content ),
$msg, $playlist );
if (not $playlist and $content{playlist})
{
foreach my $url (@{ $content{urls} })
{
if ( not $playlist and $content{playlist} ) {
foreach my $url ( @{ $content{urls} } ) {
my $new_msg = $msg;
$new_msg =~ s/\Q$matching_url\E/$url/;
parse( $kernel, $user, $chan, $new_msg, $id );
......@@ -95,14 +108,10 @@ sub parse {
}
}
return (
$matching_url,
@matching_tags
);
return ( $matching_url, @matching_tags );
}
sub insert_content
{
sub insert_content {
my ( $kernel, $nick, $chan, $content, $msg, $playlist ) = @_;
my $dbh = PlayBot::utils::db::main_session();
my $id;
......@@ -116,19 +125,18 @@ sub insert_content
INSERT INTO playbot (type, url, external_id, sender, title, duration, playlist)
VALUES (?,?,?,?,?,?,?)
' );
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$log->error("Couldn't prepare querie; aborting")
unless ( defined $sth );
$sth->execute(
$content->{site},
$content->{url},
$content->{external_id},
$content->{author},
$content->{title},
$content->{duration},
$content->{site}, $content->{url},
$content->{external_id}, $content->{author},
$content->{title}, $content->{duration},
$content->{playlist},
);
};
if ($@) {
# seems to be already present in database
$new = 0;
......@@ -140,13 +148,12 @@ sub insert_content
external_id = ?
WHERE url = ?
' );
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$log->error("Couldn't prepare querie; aborting")
unless ( defined $sth );
$sth->execute(
$content->{author},
$content->{title},
$content->{duration},
$content->{external_id},
$content->{author}, $content->{title},
$content->{duration}, $content->{external_id},
$content->{url},
);
}
......@@ -160,31 +167,32 @@ sub insert_content
$id = $sth->fetch->[0];
if (defined($playlist))
{
if ( defined($playlist) ) {
# save track in the playlist
$sth = $dbh->prepare( '
INSERT INTO playbot_playlist_content_association (playlist_id, content_id)
VALUES (?,?)' );
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$log->error("Couldn't prepare querie; aborting")
unless ( defined $sth );
eval {
$sth->execute( $playlist, $id );
$dbh->commit;
};
if ($@)
{
if ($@) {
# the association already exists
$dbh->rollback;
}
}
else
{
else {
# insertion du chan
$sth = $dbh->prepare( '
INSERT INTO playbot_chan (content, chan, sender_irc)
VALUES (?,?,?)' );
$log->error("Couldn't prepare querie; aborting") unless (defined $sth);
$log->error("Couldn't prepare querie; aborting")
unless ( defined $sth );
$sth->execute( $id, $chan, $nick )
or $log->error( "Couldn't finish transaction: " . $dbh->errstr );
......@@ -195,11 +203,14 @@ sub insert_content
my @matching_tags = PlayBot::commands::parser::tag( $msg, $chan, $id );
my @tags;
# get tags
$sth = $dbh->prepare("select tag
$sth = $dbh->prepare(
"select tag
from playbot_tags
where id = ?
");
"
);
$sth->execute($id);
while ( my $data = $sth->fetch ) {
......@@ -210,6 +221,7 @@ sub insert_content
$dbh->commit;
if ($new) {
# schedule download
$kernel->post( downloader => ddl => $id, $content->{url} );
......@@ -222,10 +234,11 @@ sub insert_content
delete $content->{url};
delete $content->{external_id};
if (not $playlist)
{
if ( not $playlist ) {
# message sur irc
$irc->yield(privmsg => $chan => PlayBot::utils::print::print($content));
$irc->yield(
privmsg => $chan => PlayBot::utils::print::print($content) );
}
return $content->{id}, @matching_tags;
......
......@@ -6,13 +6,10 @@ use utf8;
use Inline Python => 'DATA';
sub regex
{
sub regex {
return qr#(?:^|[^!])https?://www.dailymotion.com/video/([a-z0-9]+)#;
}
sub get {
shift;
my $id = shift;
......@@ -30,7 +27,6 @@ sub get {
1;
__DATA__
__Python__
......
......@@ -11,8 +11,7 @@ use FindBin;
my $conf;
my $endpoint = "https://api.deezer.com/track/";
sub regex
{
sub regex {
return qr#(?:^|[^!])https?://(?:www.)?deezer.com/track/([a-zA-Z0-9_-]+)#;
}
......@@ -24,8 +23,7 @@ sub get {
timeout => 30,
env_proxy => 1,
);
my $response = $ua->get($endpoint
.$id);
my $response = $ua->get( $endpoint . $id );
die( $response->status_line ) unless ( $response->is_success );
my $content = decode_json( $response->decoded_content );
......
......@@ -19,9 +19,9 @@ BEGIN {
$conf = decode_json($json);
}
sub regex
{
return qr#(?:^|[^!])https?://(?:www.)?facebook.com/(?:video/)?(?:video.php\?v=|.*/videos/)([a-zA-Z0-9_-]+)#;
sub regex {
return
qr#(?:^|[^!])https?://(?:www.)?facebook.com/(?:video/)?(?:video.php\?v=|.*/videos/)([a-zA-Z0-9_-]+)#;
}
sub get {
......@@ -32,9 +32,11 @@ sub get {
timeout => 30,
env_proxy => 1,
);
my $response = $ua->get($endpoint
my $response =
$ua->get( $endpoint
. $id
.'?access_token='.$conf->{'facebook_access_token'}
. '?access_token='
. $conf->{'facebook_access_token'}
. '&fields=title,from,permalink_url,length' );
die( $response->status_line ) unless ( $response->is_success );
......
......@@ -8,13 +8,10 @@ use LWP::UserAgent;
use JSON;
use Encode;
sub regex
{
sub regex {
return qr#(?:^|[^!])https?://www.mixcloud.com/([\w-]+/[\w-]+)#;
}
sub get {
shift;
my $id = shift;
......