PageRenderTime 50ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/irc/wd.bot.php

https://github.com/Dispositif/addbot
PHP | 169 lines | 135 code | 15 blank | 19 comment | 26 complexity | 3d47618c09c933fe939ece65f2854827 MD5 | raw file
  1. <?PHP
  2. /* -------------------------------- Bot Setup -------------------------------- */
  3. //IRC Settings
  4. $server_host = "irc.freenode.com";
  5. $server_port = 6667;
  6. $server_chan = "##addshore";
  7. $rc_host = "irc.wikimedia.org";
  8. $rc_port = 6667;
  9. $nickname = "Addbotg";
  10. $langs = Array('ab','ace','af','ak','als','am','an','ang','ar','arc','arz','as','ast','av','ay','az','ba','bar','bat-smg','bcl','be','be-x-old','bg','bh','bi','bjn','bm','bn','bo','bpy','br','bs','bug','bxr','ca','cbk-zam','cdo','ce','ceb','ch','chr','chy','ckb','co','cr','crh','cs','csb','cu','cv','cy','da','de','diq','dsb','dv','dz','ee','el','eml','en','eo','es','et','eu','ext','fa','ff','fi','fiu-vro','fj','fo','fr','frp','frr','fur','fy','ga','gag','gan','gd','gl','glk','gn','got','gu','gv','ha','hak','haw','he','hi','hif','hr','hsb','ht','hu','hy','ia','id','ie','ig','ik','ilo','io','is','it','iu','ja','jbo','jv','ka','kaa','kab','kbd','kg','ki','kk','kl','km','kn','ko','koi','krc','ks','ksh','ku','kv','kw','ky','la','lad','lb','lbe','lez','lg','li','lij','lmo','ln','lo','lt','ltg','lv','map-bms','mdf','mg','mhr','mi','min','mk','ml','mn','mr','mrj','ms','mt','mwl','my','myv','mzn','na','nah','nap','nds','nds-nl','ne','new','nl','nn','no','nov','nrm','nso','nv','ny','oc','om','or','os','pa','pag','pam','pap','pcd','pdc','pfl','pi','pih','pl','pms','pnb','pnt','ps','pt','qu','rm','rmy','rn','ro','roa-rup','roa-tara','ru','rue','rw','sa','sah','sc','scn','sco','sd','se','sg','sh','si','simple','sk','sl','sm','sn','so','sq','sr','srn','ss','st','stq','su','sv','sw','szl','ta','te','tet','tg','th','ti','tk','tl','tn','to','tpi','tr','ts','tt','tum','tw','ty','udm','ug','uk','ur','ve','vec','vep','vi','vls','vo','wa','war','wo','wuu','xal','xh','xmf','yi','yo','za','zea','zh','zh-classical','zh-min-nan','zh-yue','zu');
  11. /* -------------------------------- Freenode Irc -------------------------------- */
  12. $freenode = array();
  13. $freenode['SOCKET'] = @fsockopen($server_host, $server_port, $errno, $errstr, 2);
  14. $pid['freenode'] = pcntl_fork();
  15. if ( $pid['freenode'] == 0 ) {
  16. set_time_limit(0);
  17. if($freenode['SOCKET'])
  18. {
  19. freenodeCommand("NICK $nickname"); //sends the nickname
  20. freenodeCommand("USER $nickname Addbot Wikipedia Bot");
  21. freenodeCommand("JOIN $server_chan");
  22. while(!feof($freenode['SOCKET'])) //while we are connected to the server
  23. {
  24. $freenode['READ_BUFFER'] = str_replace(array("\n","\r"),'',fgets($freenode['SOCKET'], 1024)); //get a line of data from the server
  25. if ( !eregi('(00(1|2|3|4|5)|2(5(0|1|2|4|5)|6(5|6))|3(53|66|7(2|6|5))) '.$nickname, $freenode['READ_BUFFER']))
  26. {
  27. echo "IRC>: ".$freenode['READ_BUFFER']."\n";
  28. }
  29. $d = explode(' ',$freenode['READ_BUFFER']);
  30. if (strtolower($d[0]) == 'ping') {
  31. freenodeCommand("PONG :".substr($freenode['READ_BUFFER'], 6)); //Reply with pong
  32. } elseif (strtolower($d[1]) == 'privmsg') {
  33. /*
  34. if (substr($d[3],0,2) == ':!') {
  35. if (strtolower($d[2]) == strtolower($user)) {
  36. $tmp = explode('!',substr($d[0],1));
  37. $cmd = 'NOTICE '.$tmp[0]; }
  38. else { $cmd = 'PRIVMSG '.$d[2]; }
  39. switch (substr(strtolower($d[3]),2)) {
  40. case 'help':
  41. freenodeCommand($cmd.' :Please ask Addshore');
  42. break;
  43. }
  44. }*/
  45. }
  46. flush();
  47. }
  48. }
  49. unset ($pid['freenode']);
  50. exit();
  51. }
  52. function MessageMe ($message) {
  53. global $server_chan;
  54. if ($go = true ){
  55. if(rand(1,2) == 1)
  56. {freenodeCommand("PRIVMSG $server_chan :$message");}
  57. else{floodCommand("PRIVMSG $server_chan :$message");}
  58. }
  59. }
  60. function freenodeCommand ($cmd) {
  61. global $freenode; //Extends our $server array to this function
  62. @fwrite($freenode['SOCKET'], $cmd."\r"); //sends the command to the server
  63. echo "IRC<: $cmd\n"; //displays it on the screen
  64. }
  65. function floodCommand ($cmd) {
  66. global $flood; //Extends our $server array to this function
  67. @fwrite($flood['SOCKET'], $cmd."\r"); //sends the command to the server
  68. echo "IRC<: $cmd\n"; //displays it on the screen
  69. }
  70. $flood = array();
  71. $flood['SOCKET'] = @fsockopen($server_host, $server_port, $errno, $errstr, 2);
  72. $pid['flood'] = pcntl_fork();
  73. if ( $pid['flood'] == 0 ) {
  74. set_time_limit(0);
  75. if($flood['SOCKET'])
  76. {
  77. floodCommand("NICK $nickname"."2"); //sends the nickname
  78. floodCommand("USER $nickname"."2 Addbot Wikipedia Bot");
  79. floodCommand("JOIN $server_chan");
  80. while(!feof($flood['SOCKET'])) //while we are connected to the server
  81. {
  82. $flood['READ_BUFFER'] = str_replace(array("\n","\r"),'',fgets($flood['SOCKET'], 1024)); //get a line of data from the server
  83. if ( !eregi('(00(1|2|3|4|5)|2(5(0|1|2|4|5)|6(5|6))|3(53|66|7(2|6|5))) '.$nickname, $flood['READ_BUFFER']))
  84. {
  85. echo "IRC>: ".$flood['READ_BUFFER']."\n";
  86. }
  87. $d = explode(' ',$flood['READ_BUFFER']);
  88. if (strtolower($d[0]) == 'ping') {
  89. floodCommand("PONG :".substr($flood['READ_BUFFER'], 6)); //Reply with pong
  90. }
  91. flush();
  92. }
  93. }
  94. unset ($pid['flood']);
  95. exit();
  96. }
  97. /* -------------------------------- Wikimedia RC IRC feed -------------------------------- */
  98. $wikimedia = array();
  99. $wikimedia['SOCKET'] = @fsockopen($rc_host, $rc_port, $errno, $errstr, 30);
  100. $pid['wikimedia'] = pcntl_fork();
  101. if ( $pid['wikimedia'] == 0 ) {
  102. set_time_limit(0);
  103. if($wikimedia['SOCKET'])
  104. {
  105. wikimediaCommand("NICK $nickname");
  106. wikimediaCommand("USER $nickname Addbot Wikipedia Bot");
  107. foreach ($langs as $l)
  108. {
  109. wikimediaCommand("JOIN #".$l.".wikipedia");
  110. sleep(0.3);
  111. }
  112. while(!feof($wikimedia['SOCKET']))//while connected to the server
  113. {
  114. $rawline = fgets($wikimedia['SOCKET'], 1024);
  115. $line = str_replace(array("\n","\r","\002"),'',$rawline);
  116. $line = preg_replace('/\003(\d\d?(,\d\d?)?)?/','',$line);
  117. echo 'FEED: '.$line."\n";
  118. if (!$line) { fclose($feed); break; }
  119. $linea= explode(' ',$line,4);
  120. if (strtolower($linea[0]) == 'ping') {
  121. wikimediaCommand("PONG :".substr($wikimedia['READ_BUFFER'], 6)); //Reply with pong
  122. } elseif ((strtolower($linea[1]) == 'privmsg')) {
  123. $message = substr($linea[3],1);
  124. echo $message."\n";
  125. if(preg_match('/Add(shore|bot|less)/i',$message))
  126. {
  127. Messageme($message);
  128. sleep(0.5);
  129. continue;
  130. }
  131. }
  132. flush();
  133. }
  134. }
  135. unset ($pid['wikimedia']);
  136. exit();
  137. }
  138. function wikimediaCommand ($cmd) {
  139. global $wikimedia; //Extends our $server array to this function
  140. @fwrite($wikimedia['SOCKET'], $cmd."\r"); //sends the command to the server
  141. echo "IRC<: $cmd\n"; //displays it on the screen
  142. }
  143. //Wait
  144. while ($pid['freenode'] && $pid['wikimedia']){
  145. sleep(1);
  146. }
  147. //Kill all the processes
  148. MessageMe("Ending");
  149. foreach ($pid as $pid) {
  150. posix_kill($pid);
  151. }
  152. exit();
  153. ?>