Scripts

Een PHP IRC Bot

Ik was een beetje aan het knutselen met deze irc bot, toen ik een topic las over een php irc bot, dus leek me een goed idee om deze dan maar is te posten. Dit script moet je via commandline aanroepen, dus NIET via je browser. In de bot zitten een aantal events, waarop je reacties kan toevoegen. Hij reageerd niet op alle events, maar als je dit script begrijpt, moet je hem ook wel op die events kunnen laten reageren.

een-php-irc-bot
- Voorbeeld scriptje
[code]
<?php
include("class.php");

$bot = new ZeroBot;

$bot->setServer("irc.chat4all.org");
$bot->setName("[B]Dae", "BOT");
$bot->setChannel("#test");
$bot->setAdmin("Dae");

// newOnText( String trigger, String Functie, Int required parameters [, Array parameter]);
$bot->newOnText('!say', 'msg', 1, Array("*chan", "*1-"));
$bot->newOnText('!msg', 'msg', 1, Array("*1", "*2-"));

$bot->newOnText('!op', 'op', 1, Array("*chan", "*1"));
$bot->newOnText('!op', 'op', 0, Array("*chan", "*nick"));

$bot->newOnText('!join', 'join', 2, Array("*1", "*2"));
$bot->newOnText('!join', 'join', 1, Array("*1"));

$bot->newOnText('!part', 'part', 1, Array("*1-"));
$bot->newOnText('!part', 'part', 0, Array("*chan"));

$bot->newOnText('!quit', 'quit', 1, Array("*1-"));
$bot->newOnText('!quit', 'quit', 0, Array("Quitting..."));

$bot->newOnText('!name', 'changeName', 1, Array("*1"));

// newOnText( String trigger, String functie, int required parameters [, Array parameters]);
$bot->newOnCtcp('version', 'ctcp', 0, Array("*nick", "( :: ZeroBot :: ) [v*version] ( :: by DaeDaluz :: )"));
$bot->newOnCtcp('time', 'ctcp', 0, Array("*nick", "*fulltime"));
$bot->newOnCtcp('finger', 'ctcp', 0, Array("*nick", "Nice ^^"));

// newOnUserMode(string usermode, string functie);
$bot->newOnUserMode('+w', 'perform');

// newOnNumerc(string numeric, string functie);
$bot->newOnNumeric('352', 'storeUsers');

// newOnJoin('String functie, Array parameters [, String on who ] [, String channel]);
$bot->newOnJoin('send', Array('who *chan'), '*me');

// newOnPart('String functie, Array parameters [, String on who ] [, String channel]);

$bot->connect();

while ($bot->connected()) {
	if ($bot->newData()) {
		$bot->printData();
		$bot->events();
	} 
	usleep(100);
}
?>
[/code]

- De klasse

class.php:
[code]

<?php
define("VERSION", "1.0");
set_time_limit(0); // Set time limit at 0, so it wont be cut off after 30sec
error_reporting(E_ALL); // Make it report all errors.

class ZeroBot {
	// Class variables
	var $CONFIG = Array();
	var $con = array();
	var $buffer = array();
	var $perform = true;
	var $onText = Array();
	var $onJoin = Array();
	var $onPart = Array();
	var $onCtcp = Array();
	var $onUserMode = Array();
	var $onNumeric = Array();
	var $channels = Array();
	var $usersOnChannel = Array();

	function ZeroBot ()  {
		// Define some default values.
		$this->CONFIG['nick'] = "ZeroBot";
		$this->CONFIG['ident'] = "Zero bot ". VERSION;
		$this->buffer['old_buffer'] = "";
		$this->buffer['new'] = false;
		$this->CONFIG['admin'] = "";
	}

