All pastes #133790 Raw Edit

Basic PHP IRC Bot

public php v1 · immutable
#133790 ·published 2006-08-16 03:03 UTC
rendered paste body
<?php/* CONFIG */set_time_limit(0);$config = array();$config['init'] = 1;$config['server'] = 'irc.netgamers.org';$config['port'] = '6667';$config['usernick'] = 'Tommeh';$config['altnick'] = 'Tommmeh';$config['username'] = 'Tommeh';$config['channels'] =	array(		'#melons',	);/* INITIATE CONNECTION */print('Connecting to ' . $config['server'] . ' on port ' . $config['port'] . "\n");$connection = array();$connection['buffer'] = array();$connection['settings'] = array();$connection['channels'] = array();$connection['socket'] = fsockopen($config['server'],$config['port']);if ($connection['socket']) {	raw('USER ' . $config['usernick'] . ' localhost localhost :' . $config['username']);	raw('NICK ' . $config['usernick'] . ' localhost');	$connection['settings']['nick'] = $config['usernick'];}else {	die('Unable to connect.');}/* CONNECTION LOOP */while (!feof($connection['socket'])) {	$connection['buffer']['all'] = trim(fgets($connection['socket'],4096));	if ($connection['buffer']['all'] != $oldbuffer) {		if (substr($connection['buffer']['all'],0,6) == 'PING :') {			raw('PONG :' . substr($connection['buffer']['all'],6));			if ($config['init'] == 1) {				$config['init'] = 0;				init();			}		}		else {			parsebuffer();			checkbuffer();		}	}	$oldbuffer = $connection['buffer']['all'];}?><?php/* ENGINE FUNCTIONS */function init() {	global $connection, $config;	foreach ($config['channels'] as $channel) {		raw('JOIN ' . $channel);	}}function raw($what) {	global $connection, $config;	print date("[d/m - H:i:s]") . " -> " . $what . "\n";	fputs($connection['socket'],$what . "\r\n");}function parsebuffer() {	global $connection, $config;	print date("[d/m - H:i:s]") . " <- " . $connection['buffer']['all'] . "\n";	$buffer = explode(' ',$connection['buffer']['all'],4);	foreach ($buffer as $i => $j) {		if (substr($j,0,1) == ":") {			buffer[$i] = substr($j,1);		}	}	$posex = strpos($buffer[0],'!');	$posat = strpos($buffer[0],'@');	$connection['buffer']['usernick'] = substr($buffer[0],1,$posex-1);	$connection['buffer']['identd'] = substr($buffer[0],$posex+1,$posat-$posex-1);	$connection['buffer']['hostname'] = substr($buffer[0],$posat+1);		$connection['buffer']['command'] = $buffer[1];	$connection['buffer']['target'] = $buffer[2];	$connection['buffer']['arguments'] = $buffer[3];}function checkbuffer() {	global $connection, $config;	switch($connection['buffer']['command']) {		/* ### Nick in use ###		If first nick in use, re-send NICK command with alternate nick and change settings to match */		case '433':			raw('NICK ' . $config['altnick']);			$connection['settings']['nick'] = $config['altnick'];			break;		/* ### JOIN ###		On JOIN, check for self: if so, create arrays for channel; if someone else, add them to the channel userlist */		case 'JOIN':			$channel = $connection['buffer']['target'];			$nick = $connection['buffer']['usernick'];			if ($nick == $connection['settings']['nick']) {				$connection['channels'][$channel] = array();				$connection['channels'][$channel]['topic'] = array();				$connection['channels'][$channel]['modes'] = array();				$connection['channels'][$channel]['names'] = 0;			}			else {				$connection['channels'][$channel]['users'][$nick] = "0";			}			break;		/* ### /NAMES list ###		When given /NAMES list, mark channel as compiling list and clear if first list, add nicks to channel, add umodes to users */		case '353':			$list = substr($connection['buffer']['arguments'],strpos($connection['buffer']['arguments'],"#"));			$channel = substr($list,0,strpos($list," ") - 1);			if ($connection['channels'][$channel]['names'] = 0) {				$connection['channels'][$channel]['users'] = array();				$connection['channels'][$channel]['names'] = 1;			}			$nicks = substr($list,strpos($list,":"));			$nicks = explode(" ",$nicks);			foreach ($nicks as $nick) {				$umode = "0";				if (preg_match('/^[\!\~\&\@\%\+].*$/',$nick)) {					$umode = substr($nick,0,1);					$nick = substr($nick,1);				}				$connection['channels'][$channel]['users'][$nick] = $umode;			}			break;		/* ### End of /NAMES list ###		Mark channel as not compiling list */		case '356':			$channel = $connection['buffer']['target'];			$connection['channels'][$channel]['names'] = 0;						break;	}}?>