unefede.pl 11 KB

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