	function connect () {
		// if configured, connect.
		if (count($this->CONFIG) >= 4) {
			$this->con['socket'] = fsockopen($this->CONFIG['server'], $this->CONFIG['port']);
			if (!$this->con['socket']) {
				$this->error("Could not connect to: ". $this->CONFIG['server'] ." on port ". $this->CONFIG['port']);
			} else {
   				$this->send("USER ". $this->CONFIG['nick'] ." ". $this->CONFIG['server'] ." ". $this->CONFIG['server'] ." :". $this->CONFIG['ident']);
    			$this->send("NICK ". $this->CONFIG['nick'] ." ". $this->CONFIG['server']);
			}
		} else {
			$this->error("Not configured correctly!");
		}
	}

	function newData () {
		// check if there's new data to be read, and handle if ping.
		$this->buffer['new'] = false;
		$data = trim(fgets($this->con['socket']));
		if (!empty($data)) {
			$this->buffer['all'] = $data;
			if(substr($data, 0, 6) == 'PING :') {
				$this->send('PONG :'.substr($data, 6), false);
				if ($this->perform) {
					$this->perform();				
				}
				return false;
			}
			$this->parse_buffer();
			$this->buffer['new'] = true;
			return true;
		}
		return false;
	}

	function perform () {
		// actions to be done on connect.
		$this->join($this->CONFIG['chan'], $this->CONFIG['key']);
		$this->perform = false;	
	}
	
	function printData () {
		//  output the data
		if ($this->buffer['new'] && count($this->buffer['parsed']) > 4) {
			echo date("[H:i:s]") ."{".$this->buffer['parsed']['username']." / ". $this->buffer['parsed']['command'] ." / ". $this->buffer['parsed']['channel'] ."} ". $this->buffer['parsed']['text']. "\n\r";
		}
	}

	function writeToLog () {
		// Functie waarmee je logs kan maken.
		$file = "C:\web\www\bot2\Logs\\" . $this->buffer['parsed']['channel'] . ".txt";
		$fh = fopen($file, 'a');
		fwrite($fh, date("[H:i:s]") ."{".$this->buffer['parsed']['username']." / ". $this->buffer['parsed']['command'] ." / ". $this->buffer['parsed']['channel'] ."} ". $this->buffer['parsed']['text']. "\n");
		fclose($fh);
	}
	
	function events () {
		// check which event needs to be triggered, and trigger it.
		if (!empty($this->buffer['parsed']['command'])) {
			if (strtoupper($this->buffer['parsed']['command']) == "PRIVMSG") {
				if (substr(trim($this->buffer['parsed']['text']),0,1) == chr(001)) {
					$this->onCtcp(trim($this->buffer['parsed']['text']));
				} elseif (!empty($this->CONFIG['admin']) && strtolower($this->buffer['parsed']['username']) == strtolower($this->CONFIG['admin'])) {
					$this->onText(trim($this->buffer['parsed']['text']));
				}
			}
			if (strtoupper($this->buffer['parsed']['command']) == "NUMERIC") {
				$this->onNumeric($this->buffer['parsed']['text'], $this->buffer['parsed']['channel'], $this->buffer['parsed']['target']);
			}	
			if (strtoupper($this->buffer['parsed']['command']) == "NICK") {
				$this->onNick($this->buffer['parsed']['old'], $this->buffer['parsed']['new']);
			}
			if (strtoupper($this->buffer['parsed']['command']) == "JOIN") {
				$this->onJoin($this->buffer['parsed']['username'], $this->buffer['parsed']['channel']);
			}
			if (strtoupper($this->buffer['parsed']['command']) == "PART") {
				$this->onPart($this->buffer['parsed']['username'], $this->buffer['parsed']['channel']);
			}
			if (strtoupper($this->buffer['parsed']['command']) == "MODE" && strtoupper($this->buffer['parsed']['channel']) != strtoupper($this->CONFIG['nick'])) {
				$this->onMode($this->buffer['parsed']['username'], $this->buffer['parsed']['channel'], $this->buffer['parsed']['text']); 
			}
			elseif (strtoupper($this->buffer['parsed']['command']) == "MODE" && strtoupper($this->buffer['parsed']['channel']) == strtoupper($this->CONFIG['nick'])) {
				$this->onUserMode($this->buffer['parsed']['username'], $this->buffer['parsed']['text']); 
			}
		}
	}
	

