kaecyra / chatbot
通用可扩展即时通讯聊天机器人。
Requires
- php: >=7.3
- kaecyra/app-common: ^1.0
- psr/log: ^1.0
- ratchet/pawl: 0.2.*
- react/event-loop: ~0.4
- react/zmq: 0.2.*|0.3.*
- vanilla/garden-cli: ~1.0
- vanilla/garden-container: ^2.0
- vanilla/garden-daemon: ^1.0
- vanilla/garden-http: ^1.1
- vanilla/garden-schema: ^1.4
This package is auto-updated.
Last update: 2024-09-19 22:12:53 UTC
README
chatbot
是一个由PHP驱动的异步机器人,旨在加入公司即时通讯室并提供有用和幽默的命令和响应。
ChatBot 可扩展,具有通过简单的事件管理器拦截事件来修改和扩展核心功能的能力。
目录
安装
ChatBot 需要 PHP 7.0 或更高版本以及一个开放的 5222 端口。
安装 ChatBot 与检出此 GitHub 仓库或下载 zip 文件一样简单。之后,将 conf/config.json.tpl
复制到 conf/config.json
并根据需要进行更改。
可能的好方法是添加 xmpp.jid
和 xmpp.pass
,并更改机器人的昵称。
HipChat集成
- 创建一个新的管理员帐户并使用它登录 hipchat.com。
- 转到 {yoursite}.hipchat.com/account/xmpp
- 在此页面上使用机器人的配置文件中的 Jabber ID (jid) 和昵称。
- 启动 ChatBot。它应该连接到您的群组。
- 向 ChatBot 发送消息:
join room #room
。
用法
一旦配置了机器人,就可以使用 ./chatbot.php start
启动它。当机器人运行时,您可以通过运行 ./chatbot.php stop
来关闭它。很简单!
ChatBot 会相当积极地写入日志文件,默认情况下位于 log/chatbot.log
。日志会在 10mb 后自动轮换。仅保留一个先前的日志文件。
核心命令
ChatBot 有一个名为 base
的核心模块,其中包含他的“核心”命令。这些简化了模块的加载和卸载。
报告
挑战/响应方法用于测试连通性。
语法
chatbot report
响应
<your name>: 报告完毕,先生
列出模块
列出所有可用的模块。
如果行中指定了 active 或 enabled,则响应将仅限于启用的模块。
语法
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.