龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

IRC Markamp;#39;s IRC API Library 一个php编写的IRC API库

时间:2014-06-21 15:47来源:网络整理 作者:网络 点击:
分享到:
Markamp;#39;s IRC API Library 一个php编写的IRC API库 [代码片段(234行)]
<?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");
    }

}
精彩图集

赞助商链接