diff --git a/Modules/Meteo.pm b/Modules/Meteo.pm index aafde9c44ece86ff50fb2e3bd01d6dc643bf5b60..14c036ddd83a8f6522546a25ad9d695804cc84e1 100644 --- a/Modules/Meteo.pm +++ b/Modules/Meteo.pm @@ -16,100 +16,112 @@ my %mktime_day = %Common::mktime_day; +# Quelques signes, au cas où ça sert un jour : +# ☀☁☂☃☄☔☼⛄⛅⛆⛇⛈ + + # ### # meteo_main # Donne la meteo -# +# # Usage : # !meteo {<city> [<day>]|<day>} # ### sub meteo_main { my ($conn, $event, $reply_to, $ref_params) = @_; - + # TODO Faire directement les 4 ou 5 requêtes vers des villes aux 4 ou 5 coins de la France return 0 unless(defined($ref_params->[0])); - + my $htmlreq = new HTMLRequests($conn); - + my $url = "http://www.lameteogratuite.com/meteo/previsions-meteo-gratuite-".$ref_params->[0]."-france.html"; my $method = "GET"; my $raw_result = 0; my $callback = \&send_result; - + my %params = ( "event" => $event, "reply_to" => $reply_to, "params" => $ref_params, "ville" => $ref_params->[0], ); - - $htmlreq->wget($url, $method, undef, $raw_result, $callback, \%params); - + + $htmlreq->wget($url, $method, undef, $raw_result, $callback, \%params); + return 1; } sub send_result -{ +{ my ($conn, $status, $buffer, $params) = @_; $::logger->debug("Meteo result received\n"); - - if($status) + + if($status != -1) { $::logger->debug("Status ok\n"); - + my $count = 0; - + if(defined(my $day = $params->{"params"}->[1])) { my (undef,undef,undef,undef,undef,undef,$wday) = localtime(time); - + $::logger->debug("Reaching $day"); - + $count = &Common::time_reach_day($day, $wday); - + $::logger->debug("Table count: $count"); } - + my $te = HTML::TableExtract->new( "depth" => 0, "count" => $count ); $te->parse($buffer); - + if(!$te->tables) { $::logger->debug("But ".$params->{"ville"}." not found in cities"); - + # On essaye de faire la meteo d'une des personnes présentes sur le chan if(!&nick_weather($conn, $params->{"reply_to"}, $params->{"ville"})) { $::displayer->sendto($params->{"reply_to"}, "This city (".$params->{"ville"}.") doesn't seem to be found. Check for a bigger city! (in France)"); } - + return 1; } - + foreach my $ts ($te->tables) { # On récupère tout ce dont on a besoin my $jour = $ts->rows->[0]->[0]; - my $prev_matin = $ts->rows->[2]->[1]; - my $prev_aprem = $ts->rows->[2]->[2]; - my $temp_matin = $ts->rows->[3]->[1]; - my $temp_aprem = $ts->rows->[3]->[2]; - - $prev_matin =~ s/[\n\t]//g; - $prev_aprem =~ s/[\n\t]//g; - - my $msg = "\x034[\x033".$params->{"ville"}."\x034]\x03 \x1F$jour\x1F \x034Jour\x03 \x0312$prev_matin\x03 \x0307$temp_matin\x03 \x038|\x03 \x034Nuit\x03 \x0312$prev_aprem\x03 \x0307$temp_aprem\x03"; - + my $msg = "\x034[\x033".$params->{"ville"}."\x034]\x03 \x1F$jour\x1F "; + my @prevs = (); + + for (my $i = 1; $i <= $#{$ts->rows->[0]}; $i++) + { + my $hour = $ts->rows->[0]->[$i]; + my $prev = $ts->rows->[2]->[$i]; + my $temp = $ts->rows->[3]->[$i]; + + $prev =~ s/[\n\t]//g; + $hour =~ s/^0// unless $hour =~ /^0h/; + $hour =~ s/00$//; + + push(@prevs, "\x0304$hour\x03 \x0312$prev\x03 \x0307$temp\x03"); + } + + $msg .= join(" \x038|\x03 ", @prevs); + $::displayer->sendto($params->{"reply_to"}, $msg); $::logger->debug("Sent ok"); } - + return 1; } - + $::logger->debug("Status not ok\n'''"); $::logger->debug($buffer); $::logger->debug("'''\n"); @@ -125,21 +137,21 @@ sub send_result sub nick_weather { my ($conn, $reply_to, $pseudo) = @_; - + return 0 if($reply_to !~ /^#/); $::logger->debug("Trying people weather on '$pseudo'"); - + my $nicks = Chans::users($reply_to); $::logger->debug("There are '".join("', '", @{$nicks})."' on $reply_to"); - + my $pers_alea = $Config::nick; my $nb_personnes_presentes = $#{$nicks} + 1; while($pers_alea eq $Config::nick || $pers_alea eq $pseudo) - { + { my $alea = int(rand($nb_personnes_presentes)); $pers_alea = $nicks->[$alea]; } - + # tableau des humeurs des gens my @humeurs = (" is feeling cuddly", " is grumpy", @@ -160,7 +172,7 @@ sub nick_weather " loves ".$pers_alea, " is hiding something", ); - + # TODO un pseudo va changer de meteo à chaque appel, faire en sorte que ce soit tous les jours... if($pseudo eq $Config::nick) { @@ -174,7 +186,7 @@ sub nick_weather { return 0; } - + return 1; } # Fin nick_weather @@ -186,9 +198,9 @@ sub nick_weather sub meteo_help { my ($conn, $event, $reply_to, $ref_params) = @_; - + $conn->privmsg($reply_to, "`".$Config::command_sign.$ref_params->[0]." <city> [<day>]` => display weather in a France <city> on a <day>"); - + return 1; } # Fin meteo_help