	function setServer ($server, $port = 6667) {
		if (!empty($server)) {
			$this->CONFIG['server'] = $server;
			$this->CONFIG['port'] = $port;
		} else {
			$this->error("Need valid server adres");
		}
	}

	function setName ($name = "ZeroBot", $ident = false) {
		$this->CONFIG['nick'] = $name;
		if ($ident) {
			$this->CONFIG['ident'] = $ident . " [Zero bot v". VERSION . " by DaeDaluz]";
		}
	}

	function setChannel ($chan, $key = "") {
		if (substr($chan,0,1) == "#") {
			$this->CONFIG['chan'] = $chan;
		} else {
			$this->CONFIG['chan'] = "#" . $chan;
		}
		$this->CONFIG['key'] = $key;
	}

	function setAdmin ($nick) {
		$this->CONFIG['admin'] = $nick;
	}

	function error ($error) {
		trigger_error($error, E_USER_ERROR);
	}

	function send ($data, $output = true) {
		if ($output) {
			echo date("[H:i:s]") ." -> " . $data . "\n";
		}
		fputs($this->con['socket'], $data."\n\r");
	}

	function connected () {
		if (!feof($this->con['socket'])) {
			return true;
		} else {
			return false;
		}
	}

	// Make sense of the input data.
	function parse_buffer() {
		$buffer = NUll;
		$this->buffer['parsed'] = Array();
		$buffer = $this->buffer['all'];
		$buffer = explode(" ", $buffer, 4);
		if (count($buffer) >= 3) {
			if (strpos($buffer['0'], "!")) {
				$buffer['username'] = substr($buffer[0], 1, strpos($buffer['0'], "!") - 1);
			} else {
				$buffer['username'] = substr($buffer[0], 1);
			}
			$posExcl = strpos($buffer[0], "!");
			$posAt = strpos($buffer[0], "@");
			$buffer['identd'] = substr($buffer[0], $posExcl+1, $posAt-$posExcl-1);
			$buffer['hostname'] = substr($buffer[0], strpos($buffer[0], "@")+1);
			$buffer['user_host'] = substr($buffer[0],1);

			switch (strtoupper($buffer[1])) {
				case "JOIN":
					$buffer['text'] = $buffer['username']." ( ".$buffer['user_host']." )";
					$buffer['command'] = "JOIN";
					$buffer['channel'] = $buffer[2];
					if (substr($buffer['channel'],0,1) == ":") {
						$buffer['channel'] = substr($buffer['channel'],1);
					}
				break;
				case "QUIT":
					$buffer['text'] = $buffer['username']." ( ".$buffer['user_host']." )";
					$buffer['command'] = "QUIT";
					$buffer['channel'] = "";
				break;
				case "NOTICE":
					$buffer['text'] = substr($buffer[3], 1);
					$buffer['command'] = "NOTICE";
					$buffer['channel'] = $buffer[2];
				break;
				case "PART":
					$buffer['text'] = $buffer['username']." ( ".$buffer['user_host']." )";
					$buffer['command'] = "PART";
					$buffer['channel'] = $buffer[2];
				break;
				case "MODE":
					if (substr($buffer[3], 0, 1) == ":") {
						$buffer['text'] = substr($buffer[3], 1);
					} else {
						$buffer['text'] = $buffer[3];
					}
					$buffer['command'] = "MODE";
					$buffer['channel'] = $buffer[2];
				break;
				case "NICK":
					$buffer['text'] = $buffer['username']." => ". $buffer[2]." ( ".$buffer['user_host']." )";
					$buffer['old'] = $buffer['username'];
					$buffer['new'] = $buffer[2];
					$buffer['command'] = "NICK";
					$buffer['channel'] = "";
				break;
				case is_numeric($buffer[1]) == true:
					$buffer['text'] = $buffer[3];
					$buffer['command'] = "NUMERIC";
					$buffer['channel'] = $buffer[1];
					$buffer['target'] = $buffer[2];
				break;
				default:
					$buffer['command'] = $buffer[1];
					if (strtoupper($buffer[2]) == strtoupper($this->CONFIG['nick'])) {
						$buffer['channel'] = $buffer['username'];
					} else {
						$buffer['channel'] = $buffer[2];
					}
					$buffer['text'] = substr($buffer[3], 1);
				break;
			}
			$this->buffer['parsed'] = $buffer;
		}
}

