fdn-accbot.pl 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/usr/bin/perl
  2. package Bot;
  3. use base qw(Bot::BasicBot);
  4. use warnings;
  5. use strict;
  6. if(@ARGV && ! -w "$ARGV[0]" || !@ARGV) {
  7. if(@ARGV) {
  8. print "ERREUR: $ARGV[0] est inexistant ou non-inscriptible.\n";
  9. } else {
  10. print "USAGE: ./$0 fichier-a-ecrire\n";
  11. }
  12. exit 1;
  13. }
  14. my $nick = "fdnAlertBot";
  15. my $chan = "#fdnbottest";
  16. my $flag = "[ALERT]";
  17. my $url = "http://fdn.ldn-fai.net";
  18. my $git = "git clone http://repo.ldn-fai.net/repo/si-public.git";
  19. my $isacc = 0;
  20. my $file = $ARGV[0];
  21. my $bot;
  22. sub said {
  23. my $self = shift;
  24. my $message = shift;
  25. return 0 unless $message->{"address"};
  26. if($message->{"address"} eq $nick || $message->{"address"} eq "msg") {
  27. if($message->{"body"} =~ m/r(?:e|é)ponse/i) {
  28. $self->reply($message, "42.");
  29. } elsif($message->{"body"} =~ m/(?:drapeau|flag|tag)/i) {
  30. $self->reply($message, $flag);
  31. } elsif($message->{"body"} =~ m/(?:url|adresse)/i) {
  32. $self->reply($message, $url);
  33. } elsif($message->{"body"} =~ m/(?:git|svn|source)/i) {
  34. $self->reply($message, $git);
  35. } elsif($message->{"body"} =~ m/merci/i) {
  36. $self->reply($message, "De rien.");
  37. } else {
  38. $self->reply($message, "Bonjour ".$message->{"who"}.". "
  39. ."Pour signaler un accident sur l'infrastructure de FDN, "
  40. ."il suffit d'ajouter le drapeau $flag à la fin du /topic de $chan, "
  41. ."suivi d'une courte information sur sa nature. Je me chargerai "
  42. ."personnellement de reporter instantanément celle-ci sur <$url>. "
  43. ."La page sera mise à jour chaque fois que le /topic changera en "
  44. ."gardant le drapeau. Dès lors que ce dernier disparaîtra, la "
  45. ."page redeviendra vierge, ce qui signalera la fin de l'accident. "
  46. ."Bonne chance, ".$message->{"who"}." !");
  47. #$self->reply($message, "SYNTAXE : /topic N'importe quoi $flag Description de l'accident");
  48. }
  49. }
  50. }
  51. sub topic {
  52. my $self = shift;
  53. my $args = shift;
  54. if($args->{"topic"}) {
  55. if($args->{"topic"} =~ /\Q$flag\E\s*(.+)$/i) {
  56. $isacc = 1;
  57. open(OUT, ">$file");
  58. print OUT "$1";
  59. close(OUT);
  60. $bot->emote(
  61. channel => $chan,
  62. body => "a bien reporté l'accident sur $url"
  63. );
  64. } elsif($isacc) {
  65. $isacc = 0;
  66. open(OUT, ">$file");
  67. print OUT "";
  68. close(OUT);
  69. $bot->emote(
  70. channel => $chan,
  71. body => "a bien pris en compte la fin de l'accident ($url)"
  72. );
  73. }
  74. }
  75. }
  76. $bot = Bot->new(
  77. server => "irc.geeknode.org",
  78. port => "6667",
  79. channels => [$chan],
  80. nick => $nick,
  81. alt_nicks => ["${nick}_"],
  82. username => $nick,
  83. name => $url
  84. );
  85. $bot->run();
  86. exit 0;