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); }} ?>