	function meIson ($chan) {
		if (in_array(strtolower($chan), $this->channels)) {
			return true;
		} else {
			return false;
		}
	}

	function join ($chan, $key = "") {
		$this->send("JOIN " . $chan . " " . $key);
	}

	function msg ($chan, $msg) {
			$this->send('PRIVMSG '. $chan .' :'.$msg);
	}

	function ctcp ($to, $msg) {
		$split = explode(" ", $msg, 2);
		$this->send("NOTICE ". $to ." :" . chr(001) . strtoupper($split[0]) . " " . $split[1] . chr(001));
	}

	function part ($chan) {
		$this->send("PART " . $chan);
	}

	function quit ($msg = "Zerobot singing off..") {
		$this->send("QUIT :" . $msg);
	}

	function mode ($chan, $modes) {
		$this->send("MODE ". $chan . " " . $modes);
	}

	function Op ($chan, $nick) {
		$this->mode ($chan, "+o " . $nick);
	}

	function deOp ($chan, $nick) {
		$this->mode ($chan, "-o " . $nick);
	}
	
	function changeName ($name) {
		$this->send("NICK :" . $name);
	}
	
	function randomName () {
		$newName = substr($this->CONFIG['nick'],0,3) . rand(1000,9999);
		$this->changeName($newName);
	}
	
	function storeUsers () {
		$text = $this->buffer['parsed']['text'];
		$exp = explode(" ", $text, 8);
		$exp[0] = strtolower($exp[0]);
		
		if (in_array($exp[0], array_keys($this->usersOnChannel))) {
			$getal = count($this->usersOnChannel[$exp[0]]);
		} else {
			$getal = 0;
		}
		$this->usersOnChannel[$exp[0]][$getal]['nick'] = $exp[4];
		$this->usersOnChannel[$exp[0]][$getal]['ident'] = $exp[1];
		$this->usersOnChannel[$exp[0]][$getal]['host'] = $exp[2];
		$this->usersOnChannel[$exp[0]][$getal]['info'] = $exp[7];
	}
	
	
	function ison ($chan, $nick) {
		$chan = strtolower($chan);
		foreach ($this->usersOnChannel[$chan] as $value) {
			if (strtolower($value['nick']) == strtolower($nick)) {
					return true;
			}
		}
		return false;
	}
	
	function onMode ($nick, $chan, $modes) {
		$split = explode(" ", $modes);
		$extra = count($split) - 1;
		$extrac = 1;
		$specials = Array("o", "v", "h", "q", "a", "k");
		for ($i = 0; $i < strlen($split[0]); $i++) {
				$value = substr($split[0], $i, 1);
				if ($value == "+") {
					$temp = true;
				} elseif ($value == "-") {
					$temp = false;
				} else {
					if ($temp) {
						$tmp['mode'] = $value;
						if (in_array($value, $specials) && $extra > 0) {
							$tmp['ex'] = $split[$extrac];
							if ($value == "o") {
								$this->onOp($nick, $chan, $split[$extrac]);
							}
							$extrac++;
						}
						$plus[] = $tmp;
					} else {
						$tmp['mode'] = $value;
						if (in_array($value, $specials) && $extra > 0) {
							$tmp['ex'] = $split[$extrac];
							if ($value == "o") {
								$this->onDeop($nick, $chan, $split[$extrac]);
							}
							$extrac++;
						}
						$min[] = $tmp;
					}
				}			
		}
	}

