fdn-accbot.pl 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #!/usr/bin/perl
  2. package Bot;
  3. use Mail::Sendmail;
  4. use base qw(Bot::BasicBot);
  5. use warnings;
  6. use strict;
  7. if(@ARGV && ! -w "$ARGV[0]" || !@ARGV) {
  8. if(@ARGV) {
  9. print "ERREUR: $ARGV[0] est inexistant ou non-inscriptible.\n";
  10. } else {
  11. print "USAGE: $0 fichier-a-ecrire\n";
  12. }
  13. exit 1;
  14. }
  15. my $nick = "fdnAlertBot";
  16. my $server = "irc.geeknode.org";
  17. my $chan = "#fdn";
  18. my $flag = "[ALERT]";
  19. my $url = "http://fdn.ldn-fai.net";
  20. my $git = "git clone http://repo.ldn-fai.net/repo/si-public.git";
  21. my $subscribe = "http://listes.ldn-fai.net/cgi-bin/mailman/listinfo/fdn";
  22. my $mail_support = 'support@fdn.fr';
  23. my $mail_liste = 'fdn@listes.ldn-fai.net';
  24. my $mail_from = 'fdnAlertBot <fdnAlertBot@ldn-fai.net>';
  25. my $mail_subject = "[ALERTE FDN] ";
  26. my $isacc = 0;
  27. my $file = $ARGV[0];
  28. my $bot;
  29. sub said {
  30. my $self = shift;
  31. my $message = shift;
  32. return 0 unless $message->{"address"};
  33. if($message->{"address"} eq $nick || $message->{"address"} eq "msg") {
  34. if($message->{"body"} =~ m/\br(?:e|é)ponse\b/i) {
  35. $self->reply($message, "42.");
  36. } elsif($message->{"body"} =~ m/\b(?:drapeau|flag|tag)\b/i) {
  37. $self->reply($message, $flag);
  38. } elsif($message->{"body"} =~ m/\b(?:url|adresse)\b/i) {
  39. $self->reply($message, $url);
  40. } elsif($message->{"body"} =~ m/\b(?:git|svn|source)\b/i) {
  41. $self->reply($message, $git);
  42. } elsif($message->{"body"} =~ m/\bliste\b/i) {
  43. $self->reply($message, "$mail_liste ($subscribe)");
  44. } elsif($message->{"body"} =~ m/\bmerci\b/i) {
  45. $self->reply($message, "De rien.");
  46. } else {
  47. $self->reply($message, "Pour signaler un problème, ajouter $flag à la suite "
  48. ."du /topic, suivi d'un court descriptif. Ce dernier sera reporté sur "
  49. ."<$url>, qui sera mis à jour chaque fois qu'il changera. Retirer $flag "
  50. ."du /topic vide la page, ce qui signale la fin du problème.");
  51. }
  52. }
  53. }
  54. sub topic {
  55. my $self = shift;
  56. my $args = shift;
  57. my %mail = (
  58. From => $mail_from,
  59. To => $mail_liste,
  60. Cc => $mail_support,
  61. "Content-Type" => 'text/plain; charset="utf-8"'
  62. );
  63. if($args->{"topic"}) {
  64. if($args->{"topic"} =~ /\Q$flag\E\s*(.+)$/i) {
  65. $mail{"Message"} = $1;
  66. open(OUT, ">$file");
  67. print OUT "$1";
  68. close(OUT);
  69. if($isacc) {
  70. $mail{"Subject"} = "$mail_subject Mise à jour de l'intitulé du problème";
  71. $bot->emote(
  72. channel => $chan,
  73. body => "a bien actualisé le problème sur $url (et prévenu le support + $mail_liste)"
  74. );
  75. } else {
  76. $isacc = 1;
  77. $mail{"Subject"} = "$mail_subject Nouveau problème déclaré";
  78. $bot->emote(
  79. channel => $chan,
  80. body => "a bien reporté le problème sur $url (et prévenu le support + $mail_liste)"
  81. );
  82. }
  83. sendmail(%mail) or die $Mail::Sendmail::error;
  84. } elsif($isacc) {
  85. $isacc = 0;
  86. $mail{"Subject"} = "$mail_subject Problème résolu";
  87. $mail{"Message"} = "Fin de l'alerte.";
  88. open(OUT, ">$file");
  89. print OUT "";
  90. close(OUT);
  91. $bot->emote(
  92. channel => $chan,
  93. body => "a bien pris en compte la fin du problème sur $url (et prévenu le support + $mail_liste)"
  94. );
  95. sendmail(%mail) or die $Mail::Sendmail::error;
  96. }
  97. }
  98. }
  99. $bot = Bot->new(
  100. server => $server,
  101. port => "6667",
  102. channels => [$chan],
  103. nick => $nick,
  104. alt_nicks => ["${nick}_"],
  105. username => $nick,
  106. name => $url
  107. );
  108. $bot->run();
  109. exit 0;