unefede.pl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  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/daga/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/daga/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/daga/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. # lis le fichier avec les infos pour la réunion de suivi
  54. sub vote {
  55. my $filename = "/home/daga/bot-irc/". $wrk_dir."/vote";
  56. my $fh;
  57. open ($fh, '<', $filename) or die "Impossible d'ouvrir le fichier $filename en lecture";
  58. while (my $line = <$fh>)
  59. {
  60. return $line;
  61. }
  62. close $fh;
  63. }
  64. sub adh_abo_ffdn {
  65. my $filename = "/home/daga/bot-irc/". $wrk_dir."/ffdn.adh";
  66. my $fh;
  67. open ($fh, '<', $filename) or die "Impossible d'ouvrir le fichier $filename en lecture";
  68. while (my $line = <$fh>)
  69. {
  70. return $line;
  71. }
  72. close $fh;
  73. }
  74. ## Le bot lit le chan et réagit
  75. sub said {
  76. my ($self, $message) = @_;
  77. # si on veut des info
  78. if ($message->{body} =~ /^\+info/) {
  79. shift @_;
  80. # Apinnet
  81. if($message->{body} =~ /(ap[in]|Poitou|Charente|Rochelle|(Deux[- ])?S[èe]vres?|Vienne|Angoul[eêè]me|Niort|Poitiers)/) {
  82. return "site : http://www.apinnet.fr/ salon : irc://irc.geeknode.org/#Apinnet dans le Poitou-Charentes";
  83. }
  84. elsif($message->{body} =~ /\btest/) {
  85. info ("ilico");
  86. }
  87. # Aquilenet
  88. elsif($message->{body} =~ /\b(aq(ui|n)|Bord(o|e?au)|Landes|Gironde)/i) {
  89. info ("aquilenet");
  90. }
  91. # ARN
  92. elsif($message->{body} =~ /\b(a(lsace|rn)|Stras|Colma)/i) {
  93. info("arn");
  94. }
  95. # Auvernet
  96. elsif($message->{body} =~ /\b(Auver|Puy[- ](de[- ])D[oô]me|avn)/i) {
  97. info ("auvernet");
  98. }
  99. # Cafai
  100. elsif($message->{body} =~ /\b(cafai|champagne|ardenn?e)/i) {
  101. info("cafai");
  102. }
  103. # faimaison
  104. elsif($message->{body} =~ /\b(fma|fail?m|Nantes|Loire[- ]Atlantique)/i) {
  105. info ("faimaison");
  106. }
  107. # FDN
  108. elsif($message->{body} =~ /\bf(rench|dn)/i) {
  109. return"French Data Network, site : http://www.fdn.fr/ salon : irc://irc.geeknode.org/#fdn. Partout en France Métropolitaine" ;
  110. }
  111. # franciliens.net
  112. elsif($message->{body} =~ /\b(f(ranc|cn)|idf|Paris)/i) {
  113. info ("franciliens");
  114. }
  115. # grifon
  116. elsif($message->{body} =~ /\b(grif|rennes|[îi]l?le[- ](et[- ])?vilaine)/i) {
  117. info("grifon");
  118. }
  119. # ilico
  120. elsif($message->{body} =~ /\b(ilc|ill?[iy][ck])|(Corr?[éêèe][sz])/i) {
  121. info("ilico");
  122. }
  123. # illyse
  124. elsif($message->{body} =~ /\b(ill?y|ill?i[sz]|lyon|rh[ôo]ne|loire|((st|saint)[- ]etienn?e))/i) {
  125. info ("illyse");
  126. }
  127. # iloth
  128. elsif($message->{body} =~ /\b(ilo|mont?pel|h[ée]rault)/i) {
  129. info("iloth");
  130. }
  131. # ldn
  132. elsif($message->{body} =~ /\b(l(or|dn)|Nancy|Metz|Moselle|Meuse|Meurthe|Vosges)/i) {
  133. info("ldn");
  134. }
  135. # ndn
  136. elsif($message->{body} =~ /\b(n(ice|dn)|Antibes|Cannes|Valbonne|Alpes[- ]Maritimes)/i) {
  137. info("ldn");
  138. }
  139. # netopi
  140. elsif($message->{body} =~ /\b(netopi|Seine[- ](et[- ])?Marne)/i) {
  141. return "Netopi = site : http://netopi.fr ; pas de salon ; en Seine et Marne";
  142. }
  143. # pclight
  144. elsif($message->{body} =~ /\b(yonne|beon|cheny|pc[- ]?l)/i) {
  145. info("pclight");
  146. }
  147. # rézine
  148. elsif($message->{body} =~ /\b(r[eé]z|Isère|Grenoble)/i) {
  149. info("rezine");
  150. }
  151. # rhizome
  152. elsif($message->{body} =~ /\b(rh?[iy][sz]om|Oise|Compi[eéêè]gne)/i) {
  153. info("rhizome");
  154. }
  155. # sames
  156. elsif($message->{body} =~ /\bsam|(Pyrénées[- ]Atlantiques)/i) {
  157. info("sames");
  158. }
  159. # sdn
  160. elsif($message->{body} =~ /\b(s(all|dn)|Savoie|Haute[- ]Savoie)/i) {
  161. return"Sallanches Data Network = siteweb : http://sdnet.info/ ; pas de salon ; à Sallanches (73)";
  162. }
  163. # teleragno
  164. elsif($message->{body} =~ /\b(mars|telerag|telegrano)/i) {
  165. info ("teleragno");
  166. }
  167. # tetaneutral
  168. elsif($message->{body} =~ /\b(t(eta|tn|nn)|Toulouse|Comminges|(Haute[- ]Garon?ne))/i) {
  169. info ("tetaneutral");
  170. }
  171. # ail-network
  172. elsif($message->{body} =~ /\bail/i) {
  173. return "Aïl-network = siteweb : http://ail-network.org/ ; pas de salon ; Tarn Sud-Est (Pays d'Autan)";
  174. }
  175. # chaul'hertz
  176. elsif($message->{body} =~ /\b(c(haul|hz)|hertz|tarn|autan)/i) {
  177. return "Chaul'Hertz = pas de site ni de salon ; Chauley, hameau à St Maurice en Rivière (71)";
  178. }
  179. # igwan
  180. elsif($message->{body} =~ /\b(ig[wn]|sbg|saint[- ]barth)/i) {
  181. info ("igwan");
  182. }
  183. # neutrinet
  184. elsif($message->{body} =~ /\b(neutri|n[tre]n|belgique)/i) {
  185. info("neutrinet");
  186. }
  187. elsif($message->{body} =~ /\bf(ede|fdn|rance|édé)/i) {
  188. return "La fédération FDN regroupe des Fournisseurs d'Accès à Internet associatifs se reconnaissant dans des valeurs communes : bénévolat, solidarité, fonctionnement démocratique et à but non lucratif; défense et promotion de la neutralité du Net.";
  189. }
  190. # Si le FAI n'est pas valide, on l'indique
  191. else {
  192. return "commande : +info <fai> ou +info <lieu geographique>";
  193. }
  194. }
  195. # si on veut le nombre d'adhérent
  196. elsif ($message->{body} =~ /^\+adh/) {
  197. shift @_;
  198. # Apinnet
  199. if($message->{body} =~ /\b(ap[in]|Poitou|Charente|Rochelle|(Deux[- ])?S[èe]vres?|Vienne|Angoul[eêè]me|Niort|Poitiers)/i) {
  200. return "Aucune info pour apinnet";
  201. }
  202. # Aquilenet
  203. elsif($message->{body} =~ /\b(aq(ui|n)|Bord(o|e?au)|Landes|Gironde)/i) {
  204. adh ("aquilenet");
  205. }
  206. # ARN
  207. elsif($message->{body} =~ /\b(a(lsace|rn)|Stras|Colma)/i) {
  208. adh("arn");
  209. }
  210. # Auvernet
  211. elsif($message->{body} =~ /\b(Auver|Puy[- ](de[- ])D[oô]me|avn)/i) {
  212. adh ("auvernet");
  213. }
  214. # Cafai
  215. elsif($message->{body} =~ /\b(cafai|champagne|ardenn?e)/i) {
  216. adh("cafai");
  217. }
  218. # faimaison
  219. elsif($message->{body} =~ /\b(fma|fail?m|Nantes|Loire[- ]Atlantique)/i) {
  220. adh ("faimaison");
  221. }
  222. # FDN
  223. elsif($message->{body} =~ /\bf(rench|dn|rance)/) {
  224. return "Aucune info pour FDN";
  225. }
  226. # franciliens.net
  227. elsif($message->{body} =~ /\b(f(ranc|cn)|idf|Paris)/i) {
  228. adh ("franciliens");
  229. }
  230. # grifon
  231. elsif($message->{body} =~ /\b(grif|rennes|[îi]l?le[- ](et[- ])?vilaine)/i) {
  232. adh("grifon");
  233. }
  234. # ilico
  235. elsif($message->{body} =~ /\b(ilc|ill?[iy][ck])|(Corr?[éêèe][sz])/i) {
  236. adh("ilico");
  237. }
  238. # illyse
  239. elsif($message->{body} =~ /\b(ill?y|ill?i[sz]|lyon|rh[ôo]ne|loire|((st|saint)[- ]etienn?e))/i) {
  240. adh ("illyse");
  241. }
  242. # iloth
  243. elsif($message->{body} =~ /\b(ilo|mont?pel|h[ée]rault)/i) {
  244. adh("iloth");
  245. }
  246. # ldn
  247. elsif($message->{body} =~ /\b(l(or|dn)|Nancy|Metz|Moselle|Meuse|Meurthe|Vosges)/i) {
  248. adh("ldn");
  249. }
  250. # ndn
  251. elsif($message->{body} =~ /\b(n(ice|dn)|Antibes|Cannes|Valbonne|Alpes[- ]Maritimes)/i) {
  252. adh("ldn");
  253. }
  254. # netopi
  255. elsif($message->{body} =~ /\b(netopi|Seine[- ](et[- ])?Marne)/i) {
  256. return "Netopi = site : http://netopi.fr ; pas de salon ; en Seine et Marne";
  257. }
  258. # pclight
  259. elsif($message->{body} =~ /\b(yonne|beon|cheny|pc[- ]?l)/i) {
  260. adh("pclight");
  261. }
  262. # rézine
  263. elsif($message->{body} =~ /\b(r[eé]z|Isère|Grenoble)/i) {
  264. adh("rezine");
  265. }
  266. # rhizome
  267. elsif($message->{body} =~ /\b(rh?[iy][sz]om|Oise|Compi[eéêè]gne)/i) {
  268. adh("rhizome");
  269. }
  270. # sames
  271. elsif($message->{body} =~ /\bsam|(Pyrénées[- ]Atlantiques)/i) {
  272. adh("sames");
  273. }
  274. # sdn
  275. elsif($message->{body} =~ /\b(s(all|dn)|Savoie|Haute[- ]Savoie)/i) {
  276. return "aucune info pour SDN";
  277. }
  278. # teleragno
  279. elsif($message->{body} =~ /\b(mars|telerag|telegrano)/i) {
  280. adh ("teleragno");
  281. }
  282. # tetaneutral
  283. elsif($message->{body} =~ /\b(t(eta|tn|nn)|Toulouse|Comminges|(Haute[- ]Garon?ne))/i) {
  284. adh ("tetaneutral");
  285. }
  286. # ail-network
  287. elsif($message->{body} =~ /\bail/i) {
  288. return "aucune info pour Aïl-network";
  289. }
  290. # chaul'hertz
  291. elsif($message->{body} =~ /\b(c(haul|hz)|hertz|tarn|autan)/i) {
  292. return "aucune info pour Chaul-Hertz";
  293. }
  294. # igwan
  295. elsif($message->{body} =~ /\b(ig[wn]|sbg|saint[- ]barth)/i) {
  296. adh ("igwan");
  297. }
  298. # neutrinet
  299. elsif($message->{body} =~ /\b(neutri|n[tre]n|belgique)/i) {
  300. adh("neutrinet");
  301. }
  302. elsif($message->{body} =~ m{\bf(ede|fdn|rance|édé)}i) {
  303. adh_abo_ffdn;
  304. }
  305. # Si le FAI n'est pas valide, on l'indique
  306. else {
  307. return "commande : +adh <fai> ou +adh <lieu geographique>";
  308. }
  309. }
  310. # si on veut de l'aide
  311. elsif ($message->{body} =~ /^\+help/) {
  312. 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";
  313. }
  314. # les sources du bot
  315. elsif ($message->{body} =~ /^\+source/) {
  316. return "Pour l'instant, sur demande";
  317. }
  318. # les infos par rapport aux réunions de suivies
  319. elsif ($message->{body} =~ /^\+suivi/) {
  320. suivi;
  321. }
  322. # les infos par rapport aux réunions de suivies
  323. elsif ($message->{body} =~ /^\+vote/) {
  324. vote;
  325. }
  326. elsif ($message->{body} =~ /datafoin/) {
  327. return "il ne faut pas me donner à manger après minuit /o\\";
  328. }
  329. }
  330. # tout ce qu'on écrit dans /tmp/log apparait dans $channel
  331. my $channel = '#bottestbot';
  332. sub connected {
  333. # my $channel = shift;
  334. my $self = shift;
  335. $self->forkit({ channel => $channel,
  336. run => [ qw( /usr/bin/tail -f /tmp/log ) ],
  337. });
  338. }
  339. # aucune idée de comment on déclenche cette ligne
  340. sub help { "Je suis le bot de la fédé." }
  341. #Info de connexion du bot
  342. MyBot->new(
  343. server => 'irc.geeknode.org',
  344. channels => [ '#bottestbot', '#ffdn'],
  345. nick => 'UneFede',
  346. username => 'bot',
  347. name => 'Droide de la Federation FDN, run by Vigdis'
  348. )->run();