kaecyra/chatbot

通用可扩展即时通讯聊天机器人。

v0.8.2 2021-04-22 17:37 UTC

README

Packagist Version MIT License

chatbot 是一个由PHP驱动的异步机器人,旨在加入公司即时通讯室并提供有用和幽默的命令和响应。

ChatBot 可扩展,具有通过简单的事件管理器拦截事件来修改和扩展核心功能的能力。

目录

  1. 安装
  2. HipChat集成
  3. 用法
  4. 核心命令
    1. 报告
    2. 列出模块
    3. 加载模块
    4. 卸载模块
  5. 扩展ChatBot
    1. 模块初始化
    2. 钩子
    3. 权限
    4. 核心事件

安装

ChatBot 需要 PHP 7.0 或更高版本以及一个开放的 5222 端口。

安装 ChatBot 与检出此 GitHub 仓库或下载 zip 文件一样简单。之后,将 conf/config.json.tpl 复制到 conf/config.json 并根据需要进行更改。

可能的好方法是添加 xmpp.jidxmpp.pass,并更改机器人的昵称。

HipChat集成

  1. 创建一个新的管理员帐户并使用它登录 hipchat.com。
  2. 转到 {yoursite}.hipchat.com/account/xmpp
  3. 在此页面上使用机器人的配置文件中的 Jabber ID (jid) 和昵称。
  4. 启动 ChatBot。它应该连接到您的群组。
  5. 向 ChatBot 发送消息:join room #room

用法

一旦配置了机器人,就可以使用 ./chatbot.php start 启动它。当机器人运行时,您可以通过运行 ./chatbot.php stop 来关闭它。很简单!

ChatBot 会相当积极地写入日志文件,默认情况下位于 log/chatbot.log。日志会在 10mb 后自动轮换。仅保留一个先前的日志文件。

核心命令

ChatBot 有一个名为 base 的核心模块,其中包含他的“核心”命令。这些简化了模块的加载和卸载。

报告

挑战/响应方法用于测试连通性。

语法

chatbot report

响应

<your name>: 报告完毕,先生

列出模块

列出所有可用的模块。

如果行中指定了 activeenabled,则响应将仅限于启用的模块。

语法

chatbot list [active|enabled] modules

响应

<your name>, there are 14 modules enabled
 base v1.0 by Tim Gunter <tim@vanillaforums.com> - Base Commands
 xmpp v1.0 by Tim Gunter <tim@vanillaforums.com> - XMPP Module
 xmppmuc v1.0 by Tim Gunter <tim@vanillaforums.com> - XMPP Multi User Chat module

加载模块

加载并激活一个可用的模块。

成功加载模块会导致它被保存到配置文件中。每次重启 ChatBot 时都会自动加载。

语法

chatbot load module <module name>

响应

加载:<module name> v<version> by <author> - <description>

卸载模块

卸载并停用活动的模块。

成功卸载模块会导致它从配置文件中删除。启动时将不再自动加载。

语法

chatbot unload module <module name>

响应

卸载:<module name> v<version>

扩展ChatBot

ChatBot 通过可加载的模块支持扩展。在启动过程中,ChatBot 会自动扫描 ROOT/modules 文件夹。

模块应该有自己的文件夹。在该文件夹内部应有一个名为 class.<modulename>.module.php 的 PHP 类文件,该文件应包含一个名为 <ModuleName>Module 的 PHP 类,该类扩展了模块基类 \ChatBot\Module

模块类文件应使用 namespace Module; 以防止命名冲突。

示例

namespace Module;

use \ChatBot\ChatBot;
use \ChatBot\Module;

class BaseModule extends Module {

}

模块初始化

\ChatBot\Module 基类包含一个单一抽象方法 start(),它充当模块构造函数。 __construct() 是私有的,不能直接使用。

钩子

start() 方法应用于定义模块钩子。钩子定义只是一个与事件名称绑定的 callable 数组。

示例

public function start() {
    $this->hook('event_name', [$this, 'hook_method']);
}

每个事件都可以定义多个钩子。

权限

为了使ChatBot支持高级权限功能,支持与编排集成。这种集成允许为每个命令使用基于角色的权限。

每个模块可以在其start()方法中定义角色和授予的权限之间的映射。

示例

public function start() {
    $this->roles = [
        'administrator' => [
            'base.module.control'
        ],
        'staff' => [
            'base.report'
        ]
    ];
}

此映射将权限base.module.control授予具有管理员角色的用户,将权限base.report授予具有员工角色的用户。

核心事件

ChatBot有一些核心事件,可以直接挂钩。结合这些事件可以使模块编写者生成复杂的流程。

  • 启动
  • 滴答
  • 消息
  • 直接
  • 命令

事件:启动

在所有模块加载完毕并连接到聊天服务之前启动时触发。

参数

没有提供参数。

事件:滴答

ChatBot运行时每10秒触发一次。

参数

没有提供参数。

事件:消息

每当ChatBot收到任何私密或群聊消息时触发。

参数

数组 $event

An array describing the received message event.
[
  'scope' => String: 'chat' or 'group',
  'original' => XMPPMsg: message,
  'to' => XMPPJid: message source JID,
  'from' => XMPPJid: message target JID,
  'body' => String: body text,
  'type' => ?,
  'fromuser' => Array: source user info array
]

事件:直接

每当ChatBot收到指向该机器人的私密或群聊消息时触发。所有私密消息都被视为直接消息,并且以机器人的名字开始或结束的群聊消息也被视为直接消息。

参数

数组 $event

Same as message

事件:命令

当聊天机器人收到触发状态匹配命令的消息时触发。

参数

数组 $event

Same as message

状态 $state

An object describing the triggered command and providing access to its data.