#!/usr/bin/perl package Bot; use Mail::Sendmail; use base qw(Bot::BasicBot); use warnings; use strict; if(@ARGV && ! -w "$ARGV[0]" || !@ARGV) { if(@ARGV) { print "ERREUR: $ARGV[0] est inexistant ou non-inscriptible.\n"; } else { print "USAGE: $0 fichier-a-ecrire\n"; } exit 1; } my $nick = "fdnAlertBot"; my $server = "irc.geeknode.org"; my $chan = "#fdn"; my $flag = "[ALERT]"; my $url = "http://fdn.ldn-fai.net"; my $git = "git clone http://repo.ldn-fai.net/repo/si-public.git"; my $subscribe = "http://listes.ldn-fai.net/cgi-bin/mailman/listinfo/fdn"; my $mail_support = 'support@fdn.fr'; my $mail_liste = 'fdn@listes.ldn-fai.net'; my $mail_from = 'fdnAlertBot '; my $mail_subject = "[ALERTE FDN] "; my $isacc = 0; my $file = $ARGV[0]; my $bot; sub said { my $self = shift; my $message = shift; return 0 unless $message->{"address"}; if($message->{"address"} eq $nick || $message->{"address"} eq "msg") { if($message->{"body"} =~ m/\br(?:e|é)ponse\b/i) { $self->reply($message, "42."); } elsif($message->{"body"} =~ m/\b(?:drapeau|flag|tag)\b/i) { $self->reply($message, $flag); } elsif($message->{"body"} =~ m/\b(?:url|adresse)\b/i) { $self->reply($message, $url); } elsif($message->{"body"} =~ m/\b(?:git|svn|source)\b/i) { $self->reply($message, $git); } elsif($message->{"body"} =~ m/\bliste\b/i) { $self->reply($message, "$mail_liste ($subscribe)"); } elsif($message->{"body"} =~ m/\bmerci\b/i) { $self->reply($message, "De rien."); } else { $self->reply($message, "Pour signaler un problème, ajouter $flag à la suite " ."du /topic, suivi d'un court descriptif. Ce dernier sera reporté sur " ."<$url>, qui sera mis à jour chaque fois qu'il changera. Retirer $flag " ."du /topic vide la page, ce qui signale la fin du problème."); } } } sub topic { my $self = shift; my $args = shift; my %mail = ( From => $mail_from, To => $mail_liste, Cc => $mail_support, "Content-Type" => 'text/plain; charset="utf-8"' ); if($args->{"topic"}) { if($args->{"topic"} =~ /\Q$flag\E\s*(.+)$/i) { $mail{"Message"} = $1; open(OUT, ">$file"); print OUT "$1"; close(OUT); if($isacc) { $mail{"Subject"} = "$mail_subject Mise à jour de l'intitulé du problème"; $bot->emote( channel => $chan, body => "a bien actualisé le problème sur $url (et prévenu le support + $mail_liste)" ); } else { $isacc = 1; $mail{"Subject"} = "$mail_subject Nouveau problème déclaré"; $bot->emote( channel => $chan, body => "a bien reporté le problème sur $url (et prévenu le support + $mail_liste)" ); } sendmail(%mail) or die $Mail::Sendmail::error; } elsif($isacc) { $isacc = 0; $mail{"Subject"} = "$mail_subject Problème résolu"; $mail{"Message"} = "Fin de l'alerte."; open(OUT, ">$file"); print OUT ""; close(OUT); $bot->emote( channel => $chan, body => "a bien pris en compte la fin du problème sur $url (et prévenu le support + $mail_liste)" ); sendmail(%mail) or die $Mail::Sendmail::error; } } } $bot = Bot->new( server => $server, port => "6667", channels => [$chan], nick => $nick, alt_nicks => ["${nick}_"], username => $nick, name => $url ); $bot->run(); exit 0;