添加ws接口:获取群聊信息

This commit is contained in:
Jerry 2025-05-03 10:30:20 +08:00
parent 893387951a
commit fd360ed29c
3 changed files with 68 additions and 0 deletions

View File

@ -2,6 +2,10 @@ import wsClient from '../../models/ws/wsClient.js';
import configControl from '../config/configControl.js';
const botControl = {
/**
* 获取全部bot信息并同步到core
* @returns {Promise<boolean>}
*/
async reportBots() {
const bots = [{ client: configControl.get('coreConfig').wsClientId }];
@ -33,6 +37,33 @@ const botControl = {
return await wsClient.sendMessage(message);
},
/**
* 获取群聊信息
* @param botUin
* @param groupId
* @returns {Promise<*|null>}
*/
async getGroupInfo(botUin, groupId) {
const bot = Bot[botUin];
if (!bot) {
logger.warn(`未找到bot: ${botUin}`);
return null;
}
const group = bot.pickGroup(groupId);
if (!group || typeof group.getInfo !== 'function') {
logger.warn(`Bot ${botUin}中未找到群${groupId}`);
return null;
}
try {
return await group.getInfo();
} catch (e) {
logger.error(`获取群聊信息失败:${groupId}..`);
return null;
}
},
};
export default botControl;

View File

@ -1,3 +1,6 @@
import botControl from '../../lib/core/botControl.js';
import wsClient from './wsClient.js';
class Handler {
constructor() {
this.handlers = new Map([
@ -5,6 +8,7 @@ class Handler {
['ping', this.handlePing.bind(this)],
['message', this.handleMessageFromServer.bind(this)],
['error', this.handleError.bind(this)],
['getGroupInfo', this.handleGetGroupInfo.bind(this)],
]);
}
@ -37,6 +41,34 @@ class Handler {
async handleError(client, msg) {
logger.warn(`crystelf WS 错误:${msg.data}`);
}
/*
获取群聊信息自动回调
@examples 请求示例
```json
{
requestId: 114514,
type: 'getGroupInfo',
data: {
botId: 114514,
groupId: 114514,
},
}
```
*/
async handleGetGroupInfo(client, msg) {
const requestId = msg?.requestId;
const botId = msg.data?.botId;
const groupId = msg.data?.groupId;
const type = msg.type + 'Return';
const groupData = await botControl.getGroupInfo(botId, groupId);
const returnData = {
type: type,
requestId: requestId,
data: groupData,
};
await wsClient.sendMessage(returnData);
}
}
const handler = new Handler();

View File

@ -63,6 +63,11 @@ class WsClient {
await this.sendMessage(authMsg);
}
/**
* 发送信息到ws服务端自动格式化
* @param msg
* @returns {Promise<boolean>}
*/
async sendMessage(msg) {
if (this.ws?.readyState === WebSocket.OPEN) {
this.ws.send(JSON.stringify(msg));