	function onUserMode ($nick, $modes) {
		$split = explode(" ", $modes);
		$extra = count($split) - 1;
		$extrac = 1;
		for ($i = 0; $i < strlen($split[0]); $i++) {
			$value = substr($split[0], $i, 1);
			if ($value == "+") {
				$temp = true;
			} elseif ($value == "-") {
				$temp = false;
			} else {
				if ($temp) {
					foreach ($this->onUserMode as $key => $val) {
						if ("+" . $value . "" == $val['mode']) {
							call_user_func(Array(&$this, $val['cmd']));
							break;
						}
					}
				} else {
					foreach ($this->onUserMode as $key => $val) {
						if ("-" . $value . "" == $val['mode']) {
							call_user_func(Array(&$this, $val['cmd']));
							break;
						}
					}
				}
			}			
		}
	}
	
	function onNumeric ($text, $numeric) {
		if ($this->buffer['parsed']['target'] != $this->CONFIG['nick'] && $this->buffer['parsed']['target'] != "*") {
			$this->CONFIG['nick'] = $this->buffer['parsed']['target'];
		}
		if ($numeric == '433') {
			$exp = explode(" ", $text);
			if ($exp[0] == $this->CONFIG['nick']) {
				$this->randomName();
			}
		}
		foreach ($this->onNumeric as $key => $val) {
			if ($numeric == $val['numeric']) {
				call_user_func(Array(&$this, $val['cmd']));
				break;
			}
		}
	}
	
	function onNick ($old, $new) {
		if ($this->buffer['parsed']['old'] == $this->CONFIG['nick']) {
			$this->CONFIG['nick'] = $this->buffer['parsed']['new'];
		}
	}

	function onOp ($by, $chan, $on) {
		if (strtolower($on) == strtolower($this->CONFIG['nick']) && strtolower($chan) == strtolower($this->CONFIG['chan'])) {
			$this->CONFIG['secured'] = true;
			$this->mode($chan, '+ims');
		}
	}


	function onDeop ($by, $chan, $on) {
		if (strtolower($on) == strtolower($this->CONFIG['admin']) && strtolower($on) != strtolower($by)) {
			$this->deop($chan, $by);
			$this->op($chan, $on);
		}
	}

	function onPart($nick, $chan) {
		if (strtoupper($nick) == strtoupper($this->CONFIG['nick'])) {
			if (in_array(strtolower($chan), $this->channels)) {
				$this->channels[] = strtolower($chan);
			}
		} else {
			if (!empty($chan) && !empty($nick)) {
				if (count($this->onPart) > 0) {
					foreach ($this->onPart as $key => $val) {
						$this->JPProcess($val, $key);
					}
				}
			}
		}
	}

	function onJoin($nick, $chan) {
		if (strtoupper($nick) == strtoupper($this->CONFIG['nick'])) {
			if (!in_array(strtolower($chan), $this->channels)) {
				$key = Array_search(strtolower($chan), $this->channels);
				unset($this->channels[$key]);
			}
		}
		if (!empty($chan) && !empty($nick)) {
			if (count($this->onJoin) > 0) {
				foreach ($this->onJoin as $key => $val) {
					$this->JPProcess($val, $key);
				}
			}
		}
	}

