1.0.0-alpha-1 • Published 2 years ago
egg-duoxing-bot v1.0.0-alpha-1
egg-egg-duoxing-bot
多星机器人
socket 操作设计说明
Agent 端:
- 初始化时,执行登录操作,并将 authToken 下发给所有 worker 端
- 维护 authToken,快过期时刷新并同步给所有 worker 端
- 监听其它 ipc 消息,执行发 socket 的操作
- 当有 socket 回来时,分发给随机一个 worker 处理
Worker 端:
- 监听 agent 发过来的消息,调用对应的 listener
- 当需要发 socket 消息时,通过 ipc 调用通知 agent 端操作
Install
$ npm i egg-egg-duoxing-bot --save
Usage
发消息、调用接口
await app.duoxingClient.sendMsgToPerson('hi, this is send by bot', 'm3659N');
await app.duoxingClient.sendMsgToGroup('hi, this is send by bot', '73f9d78c-d5ce-17f2-bfe1-e1d30eb6a5f0');
收消息并做出响应
在 listener 目录中,继承 BaseListener 类,可实现监听指定的 action 的消息:
class HelloListener extends BaseListener {
/**
* 配置
*/
static get config() {
return {
// 监听的 action 列表
listenActions: ['userMessage'],
// 开关
disable: false,
};
}
/**
* 处理 action 的回调函数
*/
async handle(actionId, message) {
console.log('[HelloListener]', `handle actionId${actionId}, message: ${message}`);
const {fromUserId, fromUsername, toGroupId, messageContentType, messageContent} = message.data.params;
// 过滤自己的发言
if (fromUserId === this.duoxingClient.duoxingConfig.userId) {
return;
}
if (actionId === 'userMessage') {
await this.duoxingClient.sendMsgToPerson('hello world!', fromUserId);
}
}
}
当然你也可以监听其它事件,比如群组消息、上下线消息等等。
如果你的机器人只需要关心群组和个人消息,我们已经为你封装了一个类,即 BaseMessageListener:
class EchoListener extends BaseMessageListener {
/**
* 配置
*/
static get config() {
return {
// 监听的 action 列表
listenActions: super.config.listenActions,
// 开关
disable: false,
};
}
/**
* 回复用户消息,当收到 text 消息回复
*/
replyUser(messageContentType, messageContent, fromUserId, fromUsername) {
if (messageContentType !== 'text') {
return `你好呀,[${fromUsername}],暂无法处理 ${messageContentType} 类型的消息`;
}
return `你好呀,[${fromUsername}],你刚才发的消息是【${messageContent}】,机器人更多功能尽请期待~`;
}
/**
* 回复群组消息,当收到 text 消息,并包含 /hi 时做回复
*/
replyGroup(messageContentType, messageContent, fromUserId, fromUsername) {
if (messageContentType !== 'text') {
return;
}
if (messageContent.includes('/hi')) {
return `你好呀,[${fromUsername}],你刚才发的消息是【${messageContent}】,机器人更多功能尽请期待~`;
}
}
}
Configuration
// {app_root}/config/config.default.js
exports.duoxingBot = {
server: 'http://local1.duoxing.org:8082',
userId: '10001',
password: '123456',
};
see config/config.default.js for more detail.
Example
Questions & Suggestions
Please open an issue here.