IRC
IRC for kittehs, and also PHP programmers ..., (*1)
We are going to have some IRC based collaboration tools (from the late 90's), we required a bot., (*2)
This repository contains a multithreaded PHP IRC bot ... because apparently I'm 15 again ..., (*3)
Codez
U can haz codez ..., (*4)
%s\n", $line); }
public function onReceive($line) { printf("irc = $irc;
$this->msg = $msg;
}
public function __invoke() {
/* we can do whatever we want here:
search docs, take as long as we want/need */
$this->irc->msg(
$this->msg->getNick(),
$this->msg->getText());
$this->irc->msg(
$this->msg->getChannel(),
sprintf(
"%s said \"%s\" to %s",
__CLASS__,
$this->msg->getText(),
$this->msg->getNick()));
}
protected $irc;
protected $msg;
}
class Listen implements Listener {
public function __construct($nick) {
$this->nick = $nick;
}
public function onReceive(Connection $irc, Message $msg) {
if ($msg->getType() == "PRIVMSG" &&
$msg->getNick() == $this->nick) {
/* returning a Task object
threads the work */
return new Repeat($irc, $msg);
}
}
protected $nick;
}
set_time_limit(0);
/* open connection to server */
$connection = new Connection("irc.efnet.org", 6667);
/* make sure we see all input/output */
$connection->setLogger(new Log());
/* create robot with default pool */
$robot = new Robot($connection, new Pool(4));
/* add listeners */
$robot->addListener(
new Listen("test-user2"));
/* login, join channels and enter main loop */
$robot->login("bot")
->join("#devs")
->loop();
?>
The example code above shows how to use the Listener and Task interfaces to respond asynchronously to specific messages., (*5)
In addition, this package includes a Manager interface for the Robot, executed synchronously by the Robot during execution, it allows the programmer to perform
administration that must be performed in the same context as the Robot., (*6)
setLogger(new Log());
/* create robot with default pool */
$robot = new Robot($connection, new Pool(4), new Manage());
/* add listeners */
$robot->addListener(
new Listen("krakjoe"));
/* login, join channels and enter main loop */
$robot->login("bot")
->join("#devs")
->loop();
?>
The code above shows how to employ both the Listener and Manager functionality., (*7)