Mark’s IRC API Library 一个php编写的IRC API库
Formats data for sending to an IRC network. This library does not handle * actual connecting to the IRC server or parsing the IRC servers output. * * The raw_send method can be used to send data to the IRC in formats that are * either not standard, or not yet implemented here. I know there is a lot more * to implement, and I plan to do so as time goes on.
<?php
/**
* Mark's IRC API Library
*
* Formats data for sending to an IRC network. This library does not handle
* actual connecting to the IRC server or parsing the IRC servers output.
*
* The raw_send method can be used to send data to the IRC in formats that are
* either not standard, or not yet implemented here. I know there is a lot more
* to implement, and I plan to do so as time goes on.
*
* @author Mark LaDoux
* @copyright Copyright © 2012, Mark LaDoux
* @version 1.0.0
* @link http://markladoux.com/
*/
class IRC
{
/**
* Library version
*
* @access protected
* @var string
*/
protected $_version = '1.0.0';
/**
* Connection socket
*
* @access protected
* @var object
*/
protected $_socket;
/**
* Constructor
*
* configures the class for use
*
* @access public
* @param object
* @return void
*/
public function __construct($socket)
{
$this->_socket = $socket;
}
/**
* version
*
* Reports the libraries version
*
* @access public
* @return string
*/
public function version()
{
return $this->_version;
}
/**
* say
*
* send a message to the target
*
* @access public
* @param string $target
* @param string $message
* @return void
*/
public function say($target, $message)
{
$data = "PRIVMSG {$target} :{$message}";
$this->raw_send($data);
}
/**
* emote
*
* send an emote to the target ( equiv to IRC client /me does something )
*
* @access public
* @param string $target
* @param string $message
* @return void
*/
public function emote($target, $message)
{
$data = chr(1)."ACTION {$message}".chr(1);
$this->say($target, $data);
}
/**
* ctcp
*
* send a ctcp to the target
*
* @access public
* @param string $target
* @param string $message
* @return void
*/
public function ctcp($target, $message)
{
$data = chr(1).$message.chr(1);
$this->say($target, $data);
}
/**
* notice
*
* send a notice to the target
*
* @access public
* @param string $target
* @param string $message
* @return void
*/
public function notice($target, $message)
{
$data = "NOTICE {$target} :{$message}";
$this->raw_send($data);
}
/**
* set_nick
*
* change user nick name
*
* @access public
* @param string
* @return void
*/
public function set_nick($nick)
{
$data = "NICK {$nick}";
$this->raw_send($data);
}
/**
* set_user
*
* prepare user ident string
*
* @access public
* @param string
* @return void
*/
public function set_user($nick)
{
$data = "USER $nick $nick $nick $nick :$nick";
$this->raw_send($data);
}
/**
* send_pass
*
* Identify with nickserv
*
* @access public
* @param string
* @return void
*/
public function send_pass($password)
{
$this->say('nickserv', "IDENTIFY {$password}");
}
/**
* disconnect
*
* Terminates IRC connection. Does not terminate reset process in the case
* you have implemented a reconnect function
*
* @access public
* @param string|null
* @return void
*/
public function disconnect($message = NULL)
{
$data = ($message !== NULL) ? "QUIT :{$message}" : "QUIT";
$this->raw_send($data);
}
/**
* enter_channel
*
* enter an IRC channel
*
* @access public
* @param string
* @return void
*/
public function enter_channel($channel)
{
$data = ($channel[0] == '#') ? "JOIN {$channel}" : "JOIN #{$channel}";
$this->raw_send($data);
}
/**
* leave_channel
*
* leaves an IRC channel
*
* @access public
* @param string
* @return void
*/
public function leave_channel($channel)
{
$data = ($channel[0] == '#') ? "PART {$channel}" : "PART #{$channel}";
$this->raw_send($data);
}
/**
* raw_send
*
* Sends raw commands to the IRC server. I left it a public function for
* hackability reasons. Makes it easier to add custom commands for
* non-standard servers, or to test new features without having to edit
* the class directly every time. Of course you could always just extend
* the class.
*
* @access public
* @return void
*/
public function raw_send($data)
{
fwrite($this->_socket, $data."\n");
}
}
