unefede.pl 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. package MyBot;
  5. use base qw( Bot::BasicBot );
  6. binmode STDOUT, ":utf8";
  7. use utf8;
  8. my $nb_adh = 0; # nombre d'adhérents
  9. my $nb_abo = 0; # nombre d'abonnés
  10. my $site = ""; # site web
  11. my $salon = ""; # salon irc/xmpp
  12. my $statut = 0; # étape de 1 à 8 du FAI
  13. my $date_crea = ""; # date de la création de l'asso
  14. my $date_jffdn = ""; # date de la rentrée dans la fédé
  15. my $contact = ""; # email de contact
  16. my $description = ""; # description de l'asso
  17. my $wrk_dir = "wrk-dir";
  18. # Lis le fichier contenant les infos d'un FAI
  19. sub info {
  20. my $fai = shift @_;
  21. my $filename = "/home/canouan/bot-irc/". $wrk_dir."/". $fai.".info";
  22. my $fh;
  23. open ($fh, '<', $filename) or die "Impossible d'ouvrir le fichier $filename en lecture";
  24. while (my $line = <$fh>)
  25. {
  26. return $line;
  27. }
  28. close $fh;
  29. }
  30. # Lis le fichier contenant les nombres adh/abo d'un FAI
  31. sub adh {
  32. my $fai = shift @_;
  33. my $filename = "/home/canouan/bot-irc/". $wrk_dir."/". $fai.".adh";
  34. my $fh;
  35. open ($fh, '<', $filename) or die "Impossible d'ouvrir le fichier $filename en lecture";
  36. while (my $line = <$fh>)
  37. {
  38. return $line;
  39. }
  40. close $fh;
  41. }
  42. # lis le fichier avec les infos pour la réunion de suivi
  43. sub suivi {
  44. my $filename = "/home/canouan/bot-irc/". $wrk_dir."/suivi";
  45. my $fh;
  46. open ($fh, '<', $filename) or die "Impossible d'ouvrir le fichier $filename en lecture";
  47. while (my $line = <$fh>)
  48. {
  49. return $line;
  50. }
  51. close $fh;
  52. }
  53. ## Le bot lit le chan et réagit
  54. sub said {
  55. my ($self, $message) = @_;
  56. # si on veut des info
  57. if ($message->{body} =~ /^\+info/) {
  58. shift @_;
  59. # Apinnet
  60. if($message->{body} =~ /(ap[in]|Poitou|Charente|Rochelle|(Deux[- ])?S[èe]vres?|Vienne|Angoul[eêè]me|Niort|Poitiers)/) {
  61. return "site : http://www.apinnet.fr/ salon : irc://irc.geeknode.org/#Apinnet dans le Poitou-Charentes";
  62. }
  63. elsif($message->{body} =~ /\btest/) {
  64. info ("ilico");
  65. }
  66. # Aquilenet
  67. elsif($message->{body} =~ /\b(aq(ui|n)|Bord(o|e?au)|Landes|Gironde)/i) {
  68. info ("aquilenet");
  69. }
  70. # ARN
  71. elsif($message->{body} =~ /\b(a(lsace|rn)|Stras|Colma)/i) {
  72. info("arn");
  73. }
  74. # Auvernet
  75. elsif($message->{body} =~ /\b(Auver|Puy[- ](de[- ])D[oô]me|avn)/i) {
  76. info ("auvernet");
  77. }
  78. # Cafai
  79. elsif($message->{body} =~ /\b(cafai|champagne|ardenn?e)/i) {
  80. info("cafai");
  81. }
  82. # faimaison
  83. elsif($message->{body} =~ /\b(fma|fail?m|Nantes|Loire[- ]Atlantique)/i) {
  84. info ("faimaison");
  85. }
  86. # FDN
  87. elsif($message->{body} =~ /\bf(rench|dn)/i) {
  88. return"French Data Network, site : http://www.fdn.fr/ salon : irc://irc.geeknode.org/#fdn. Partout en France Métropolitaine" ;
  89. }
  90. # franciliens.net
  91. elsif($message->{body} =~ /\b(f(ranc|cn)|idf|Paris)/i) {
  92. info ("franciliens");
  93. }
  94. # grifon
  95. elsif($message->{body} =~ /\b(grif|rennes|[îi]l?le[- ](et[- ])?vilaine)/i) {
  96. info("grifon");
  97. }
  98. # ilico
  99. elsif($message->{body} =~ /\b(ilc|ill?[iy][ck])|(Corr?[éêèe][sz])/i) {
  100. info("ilico");
  101. }
  102. # illyse
  103. elsif($message->{body} =~ /\b(ill?y|ill?i[sz]|lyon|rh[ôo]ne|loire|((st|saint)[- ]etienn?e))/i) {
  104. info ("illyse");
  105. }
  106. # iloth
  107. elsif($message->{body} =~ /\b(ilo|mont?pel|h[ée]rault)/i) {
  108. info("iloth");
  109. }
  110. # ldn
  111. elsif($message->{body} =~ /\b(l(or|dn)|Nancy|Metz|Moselle|Meuse|Meurthe|Vosges)/i) {
  112. info("ldn");
  113. }
  114. # ndn
  115. elsif($message->{body} =~ /\b(n(ice|dn)|Antibes|Cannes|Valbonne|Alpes[- ]Maritimes)/i) {
  116. info("ldn");
  117. }
  118. # netopi
  119. elsif($message->{body} =~ /\b(netopi|Seine[- ](et[- ])?Marne)/i) {
  120. return "Netopi = site : http://netopi.fr ; pas de salon ; en Seine et Marne";
  121. }
  122. # pclight
  123. elsif($message->{body} =~ /\b(yonne|beon|cheny|pc[- ]?l)/i) {
  124. info("pclight");
  125. }
  126. # rézine
  127. elsif($message->{body} =~ /\b(r[eé]z|Isère|Grenoble)/i) {
  128. info("rezine");
  129. }
  130. # rhizome
  131. elsif($message->{body} =~ /\b(rh?[iy][sz]om|Oise|Compi[eéêè]gne)/i) {
  132. info("rhizome");
  133. }
  134. # sames
  135. elsif($message->{body} =~ /\bsam|(Pyrénées[- ]Atlantiques)/i) {
  136. info("sames");
  137. }
  138. # sdn
  139. elsif($message->{body} =~ /\b(s(all|dn)|Savoie|Haute[- ]Savoie)/i) {
  140. return"Sallanches Data Network = siteweb : http://sdnet.info/ ; pas de salon ; à Sallanches (73)";
  141. }
  142. # teleragno
  143. elsif($message->{body} =~ /\b(mars|telerag|telegrano)/i) {
  144. info ("teleragno");
  145. }
  146. # tetaneutral
  147. elsif($message->{body} =~ /\b(t(eta|tn|nn)|Toulouse|Comminges|(Haute[- ]Garon?ne))/i) {
  148. info ("tetaneutral");
  149. }
  150. # ail-network
  151. elsif($message->{body} =~ /\bail/i) {
  152. return "Aïl-network = siteweb : http://ail-network.org/ ; pas de salon ; Tarn Sud-Est (Pays d'Autan)";
  153. }
  154. # chaul'hertz
  155. elsif($message->{body} =~ /\b(c(haul|hz)|hertz|tarn|autan)/i) {
  156. return "Chaul'Hertz = pas de site ni de salon ; Chauley, hameau à St Maurice en Rivière (71)";
  157. }
  158. # igwan
  159. elsif($message->{body} =~ /\b(ig[wn]|sbg|saint[- ]barth)/i) {
  160. info ("igwan");
  161. }
  162. # neutrinet
  163. elsif($message->{body} =~ /\b(neutri|n[tre]n|belgique)/i) {
  164. info("neutrinet");
  165. }
  166. elsif($message->{body} =~ /\bf(ede|fdn|rance|édé)/i) {
  167. return "La federation FDN est une asso qui regroupe des FAIs associatifs";
  168. }
  169. # Si le FAI n'est pas valide, on l'indique
  170. else {
  171. return "commande : +info <fai> ou +info <lieu geographique>";
  172. }
  173. }
  174. # si on veut le nombre d'adhérent
  175. elsif ($message->{body} =~ /^\+adh/) {
  176. shift @_;
  177. # Apinnet
  178. if($message->{body} =~ /\b(ap[in]|Poitou|Charente|Rochelle|(Deux[- ])?S[èe]vres?|Vienne|Angoul[eêè]me|Niort|Poitiers)/i) {
  179. return "Aucune info pour apinnet";
  180. }
  181. # Aquilenet
  182. elsif($message->{body} =~ /\b(aq(ui|n)|Bord(o|e?au)|Landes|Gironde)/i) {
  183. adh ("aquilenet");
  184. }
  185. # ARN
  186. elsif($message->{body} =~ /\b(a(lsace|rn)|Stras|Colma)/i) {
  187. adh("arn");
  188. }
  189. # Auvernet
  190. elsif($message->{body} =~ /\b(Auver|Puy[- ](de[- ])D[oô]me|avn)/i) {
  191. adh ("auvernet");
  192. }
  193. # Cafai
  194. elsif($message->{body} =~ /\b(cafai|champagne|ardenn?e)/i) {
  195. adh("cafai");
  196. }
  197. # faimaison
  198. elsif($message->{body} =~ /\b(fma|fail?m|Nantes|Loire[- ]Atlantique)/i) {
  199. adh ("faimaison");
  200. }
  201. # FDN
  202. elsif($message->{body} =~ /\bf(rench|dn|rance)/) {
  203. return "Aucune info pour FDN";
  204. }
  205. # franciliens.net
  206. elsif($message->{body} =~ /\b(f(ranc|cn)|idf|Paris)/i) {
  207. adh ("franciliens");
  208. }
  209. # grifon
  210. elsif($message->{body} =~ /\b(grif|rennes|[îi]l?le[- ](et[- ])?vilaine)/i) {
  211. adh("grifon");
  212. }
  213. # ilico
  214. elsif($message->{body} =~ /\b(ilc|ill?[iy][ck])|(Corr?[éêèe][sz])/i) {
  215. adh("ilico");
  216. }
  217. # illyse
  218. elsif($message->{body} =~ /\b(ill?y|ill?i[sz]|lyon|rh[ôo]ne|loire|((st|saint)[- ]etienn?e))/i) {
  219. adh ("illyse");
  220. }
  221. # iloth
  222. elsif($message->{body} =~ /\b(ilo|mont?pel|h[ée]rault)/i) {
  223. adh("iloth");
  224. }
  225. # ldn
  226. elsif($message->{body} =~ /\b(l(or|dn)|Nancy|Metz|Moselle|Meuse|Meurthe|Vosges)/i) {
  227. adh("ldn");
  228. }
  229. # ndn
  230. elsif($message->{body} =~ /\b(n(ice|dn)|Antibes|Cannes|Valbonne|Alpes[- ]Maritimes)/i) {
  231. adh("ldn");
  232. }
  233. # netopi
  234. elsif($message->{body} =~ /\b(netopi|Seine[- ](et[- ])?Marne)/i) {
  235. return "Netopi = site : http://netopi.fr ; pas de salon ; en Seine et Marne";
  236. }
  237. # pclight
  238. elsif($message->{body} =~ /\b(yonne|beon|cheny|pc[- ]?l)/i) {
  239. adh("pclight");
  240. }
  241. # rézine
  242. elsif($message->{body} =~ /\b(r[eé]z|Isère|Grenoble)/i) {
  243. adh("rezine");
  244. }
  245. # rhizome
  246. elsif($message->{body} =~ /\b(rh?[iy][sz]om|Oise|Compi[eéêè]gne)/i) {
  247. adh("rhizome");
  248. }
  249. # sames
  250. elsif($message->{body} =~ /\bsam|(Pyrénées[- ]Atlantiques)/i) {
  251. adh("sames");
  252. }
  253. # sdn
  254. elsif($message->{body} =~ /\b(s(all|dn)|Savoie|Haute[- ]Savoie)/i) {
  255. return "aucune info pour SDN";
  256. }
  257. # teleragno
  258. elsif($message->{body} =~ /\b(mars|telerag|telegrano)/i) {
  259. adh ("teleragno");
  260. }
  261. # tetaneutral
  262. elsif($message->{body} =~ /\b(t(eta|tn|nn)|Toulouse|Comminges|(Haute[- ]Garon?ne))/i) {
  263. adh ("tetaneutral");
  264. }
  265. # ail-network
  266. elsif($message->{body} =~ /\bail/i) {
  267. return "aucune info pour Aïl-network";
  268. }
  269. # chaul'hertz
  270. elsif($message->{body} =~ /\b(c(haul|hz)|hertz|tarn|autan)/i) {
  271. return "aucune info pour Chaul-Hertz";
  272. }
  273. # igwan
  274. elsif($message->{body} =~ /\b(ig[wn]|sbg|saint[- ]barth)/i) {
  275. adh ("igwan");
  276. }
  277. # neutrinet
  278. elsif($message->{body} =~ /\b(neutri|n[tre]n|belgique)/i) {
  279. adh("neutrinet");
  280. }
  281. elsif($message->{body} =~ m{\bf(ede|fdn|rance|édé)}i) {
  282. return "Not yet";
  283. }
  284. # Si le FAI n'est pas valide, on l'indique
  285. else {
  286. return "commande : +adh <fai> ou +adh <lieu geographique>";
  287. }
  288. }
  289. # si on veut de l'aide
  290. elsif ($message->{body} =~ /^\+help/) {
  291. return "pour les infos +info - pour les nombres d'adhérent·e·s et d'abonné·e·s +adh - pour les informations par rapport aux réunios de suivi +suivi - pour les sources du bot +source";
  292. }
  293. # les sources du bot
  294. elsif ($message->{body} =~ /^\+source/) {
  295. return "http://gitorious.com";
  296. }
  297. # les infos par rapport aux réunions de suivies
  298. elsif ($message->{body} =~ /^\+suivi/) {
  299. suivi;
  300. }
  301. elsif ($message->{body} =~ /datafoin/) {
  302. return "il ne faut pas me donner à manger après minuit";
  303. }
  304. }
  305. # tout ce qu'on écrit dans /tmp/log apparait dans $channel
  306. my $channel = '#bottestbot';
  307. sub connected {
  308. # my $channel = shift;
  309. my $self = shift;
  310. $self->forkit({ channel => $channel,
  311. run => [ qw( /usr/bin/tail -f /tmp/log ) ],
  312. });
  313. }
  314. # aucune idée de comment on déclenche cette ligne
  315. sub help { "Je suis le bot de la fédé." }
  316. #Info de connexion du bot
  317. MyBot->new(
  318. server => 'irc.geeknode.org',
  319. channels => [ '#bottestbot'],
  320. nick => 'UneFede',
  321. username => 'bot',
  322. name => 'Droide de la Federation FDN, run by Vigdis'
  323. )->run();