All pastes #700249 Raw Edit

Addar PHP IRC bot - core

public php v1 · immutable
#700249 ·published 2007-09-17 02:14 UTC
rendered paste body
<?php///////////////////////////////////////////////////////// Addar PHP IRC Bot Copyright 2007 Addy Studios DEV //////////////// Requires PHP 4.3+ to run. /////////////////////////////////////////////////////////////////////$stime = time();require('conf.php');error_reporting('E_ALL');	  	function parseirc($string){  $str = explode(' ',$string);  $ret['command']=$str[1];  $ret['target']=$str[2];  $str2 = explode('!',substr($str[0],1));  $ret['nick']=$str2[0];  $str3 = explode('@',$str2[1]);  $ret['user']=substr($str3[0],0);  $ret['host']=$str3[1];  $str4 = explode(':',substr($string,1));  $ret['msg']=$str4[1];  if(isset($str4[2])){ $ret['msg'] = $ret['msg'].':'.$str4[2];}  if(isset($str4[3])){ $ret['msg'] = $ret['msg'].':'.$str4[3];}  if(isset($str4[4])){ $ret['msg'] = $ret['msg'].':'.$str4[4];}  return $ret;}function akick($host,$channel){  $akick = unserialize(file_get_contents('akick.dat'));  $akick[$channel][$host]=true;  file_put_contents('akick.dat',serialize($akick));  cmd_send('PRIVMSG '.$channel.' :Auto-Kick list for '.$channel.' successfully modified.');}function dekick($host,$channel){  $akick = unserialize(file_get_contents('akick.dat'));  $akick[$channel][$host]=false;  file_put_contents('akick.dat',serialize($akick));  cmd_send('PRIVMSG '.$channel.' :Auto-Kick list for '.$channel.' successfully modified.');}function getStrsBetween($s,$s1,$s2=false,$offset=0) {  if( $s2 === false ) { $s2 = $s1; }    $result = array();    $L1 = strlen($s1);    $L2 = strlen($s2);    if( $L1==0 || $L2==0 ) {      return false;    }    do {      $pos1 = strpos($s,$s1,$offset);      if( $pos1 !== false ) {        $pos1 += $L1;        $pos2 = strpos($s,$s2,$pos1);        if( $pos2 !== false ) {          $key_len = $pos2 - $pos1;          $this_key = substr($s,$pos1,$key_len);          if( !array_key_exists($this_key,$result) ) {            $result[$this_key] = array();          }          $result[$this_key][] = $pos1;          $offset = $pos2 + $L2;        } else {          $pos1 = false;        }        }  } while($pos1 !== false );  return $result;}set_time_limit(0);$con = array();init();function init(){ 	global $con, $CONFIG; 	$firstTime = true; 	$con['socket'] = fsockopen($CONFIG['server'], $CONFIG['port']); 	if (!$con['socket']) {  		print ("Could not connect to: ". $CONFIG['server'] ." on port ". $CONFIG['port']."\n"); 	} else {  		cmd_send("USER ". $CONFIG['nick'] ." storage.us.to storage.us.to :". $CONFIG['name']);		  cmd_send("NICK ". $CONFIG['nick'] ." storage.us.to");		  while (!feof($con['socket'])){			   $con['buffer']['all'] = trim(fgets($con['socket'], 4096));      $lulz = parseirc($con['buffer']['all']);      if($parsed['command'] != '372'){        $dat = date("[d/m @ H:i]")."<- ".$con['buffer']['all'] ."\r\n";			     print $dat;	       if($CONFIG['log'] == true){	         $fh = fopen('data.log','a');	         fwrite($fh,$dat);  	       fclose($fh);	         unset($fh);						     }			 }			 if(substr($con['buffer']['all'], 0, 6) == 'PING :') {				  cmd_send('PONG :'.substr($con['buffer']['all'], 6));			 } elseif ($old_buffer != $con['buffer']['all']) {				  if ($firstTime == true){				    sleep(20);					   cmd_send('PRIVMSG nickserv :identify '.$CONFIG['admin_pass']);				    echo"\n\nAttempting to join the channel.\n\n";					   cmd_send("JOIN ". $CONFIG['channel']);					   $firstTime = false;				  }						   $parsed = parseirc($con['buffer']['all']);			   $msg = $parsed['msg'];			   if($parsed['command'] == 'JOIN'){			   $greets = unserialize(file_get_contents('greets.dat'));			   if(isset($greets[$parsed['nick']])){			   cmd_send('PRIVMSG '.$parsed['msg'].' :'.$greets[$parsed['nick']]);			 }			 $kicks = unserialize(file_get_contents('akick.dat'));			 if(trim($kicks[$msg][$parsed['host']]) == true){			 cmd_send('MODE '.substr($parsed['target'],1).' +b *!*@'.$parsed['host']);			 cmd_send('KICK '.substr($parsed['target'],1).' '.$parsed['nick'].' You are on the Auto-Kick list for '.substr($parsed['target'],1).' and are not allowed to be on this channel.');			 }			 }			 if($parsed['command'] == 'PRIVMSG' && $parsed['msg'] == 'VERSION'){			   $tsend = "NOTICE ".$parsed['user']." :".chr(1)."VERSION Addar PHP IRC bot ".$CONFIG['version']." by Addy Studios DEV".chr(1)."\n";			   cmd_send($tsend); 			  			 }			 if($parsed['nick'] == $CONFIG['owner']){			   $access = 6;}			 if($parsed['command'] == 'PRIVMSG' && substr($parsed['msg'],0,1) =='@'){			   $cpar = explode(' ',$parsed['msg']);//&& $parsed['target'] == $CONFIG['channel']			   $len = count($cpar);			   $cou = 2;			   while($cou <= $len){			     $reason = $reason.' '.$cpar[$cou];			     $cou++;			   }			   if($cpar[0] == '@reload' && $access >= 1){			     include('conf.php');			     cmd_send('PRIVMSG '.$parsed['target'].' :Core reloading is disabled, and was not done.');			     cmd_send('PRIVMSG '.$parsed['target'].' :Reloaded Configuration.');			  			   }////////////////////////CORE////////////////////////         if($cpar[0] == '@up'){         $uptime = time() - $stime;         $uptime =number_format($uptime / 60,1);         cmd_send('PRIVMSG '.$parsed['target'].' :Addar has been up for '.$uptime.' minutes.');	         }         if($cpar[0] == '@access' && $access >= 5){           $levs = unserialize(file_get_contents('access.dat'));           $levs[$cpar[1]] = $cpar[2];           file_put_contents('access.dat',serialize($levs));           cmd_send('PRIVMSG '.$parsed['target'].' :Access level for user '.$cpar[1].' now set to '.$cpar[2].'/6.');	         }         if($cpar[0] == '@acc' && $access >= 5){           $levs = unserialize(file_get_contents('access.dat'));           if(isset($levs[$cpar[1]])){             cmd_send('PRIVMSG '.$parsed['target'].' :Access level for user '.$cpar[1].' set to '.$levs[$cpar[1]].'/6.');           }else{             cmd_send('PRIVMSG '.$parsed['target'].' :User '.$cpar[1].' does not have an access level.');           }	         }         if($cpar[0] == '@acc-all' && $access >= 5){           $levs = unserialize(file_get_contents('access.dat'));           foreach($levs as $key => $val){           $accesses = $accesses.chr(2).$key.chr(2).'['.$val.'/6] ';           }           cmd_send('PRIVMSG '.$parsed['target'].' :'.$accesses);	         }                  			   if($cpar[0] == '@raw' && $access >= 4){			     cmd_send(trim(substr($parsed['msg'],4)).$str4[2]);			   }			   if($cpar[0] == '@k' && $access >= 2){			     cmd_send('KICK '.$parsed['target'].' '.$cpar[1].' '.trim($reason)); 			   }			   if($cpar[0] == '@kb' && $access >= 2){			     cmd_send('MODE '.$parsed['target'].' +b '.$cpar[1]);			     cmd_send('KICK '.$parsed['target'].' '.$cpar[1].' '.trim($reason)); 			   }			   if($cpar[0] == '@gtfo' && $access >= 6){			     cmd_send('QUIT GTFO Command used by '.$CONFIG['owner']); 			   }			  			  			   if($parsed['command'] == 'PRIVMSG' && $parsed['msg'] == 'CLIENTINFO'){			     $tsend = "NOTICE ".$parsed['user']." :".chr(1)."CLIENTINFO CLIENTINFO HOST OS USERINFO TIME VERSION".chr(1)."\n";			     cmd_send($tsend); 			  			   }			   if($parsed['command'] == 'PRIVMSG' && $parsed['msg'] == 'HOST'){			     $tsend = "NOTICE ".$parsed['user']." :".chr(1)."HOST Addar ".$CONFIG['version']." is hosted at http://storage.us.to "."\n";			     cmd_send($tsend); 			  			   }			   if($parsed['command'] == 'PRIVMSG' && $parsed['msg'] == 'OS'){			     $tsend = "NOTICE ".$parsed['user']." :".chr(1)."OS Addar ".$CONFIG['version']." is run on Windows XP Home Edition SP2".chr(1)."\n";			     cmd_send($tsend); 			  			   }			   if($parsed['command'] == 'PRIVMSG' && $parsed['msg'] == 'USERINFO'){			     $tsend = "NOTICE ".$parsed['user']." :".chr(1)."USERINFO I am a PHP bot. To find out more about me, try CLIENTINFO.".chr(1)."\n";			     cmd_send($tsend);			  	  			   }			   if($parsed['command'] == 'PRIVMSG' && $parsed['msg'] == 'TIME'){			     $tsend = "NOTICE ".$parsed['user']." :".chr(1)."TIME ".date('r').chr(1)."\n";			     cmd_send($tsend); 			  			   }			   if($parsed['command'] == 'PRIVMSG' && $parsed['msg'] == 'SOURCE'){			     $tsend = "NOTICE ".$parsed['user']." :".chr(1)."SOURCE Addar's source will be released when Addar is done Alpha testing.".chr(1)."\n";			     cmd_send($tsend); 			  			   }			  			  /*			   if($cpar[0] == '@loadsettings'){        require('conf.php');			     cmd_send('PRIVMSG '.$parsed['target'].' :Reloaded Configuration.');			   			   }			  */			  				   if($cpar[0] == '@join' && $access >= 1){			     cmd_send('PRIVMSG '.$parsed['target'].' :Joining '.$cpar[1].'.');			  			     cmd_send('JOIN '.$cpar[1]);			   }			   if($cpar[0] == '@op' && $access >= 4){			     cmd_send('PRIVMSG CHANSERV AOP '.$parsed['target'].' ADD '.$cpar[1]);			     cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Added to AOP list.'); 			   }						   if($cpar[0] == '@deop' && $access >= 4){			     cmd_send('PRIVMSG CHANSERV AOP '.$parsed['target'].' DEL '.$cpar[1]);			     cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Deleted from AOP list.'); 			   }			 			  if($cpar[0] == '@qop' && $access >= 5){	  		   cmd_send('PRIVMSG CHANSERV QOP '.$parsed['target'].' ADD '.$cpar[1]);		   	  cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Added to QOP list.'); 			   }						   if($cpar[0] == '@deqop' && $access >= 5){			     cmd_send('PRIVMSG CHANSERV QOP '.$parsed['target'].' DEL '.$cpar[1]);			     cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Deleted from QOP list.'); 			   }			   if($cpar[0] == '@sop' && $access >= 4){			     cmd_send('PRIVMSG CHANSERV SOP '.$parsed['target'].' ADD '.$cpar[1]);			     cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Added to SOP list.'); 			   }						   if($cpar[0] == '@desop' && $access >= 4){			     cmd_send('PRIVMSG CHANSERV SOP '.$parsed['target'].' DEL '.$cpar[1]);			     cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Deleted from SOP list.');  			   }			   if($cpar[0] == '@hop' && $access >= 4){			     cmd_send('PRIVMSG CHANSERV HOP '.$parsed['target'].' ADD '.$cpar[1]);			     cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Added to HOP list.'); 			   }						   if($cpar[0] == '@dehop' && $access >= 4){			     cmd_send('PRIVMSG CHANSERV HOP '.$parsed['target'].' DEL '.$cpar[1]);			     cmd_send('PRIVMSG '.$parsed['target'].' :'.$cpar[1].' Deleted from HOP list.');  			   }					   if($cpar[0] == '@giveshinkorutotalcontrol/etc' ){			     cmd_send('PRIVMSG '.$parsed['target'].' :Pfft, dream on.');  			   }			   if($cpar[0] == '@mode' && $access >= 3){			     cmd_send('MODE '.$parsed['target'].' '.trim(substr($parsed['msg'],5)));			   }			   if($cpar[0] == '@info'){			     cmd_send('PRIVMSG '.$parsed['target'].' :I am an IRC (Internet Relay Chat) bot developed by Adam Oakley (Addy Studios DEV)'); 		   } 		   if($cpar[0] == '@greet'){ 		     $greets = unserialize(file_get_contents('greets.dat')); 		     $greets[$parsed['nick']] = chr(2).'['.$parsed['nick'].']'.chr(2).' '.trim(substr($msg,6)); 		     file_put_contents('greets.dat',serialize($greets)); 		     cmd_send('PRIVMSG '.$parsed['target'].' :Greet modified.'); 		   } 		   if($cpar[0] == '@akick' && $access >= 3){ 		     akick(trim(substr($parsed['msg'],6)),$parsed['target']); 		   } 		   if($cpar[0] == '@dekick' && $access >= 3){ 		     dekick(trim(substr($parsed['msg'],6)),$parsed['target']); 		   } 		   if($cpar[0] == '@clearlog' && $access >= 5){ 		     file_put_contents('data.log',''); 		     cmd_send('PRIVMSG '.$parsed['target'].' :Log file cleared.'); 		   		   } 		   if($cpar[0] == '@rejoin'){ 		     cmd_send('PART '.$parsed['target']); 		     sleep(1); 		     cmd_send('JOIN '.$parsed['target']); 		   		   } 		   if($cpar[0] == '@bash'){ 		     $bash = file_get_contents('http://www.bash.org/?random1');        $lul = getStrsBetween($bash,'<p class="qt">','</p>');        $lol = true;        foreach($lul as $key => $val){          if($lol){            $quote = html_entity_decode($key);            $lol = false;          }        }        $quote2 = explode('<br />',$quote);        foreach($quote2 as $key => $val){          $val = trim(str_replace('\n','',$val));          cmd_send('PRIVMSG '.$parsed['target'].' :'.$val);        } 		   } 		   if($cpar[0] == '@add'){ 		     $quotes = unserialize(file_get_contents('quotes.dat')); 		     if(!isset($quotes[$cpar[1]])){ 		       $len = strlen($cpar[1])+5; 		       $quotes[strtolower($cpar[1])] =chr(2).'['.$cpar[1].']'.chr(2).' '.trim(substr($msg,$len)); 		       file_put_contents('quotes.dat',serialize($quotes)); 		       cmd_send('PRIVMSG '.$parsed['target'].' :Quote added.'); 		     }else{ 		     cmd_send('PRIVMSG '.$parsed['target'].' :That quote already exists.'); 		     } 		   } 		   if($cpar[0] == '@del' && $access >= 3){ 		     $quotes = unserialize(file_get_contents('quotes.dat')); 		     if(isset($quotes[strtolower($cpar[1])])){ 		       unset($quotes[strtolower($cpar[1])]); 		       file_put_contents('quotes.dat',serialize($quotes)); 		       cmd_send('PRIVMSG '.$parsed['target'].' :Quote deleted.'); 		     } 		   } 		   if($cpar[0] == '@all'){ 		     $quotes = unserialize(file_get_contents('quotes.dat'));        foreach($quotes as $key => $val){          $all = $all.' '.chr(2).'['.$key.']'.chr(2);        } 		     cmd_send('PRIVMSG '.$parsed['target'].' :'.$all); 		   } 		   		   if($cpar[0] == '@q'){ 		     $quotes = unserialize(file_get_contents('quotes.dat')); 		     if(isset($quotes[strtolower($cpar[1])])){ 		       cmd_send('PRIVMSG '.$parsed['target'].' :'.$quotes[strtolower($cpar[1])]); 		     } 		   } 		  			   if($cpar[0] == '@google'){			     $query = trim(substr($parsed['msg'],8));	       $failure      = "Unable to retrieve information.";	       $no_results   = "No results found.";	       $results      = chr(2)."%{title}".chr(2).": %{link}";	       $calc_results = " %{calculation}";	          	$url = "http://www.google.com/search?num=1&q=%s";    	   $url = sprintf($url, urlencode($query));	       	$contents = file_get_contents($url);	    	   if (!$contents) {  	       cmd_send("PRIVMSG ".$parsed['target']." :".$failure);  	       return false;	       }	       	$p_calc = '~<h2 class=r><font size=\+1><b>([^<]+)</b>~';       	$p_link = '~<a href="([^"]+)" class=l>([^<]+)</a>~';	       	if (preg_match($p_calc, $contents, $match) > 0) {			        $calculation = $match[1];		        $out = $calc_results;	   	    } else {	        		$contents = preg_replace('~<[/]?b>~', '', html_entity_decode($contents));		         if (preg_match($p_link, $contents, $match) == 0) {			         cmd_send("PRIVMSG ".$parsed['target']." :".$no_results);			         return false;		        }	        		$link = $match[1];		        $title = $match[2];			        $out = $results;	      }	   	 $p = '/%{([^}]+)}/';	    preg_match_all($p, $out, $matches);	    for ($i = 0; $i < count($matches[0]); $i++) {	      $marker = $matches[0][$i];	      $var    = $matches[1][$i];	      $out    = str_replace($marker, $$var, $out);	    }   	 cmd_send("PRIVMSG ".$parsed['target']." :".$out);			  }			  if($cpar[0] == '@' && $access && $parsed['target'] == strtolower($CONFIG['nick']) ){       $len = strlen($cpar[1])+3;			    cmd_send('PRIVMSG '.$cpar[1].' :'.trim(substr($parsed['msg'],$len)));			  }			  ////////////////////////////////////////////////////			  /*ACTION FINGER SOURCE PING*/			  			  unset($all);       unset($access);     unset($cpar);			  unset($reason);				}			$old_buffer = $con['buffer']['all'];		}	}}}function cmd_send($command){ 	global $con, $time, $CONFIG; 	fputs($con['socket'], $command."\n\r"); 	$dat = date("[d/m @ H:i]") ."-> ". $command. "\r\n"; 	print ($dat); 	if($CONFIG['log'] == true){	   $fh = fopen('data.log','a');	   fwrite($fh,$dat);	   fclose($fh);	   unset($fh);	 }}	?>