onebot/libonebot

PHP 的 LibOneBot 库,通过此库可快速接入 OneBot 生态

0.6.8 2024-03-04 02:34 UTC

README

Version GitHub Workflow Status License Packagist PHP Version Support

php-libonebot

PHP 的 LibOneBot 库。LibOneBot 可以帮助 OneBot 实现者快速在新的聊天机器人平台实现 OneBot v12 接口标准。

基于 LibOneBot 实现 OneBot 时,OneBot 实现者只需专注于编写与聊天机器人平台对接的逻辑,包括通过长轮询或 webhook 方式从机器人平台获得事件,并将其转换为 OneBot 事件,以及处理 OneBot 动作请求,并将其转换为对机器人平台 API 的调用。

此外,内部的通信方式有相应的抽象方法,你可以在 libob 的基础上开发或整合其他 Web 框架。

当前版本还在开发中,在发布正式版之前此库内的接口可能会发生较大变动。

开发进度见 更新日志

使用

composer require onebot/libonebot

尝试 Demo

在 require 下载 libob 库后,新建文件 demo.phpdemo.json,并在 demo.php 中写如下代码:

<?php

declare(strict_types=1);

require_once 'vendor/autoload.php';

$ob = new \OneBot\V12\OneBot('repl', 'qq', 'REPL-1');
$ob->setLogger(new \OneBot\Logger\Console\ConsoleLogger());
$ob->setDriver(
    // 此处也可以在 Linux 系统下安装 swoole 扩展后使用 SwooleDriver() 拥有协程能力
    new \OneBot\Driver\Workerman\WorkermanDriver(), 
    new \OneBot\Config\Repository('demo.json')
);
$ob->setActionHandlerClass(\OneBot\V12\Action\ReplAction::class);
$ob->run();

demo.json 中写如下代码:

{
    "lib": {
        "db": false
    },
    "communications": {
        "http": {
            "enable": true,
            "host": "0.0.0.0",
            "port": 9600,
            "event_enabled": true,
            "event_buffer_size": 0
        }
    }
}

此 Demo 以一个命令行交互的方式使用 LibOneBot 快速完成了一个 OneBot 实现,命令行中输入内容即可发送到 OneBot,使用 HTTP 或 WebSocket 发送给 LibOneBot 后可以将信息显示在终端内。

# 运行 OneBot 实现
php demo.php

启动后可以利用 Postman 或 Curl 等工具发起请求,以 OneVot V12 协议的发送消息动作为例:

curl --location --request POST 'http://localhost:9600/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "action": "send_message",
    "params": {
        "detail_type": "group",
        "group_id": "12467",
        "message": [
            {
                "type": "text",
                "data": {
                    "text": "我是文字巴拉巴拉巴拉"
                }
            }
        ]
    }
}'

你应该可以看到 OneBot 命令行中出现以下消息:

[2021-11-18 18:44:39] [INFO] 我是文字巴拉巴拉巴拉

并收到以下响应:

{"status":"ok","retcode":0,"data":{"message_id":5007842},"message":""}%