123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #!/usr/bin/perl
- package Bot;
- use Mail::Sendmail;
- use MIME::Base64;
- use MIME::Words qw(encode_mimewords);
- use base qw(Bot::BasicBot);
- use warnings;
- use strict;
- use utf8;
- 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 = "https://fdn.ldn-fai.net";
- my $git = "git clone https://code.ffdn.org/ldn/puppet.git";
- my $subscribe = "https://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 <fdnAlertBot@ldn-fai.net>';
- my $mail_subject = "[ALERTE FDN]";
- my $isacc = 0;
- my $file = $ARGV[0];
- my $bot;
- sub said {
- my $self = shift;
- my $message = shift;
- return undef 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
- );
- if($args->{"topic"}) {
- if($args->{"topic"} =~ /\Q$flag\E\s*(.+)$/i) {
- my $msg = $1;
- $mail{"Message"} = $msg;
- utf8::decode($msg);
- open(OUT, ">$file");
- binmode(OUT, ":utf8");
- print OUT "$msg";
- 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)"
- );
- }
- sendemail(\%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)"
- );
- sendemail(\%mail) or die $Mail::Sendmail::error;
- }
- }
- }
- sub sendemail {
- my $mail = shift;
- my %mail = %{$mail};
- utf8::encode($mail{"Subject"});
- $mail{"Subject"} = encode_mimewords($mail{"Subject"}, Charset => "utf-8", Encoding => "Q");
- $mail{"Message"} = encode_base64($mail{"Message"});
- $mail{"Content-Type"} = 'text/plain; charset="utf-8"';
- $mail{"Content-Transfer-Encoding"} = "base64";
- 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;
|