	function JPProcess ($val, $key) {
		if (!empty($val['chan'])) {
			if (is_array($val['chan'])) {
				if (in_array_i($key, $val['chan'])) {
					$chan_s = true;
				} else {
					$chan_s = false;
				}
			} elseif (strtoupper($val['chan']) == strtoupper($chan)) {
				$chan_s = true;
			} else {
				$chan_s = false;
			}
		} else {
			$chan_s = true;
		}
		if (!empty($val['nick'])) {
			$val['nick'] = str_replace("*me", $this->CONFIG['nick'] , $val['nick']);
			if (is_array($val['nick'])) {
				if (in_array_i($this->buffer['parsed']['username'], $val['nick'])) {
					$nick_s = true;
				} else {
					$nick_s = false;
				}
			} elseif (strtoupper($val['nick']) == strtoupper($this->buffer['parsed']['username'])) {
				$nick_s = true;
			} else {
				$nick_s = false;
			}
		} else {
			$nick_s = true;
		}
		if ($nick_s && $chan_s) {
			if (is_array($val['para'])) {
				foreach ($val['para'] as $waarde) {
					$par = str_replace("*nick", $this->buffer['parsed']['username'] , $waarde);
					$para[] = str_replace("*chan", $this->buffer['parsed']['channel'] , $par);
				}
				call_user_func_array(Array(&$this, $val['cmd']), $para);
			} else {
				call_user_func(Array(&$this, $val['cmd']));
			}
		}
	}

	function onCtcp ($text) {
		if (count($this->onCtcp) > 0) {
			$text = str_replace(chr(001), "", $text);
			$trig = explode(" ", $text, 2);
			$trig = $trig[0];
			$text = $trig[1];
			$word = explode(" ", $text);	
			foreach ($this->onCtcp as $key => $val) {
				if (strtoupper($trig) == strtoupper($val['trigger']) && (count($word) - 1) >= $val['req']) {
					if (is_array($val['para'])) {
						foreach ($val['para'] as $sleutell => $par) {
							$par = str_replace("*fulltime", date("D M j G:i:s Y"), $par);
							$par = str_replace("*version", VERSION , $par);
							$par = str_replace("*nick", $this->buffer['parsed']['username'] , $par);
							$par = str_replace("*time", date('H:i:s') , $par);
							$para[] = $par;
						}
						call_user_func_array(Array(&$this, $val['cmd']), $para);
					} else {
						call_user_func(Array(&$this, $val['cmd']));
					}
					break;
				}
			}
		}
	}

	function tokenRep ($string, $zin) {
		preg_match_all("*\*[0-9]{1,2}\-*", $string, $output, PREG_SET_ORDER);
		foreach ($output as $value) {
			$val = str_replace("*", "", $value[0]);
			$val = str_replace("-", "", $val);
			settype($val, "int");
			$split = explode(" ", $zin, $val);
			if (!empty($split[$val -1])) {
				$string = str_replace($value[0], $split[$val -1], $string);
			}
		}
		preg_match_all("*\*[0-9]{1,2}*", $string, $output, PREG_SET_ORDER);
		foreach ($output as $value) {
			$val = str_replace("*", "", $value[0]);
			settype($val, "int");
			$split = explode(" ", $zin);
			if (!empty($split[$val - 1])) {
				$string = str_replace($value[0], $split[$val - 1], $string);
			}
		}
		return $string;
	}

	function onText ($text) {
		if (count($this->onText) > 0) {
			$word = explode(" ", $text);
			$trig = explode(" ", $text, 2);
			foreach ($this->onText as $key => $val) {
				if (strtoupper($word[0]) == strtoupper($val['trigger']) && (count($word) - 1) >= $val['req']) {
					if (is_array($val['para'])) {
						foreach ($val['para'] as $sleutel => $waarde) {
							if (count($trig) < 2) {
								break;
							} else {
								$val['para'][$sleutel] = $this->tokenRep($waarde, $trig[1]);
							}
						}
						foreach ($val['para'] as $sleutell => $par) {
							$par = str_replace("*fulltime", date("D M j G:i:s Y"), $par);
							$par = str_replace("*version", VERSION , $par);
							$par = str_replace("*nick", $this->buffer['parsed']['username'] , $par);
							$par = str_replace("*time", date('H:i:s') , $par);
							$para[] = str_replace("*chan", $this->buffer['parsed']['channel'] , $par);
						}
						call_user_func_array(Array(&$this, $val['cmd']), $para);
					} else {
						call_user_func(Array(&$this, $val['cmd']));
					}
					break;
				}
			}
		}
	}

