zorn-v/xmpp

Library for XMPP protocol (Jabber) connections

0.8.4 2024-03-27 15:01 UTC

README

Library for XMPP protocol connections (Jabber) for PHP.

SYSTEM REQUIREMENTS

  • PHP >= 5.6
  • psr/log
  • (optional) psr/log-implementation - like monolog/monolog for logging

INSTALLATION

Install Composer and then

composer require zorn-v/xmpp

DOCUMENTATION

You can check example.php for auto reply bot example

This library uses an object to hold options:

use Fabiang\Xmpp\Options;
$options = new Options($address);
$options->setUsername($username)
    ->setPassword($password);

The server address must be in the format myjabber.com:5222. If the server supports TLS the connection will automatically be encrypted.

If you want to use SOCKS proxy you can set it by

$options->setSocksProxyAddress('localhost:9050');

or

$options->setSocksProxyAddress('username:password@localhost:9050');

You can also pass a PSR-3 compatible object to the options object:

$options->setLogger($logger);

The client manages the connection to the Jabber server and requires the options object:

use Fabiang\Xmpp\Client;
$client = new Client($options);
// optional connect manually
$client->connect();

You can use getMessages() for get all incoming messages

print_r($client->getMessages());
Array
(
    [0] => Array
        (
            [from] => user@myjabber.com/resource
            [message] => Message text
        )

)

For sending data you just need to pass a object that implements Fabiang\Xmpp\Protocol\ProtocolImplementationInterface:

use Fabiang\Xmpp\Protocol\Roster;
use Fabiang\Xmpp\Protocol\Presence;
use Fabiang\Xmpp\Protocol\Message;

// fetch roster list; users and their groups
$client->send(new Roster);
// set status to online
$client->send(new Presence);

// send a message to another user
$message = new Message;
$message->setMessage('test')
    ->setTo('nickname@myjabber.com');
$client->send($message);

// join a channel
$channel = new Presence;
$channel->setTo('channelname@conference.myjabber.com/nickname')
    ->setPassword('channelpassword');
$client->send($channel);

// send a message to the above channel
$message = new Message;
$message->setMessage('test')
    ->setTo('channelname@conference.myjabber.com')
    ->setType(Message::TYPE_GROUPCHAT);
$client->send($message);

After all you should disconnect:

$client->disconnect();

DEVELOPING

If you like this library and you want to contribute, make sure the unit-tests and integration tests are running. Composer will help you to install the right version of PHPUnit and Behat.

composer install

After that:

./vendor/bin/phpunit
./vendor/bin/behat

New features should always tested with Behat.

LICENSE

BSD-2-Clause. See the LICENSE.

TODO

  • Better integration of channels
  • Factory method for server addresses
  • improve documentation