All pastes #736778 Raw Edit

Zeug

public php v1 · immutable
·published 2007-10-14 20:25 UTC
rendered paste body
<div style="overflow:auto; font-family:sans-serif; font-size:12px;"><?php/** * @author graveguard * @authorurl http://www.graveguard.de * @license	GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> */class IrcBot{	protected $server;	protected $port;	protected $start_channel;	protected $owner_nick;	protected $socket;	protected $devmode;	var $prefix = "~";		/**	*	*	Initialisierung der Klasse und anschließendes Verbinden mit dem IRC-Server	*	*	Folgende Daten müssen angegeben:	*		$server: Host des IRC-Servers	*		$start_channel: Channel in den der Bot joinen soll	*		$owner_nick: Gibt an wie der Inhaber des Bots heißt	*	*	Folgende Daten müssen bei Bedarf angegeben werden:	*		$port: Port, über den der IRC-Server läuft	*		$devmode:	False = Saubere Ausgabe der Nachrichten im Browser. Jedoch nur Messages	*					True  = Komplette Ausgabe, wie es vom Server ankommt	*	*	Diese Daten müssen bei der Initialisierung der Klasse angegeben werden.	*	*	Außerhalb der Klasse aufrubar	*/	public function __construct($server, $start_channel, $owner_nick, $port = "6667", $devmode = FALSE)	{		if(isset($server)) $this->server = $server;		else die("Es wurde kein Server angegeben!");				if(isset($start_channel)) $this->start_channel = $start_channel;		else die("Es wurde kein Channel angegeben!");				if(isset($owner_nick)) $this->owner_nick = $owner_nick;		else die("Es wurde kein Botinhaber angegeben!");				$this->devmode = $devmode;				$this->port = $port;				ob_implicit_flush();		$this->connect();	}		/**	*	*	Stellt die Verbindung zum Server her.	*	*	Nur innerhalb der Klasse aufrubar	*/	protected function connect()	{		$this->socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Socket konnte nicht erstellt werden!");		socket_connect($this->socket, $this->server, $this->port);		$this->send("NICK :GraveBot\r\n");		$this->send("USER Gravebot 0 0 :gg\r\n");		$this->send("JOIN :".$this->start_channel."\r\n");	}		/**	*	*	Empfängt die Daten des IRC-Servers	*	*		$size: Gibt die Anzahl der Bytes an, die aufeinmal empfangen werden sollen (Standardwert: 1024)	*	*	Außerhalb der Klasse aufrubar	*/	public function read_data($size = 1024)	{		set_time_limit(0);		if($out = socket_read($this->socket, $size)) 		{			$this->do_actions($out);			return $this->parse_data($out);		}		else return false;	}		/**	*	*	Gemischte Aktionen (Quitbefehl, Pong)	*	*		$data: Überlieferte Daten des Servers	*	*	Nur innerhalb der Klasse aufrubar	*/	private function do_actions($data)	{		if(preg_match("/:".$this->owner_nick."!(.*)@(.*) PRIVMSG (.*) :".$this->prefix."quit/", $data))	$this->disconnect();		if(preg_match("/PING :(:*)/", $data, $matches)) $this->send("PONG :".$matches[1]);	}		/**	*	*	Verarbeitet die Serverdaten für die Browserausgabe	*	*		$data: Gibt die Daten an, die für die Ausgabe bearbeitet werden	*	*	Nur innerhalb der Klasse aufrubar	*/	private function parse_data($data)	{		if($this->devmode = FALSE)		{			if(preg_match("/:(.*)!(.*)@(.*) PRIVMSG (.*) :(.*)/", $data, $matches) != 0)			{				$return["nick"] = $matches[1];				$return["host"] = $matches[2];				$return["channel"] = $matches[4];				$return["message"] = $matches[5];				return "<b>(".$return["nick"].") </b>".$return["message"]."<br />";			}			else return "";		}		elseif($this->devmode = TRUE) return nl2br($data);	}		/**	*	*	Sendet Daten an den Server.	*	*		$message: Die Nachricht die an den Server gesendet werden soll.	*	*	Außerhalb der Klasse aufrubar	*/	public function send($message)	{		if(isset($message))		{			socket_write($this->socket, $message) or print("Folgende Anweisung konnte nicht gesendet werden: ".$message);		}	}			/**	*	*	Schließt die Verbindung zum IRC-Server	*	*	Außerhalb der Klasse aufrubar	*/	public function disconnect()	{		$this->send("QUIT :Mein Besitzer will das ich gehe...\r\n");		socket_close($this->socket);		die();	}	}$irc_bot = new IrcBot("irc.freenode.net", "#botted", "graveguard", 6667, TRUE);while(TRUE){	$out = $irc_bot->read_data();	echo $out;}?></div>