	function newOnText ($trigger, $cmd, $reqPar = 0, $para = "") {
		if (is_callable(array('ZeroBot', $cmd))) {
			if (!empty($trigger)) {
				if (is_int($reqPar)) {
					$getal = count($this->onText);
					$this->onText[$getal]['trigger'] = $trigger;
					$this->onText[$getal]['cmd'] = $cmd;
					$this->onText[$getal]['req'] = $reqPar;
					$this->onText[$getal]['para'] = $para;
				} else {
					$this->error("The number of required parameters must be an INT");
				}
			} else {
				$this->error("Trigger required");
			}
		} else {
			$this->error("Not callable function! :" . $cmd);
		}
	}

	function newOnCtcp ($trigger, $cmd, $reqPar = 0, $para = "") {
		if (is_callable(array('ZeroBot', $cmd))) {
			if (!empty($trigger)) {
				if (is_int($reqPar)) {
					$getal = count($this->onCtcp);
					$this->onCtcp[$getal]['trigger'] = $trigger;
					$this->onCtcp[$getal]['cmd'] = $cmd;
					$this->onCtcp[$getal]['req'] = $reqPar;
					$this->onCtcp[$getal]['para'] = $para;
				} else {
					$this->error("The number of required parameters must be an INT");
				}
			} else {
				$this->error("Trigger required");
			}
		} else {
		$this->error("Not callable function! :" . $cmd);
		}
	}

	function newOnJoin ($cmd, $para = "", $nick = "", $chan = "") {
		if (is_callable(array('ZeroBot', $cmd))) {
			if (is_array($para)) {
				$getal = count($this->onJoin);
				$this->onJoin[$getal]['cmd'] = $cmd;
				$this->onJoin[$getal]['para'] = $para;
				$this->onJoin[$getal]['nick'] = $nick;
				$this->onJoin[$getal]['chan'] = $chan;
			} else {
				$this->error("Parameters must be in array format!");
			}
		} else {
			$this->error("Not callable function! :" . $cmd);
		}
	}

	function newOnPart ($cmd, $para = "", $nick = "", $chan = "") {
		if (is_callable(array('ZeroBot', $cmd))) {
			if (is_array($para)) {
				$getal = count($this->onPart);
				$this->onPart[$getal]['cmd'] = $cmd;
				$this->onPart[$getal]['para'] = $para;
				$this->onPart[$getal]['nick'] = $nick;
				$this->onPart[$getal]['chan'] = $chan;
			} else {
				$this->error("Parameters must be in array format!");
			}
		} else {
			$this->error("Not callable function! :" . $cmd);
		}
	}

	function newOnUserMode ($mode, $cmd) {
		if (is_callable(array('ZeroBot', $cmd))) {
			$getal = count($this->onUserMode);
			$this->onUserMode[$getal]['mode'] = $mode;
			$this->onUserMode[$getal]['cmd'] = $cmd;
		} else {
			$this->error("Not callable function! :" . $cmd);
		}
	}

	function newOnNumeric ($numeric, $cmd) {
		if (is_callable(array('ZeroBot', $cmd))) {
			$getal = count($this->onNumeric);
			$this->onNumeric[$getal]['numeric'] = $numeric;
			$this->onNumeric[$getal]['cmd'] = $cmd;
		} else {
			$this->error("Not callable function! :" . $cmd);
		}
	}
}

function in_array_i($search, &$array) {
  $search = strtolower($search);
  foreach ($array as $item)
	if (strtolower($item) == $search)
		return TRUE;
  return FALSE;
}
?>
[/code]

Reacties

0
Nog geen reacties.