fdn-accbot.pl 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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 $server = "irc.geeknode.org";
  16. my $chan = "#fdnbottest";
  17. my $flag = "[ALERT]";
  18. my $url = "http://fdn.ldn-fai.net";
  19. my $git = "git clone http://repo.ldn-fai.net/repo/si-public.git";
  20. my $isacc = 0;
  21. my $file = $ARGV[0];
  22. my $bot;
  23. sub said {
  24. my $self = shift;
  25. my $message = shift;
  26. return 0 unless $message->{"address"};
  27. if($message->{"address"} eq $nick || $message->{"address"} eq "msg") {
  28. if($message->{"body"} =~ m/r(?:e|é)ponse/i) {
  29. $self->reply($message, "42.");
  30. } elsif($message->{"body"} =~ m/(?:drapeau|flag|tag)/i) {
  31. $self->reply($message, $flag);
  32. } elsif($message->{"body"} =~ m/(?:url|adresse)/i) {
  33. $self->reply($message, $url);
  34. } elsif($message->{"body"} =~ m/(?:git|svn|source)/i) {
  35. $self->reply($message, $git);
  36. } elsif($message->{"body"} =~ m/merci/i) {
  37. $self->reply($message, "De rien.");
  38. } else {
  39. $self->reply($message, "Pour signaler un accident, ajouter $flag à la suite "
  40. ."du /topic, suivi d'un court descriptif. Ce dernier sera reporté sur "
  41. ."<$url>, qui sera mis à jour chaque fois qu'il changera. Retirer $flag "
  42. ."du /topic vide la page, ce qui signale la fin de l'accident.");
  43. }
  44. }
  45. }
  46. sub topic {
  47. my $self = shift;
  48. my $args = shift;
  49. if($args->{"topic"}) {
  50. if($args->{"topic"} =~ /\Q$flag\E\s*(.+)$/i) {
  51. $isacc = 1;
  52. open(OUT, ">$file");
  53. print OUT "$1";
  54. close(OUT);
  55. $bot->emote(
  56. channel => $chan,
  57. body => "a bien reporté l'accident sur $url"
  58. );
  59. } elsif($isacc) {
  60. $isacc = 0;
  61. open(OUT, ">$file");
  62. print OUT "";
  63. close(OUT);
  64. $bot->emote(
  65. channel => $chan,
  66. body => "a bien pris en compte la fin de l'accident ($url)"
  67. );
  68. }
  69. }
  70. }
  71. $bot = Bot->new(
  72. server => $server,
  73. port => "6667",
  74. channels => [$chan],
  75. nick => $nick,
  76. alt_nicks => ["${nick}_"],
  77. username => $nick,
  78. name => $url
  79. );
  80. $bot->run();
  81. exit 0;