<?php
/** * @filesource bot.php * @version 0.1-alpha * @author Patrick Rennings * @copyright 2010 * * @usage Basic IRC Bot class */
Class ViiIrcBot { protected $BotSocket; protected $BotConfig; protected $BotData; protected $Parameter; /** * @name ViiIrcBot::__construct * @param void * @return void * * @usage Main part for creating the bot */ public function __construct () { $this->BotConfig = array( /** * Bot configuration for information */ 'nickname' => 'ViiBot4', 'realname' => 'Vii personal bot', 'ident' => 'ViiBot', /** * Bot server configration */ 'hostname' => 0, 'server' => 'ogn1.ogamenet.net', 'port' => 6667, /** * Bot channel configration */ 'channel' => array('#Vii') ); /** * Prepare for bot connection */ if(!$this->ConnectViiBot()) { die('Connection failed.'); } else { $this->ConnectToIrc(); $this->BotMainLoop(); } } /** * @name ViiIrcBot::ConnectViiBot * @param void * @return boolean * * @usage login to the irc server */ protected function ConnectViiBot() { /** * Create a socket for bot connection */ $this->BotSocket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); if (!$this->BotSocket) { return false; } /** * Bind the socket to make it irc'able */ if(!socket_bind($this->BotSocket, $this->BotConfig['hostname'])) { return false; } if(!socket_connect($this->BotSocket, $this->BotConfig['server'], $this->BotConfig['port'])) { return false; } /** * Return positive result */ return $this->BotSocket; } /** * @name ViiIrcBot::ConnectToIrc * @param void * @return boolean * * @usage Connect to the irc server */ protected function ConnectToIrc () { /** * Utilize connection */ $this->RawWrite('USER ' . $this->BotConfig['ident']. ' ' . $this->BotConfig['hostname'] . ' ' . $this->BotConfig['server'] . ' :'. $this->BotConfig['realname']); /** * Define bot nickname to use * on the server */ $this->RawWrite('NICK ' . $this->BotConfig['nickname']); return true; } /** * @name ViiIrcBot::RawWrite * @param $Parameter * @return void * * @usage dump an raw line in to the server */ protected function RawWrite ($Parameter) { socket_write($this->BotSocket, $Parameter . "rn"); }
/** * @name ViiIrcBot::DefineRawLine * @param void * @return Void * * @usage Defining usable parameters for commands */ protected function DefineRawLine($RawLine) { $this->Parameter['hostmask'] = $RawLine[0]; $this->Parameter['servercmd'] = $RawLine[1]; $this->Parameter['location'] = $RawLine[2]; $this->Parameter['command'] = trim(substr($RawLine[3], 1)); if (!empty($this->Parameter['command'])) { $ExplodingPar = explode($RawLine[3], $this->BotData); $this->Parameter['parameters'] = $ExplodingPar[1]; } /** * Splitting hostmask for usable things * $this->Parameter['hostmask'] = Vii`!Vii@Vii.gameoperator.OGameNl */ if (preg_match('/^([^!@]+)!(?:[ni]=)?([^@]+)@([^ ]+)/', $this->Parameter['hostmask'])) { $TempStorage = preg_match('/^([^!@]+)!(?:[ni]=)?([^@]+)@([^ ]+)/', $this->Parameter['hostmask'], $HostArray); $this->Parameter['hostmask'] = array(); $this->Parameter['hostmask']['hostmask'] = substr($HostArray[0], 1); $this->Parameter['hostmask']['nickname'] = substr($HostArray[1], 1); $this->Parameter['hostmask']['ident'] = $HostArray[2]; $this->Parameter['hostmask']['banmask'] = '*!*@' . $HostArray[3]; } } /** * @name ViiIrcBot::BotMainLoop * @param void * @return boolean * * @usage Main loop of usage of the bot */ protected function BotMainLoop () { while($this->BotData = socket_read($this->BotSocket,65000,PHP_NORMAL_READ)) { /** * Even when the line is empty, just continue */ if($this->BotData == "n") { continue; } /** * Get usable data from the raw output line of irc */ $ConfiguratingData = explode(' ', $this->BotData); $this->DefineRawLine($ConfiguratingData); /** * Go play ping pong with the server */ if($this->Parameter['hostmask'] == 'PING') { $this->RawWrite('PONG '. $this->Parameter['servercmd']); } /** * Other commands */ if ($this->Parameter['command'] == '!raw') { $this->RawWrite($this->Parameter['parameters']); } if ($this->Parameter['command'] == '!hostmask') { $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Hostmask:' . $this->Parameter['hostmask']['hostmask']); $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Nickname: ' . $this->Parameter['hostmask']['nickname']); $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Banmask: ' . $this->Parameter['hostmask']['banmask']); $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Identity: ' . $this->Parameter['hostmask']['ident']); } if ($this->Parameter['command'] == '!parameter') { $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Server command: ' . $this->Parameter['servercmd']); $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Localation:' . $this->Parameter['location']); $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Command: ' . $this->Parameter['command']); $this->RawWrite('PRIVMSG ' . $this->Parameter['location'] . ' :Parameters: ' . $this->Parameter['parameters']); } } } }
$ViiBot = new ViiIrcBot(); ?>
|