qq-official-bot
Version:
266 lines (265 loc) • 10.8 kB
JavaScript
;
/**
* 新的类继承接收器架构使用示例
* 展示如何使用重构后的接收器系统
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.runAllExamples = runAllExamples;
const qqBot_1 = require("../../qqBot");
const receiver_1 = require("../../receiver");
const ModernSessionManager_1 = require("../ModernSessionManager");
// ============================================================================
// 示例1: 使用新的WebSocket接收器
// ============================================================================
async function exampleWebSocketReceiver() {
console.log('=== WebSocket接收器示例 ===');
// 创建WebSocket接收器配置
const wsConfig = receiver_1.ReceiverConfigBuilder.websocket({
heartbeatInterval: 30000, // 30秒心跳
maxRetries: 5, // 最大重试5次
reconnectDelay: 2000 // 重连延迟2秒
});
// 创建WebSocket接收器
const wsReceiver = receiver_1.ReceiverFactory.createWebSocketReceiver(wsConfig);
// 监听接收器事件
wsReceiver.on('ready', () => {
console.log('WebSocket接收器已就绪');
});
wsReceiver.on('packet', (packet) => {
console.log('收到数据包:', packet.t);
});
wsReceiver.on('error', (error) => {
console.error('WebSocket接收器错误:', error.message);
});
wsReceiver.on('close', (code, reason) => {
console.log(`WebSocket接收器关闭: ${code} - ${reason}`);
});
// 健康检查
const health = wsReceiver.healthCheck();
console.log('WebSocket接收器健康状态:', health);
// 获取配置信息
const config = wsReceiver.getConfig();
console.log('WebSocket接收器配置:', config);
}
// ============================================================================
// 示例2: 使用新的Webhook接收器
// ============================================================================
async function exampleWebhookReceiver() {
console.log('=== Webhook接收器示例 ===');
// 创建Webhook接收器配置
const webhookConfig = receiver_1.ReceiverConfigBuilder.webhook({
port: 3000,
path: '/qq-webhook',
timeout: 30000
});
// 创建Webhook接收器
const webhookReceiver = receiver_1.ReceiverFactory.createWebhookReceiver(webhookConfig);
// 监听接收器事件
webhookReceiver.on('ready', () => {
console.log('Webhook接收器已启动,监听端口3000');
});
webhookReceiver.on('packet', (packet) => {
console.log('收到Webhook事件:', packet.t);
});
webhookReceiver.on('error', (error) => {
console.error('Webhook接收器错误:', error.message);
});
// 模拟启动(需要实际的session实例)
// await webhookReceiver.start(sessionManager);
console.log('Webhook接收器类型:', webhookReceiver.getType());
console.log('Webhook接收器配置:', webhookReceiver.getConfig());
}
// ============================================================================
// 示例3: 使用新的Middleware接收器
// ============================================================================
async function exampleMiddlewareReceiver() {
console.log('=== Middleware接收器示例 ===');
// 创建Express Middleware接收器配置
const middlewareConfig = receiver_1.ReceiverConfigBuilder.middleware({
platform: 'express',
timeout: 30000
});
// 创建Middleware接收器
const middlewareReceiver = receiver_1.ReceiverFactory.createMiddlewareReceiver(middlewareConfig);
// 监听接收器事件
middlewareReceiver.on('ready', () => {
console.log('Middleware接收器已就绪');
});
middlewareReceiver.on('packet', (packet) => {
console.log('收到中间件事件:', packet.t);
});
// 获取中间件函数(用于Express应用)
// const middleware = middlewareReceiver.getMiddleware();
// app.use('/webhook', middleware);
console.log('Middleware接收器类型:', middlewareReceiver.getType());
console.log('Middleware接收器配置:', middlewareReceiver.getConfig());
}
// ============================================================================
// 示例4: 使用现代化会话管理器
// ============================================================================
async function exampleModernSessionManager() {
console.log('=== 现代化会话管理器示例 ===');
// 创建Bot实例(WebSocket模式)
const bot = new qqBot_1.QQBot({
appid: 'your_app_id',
secret: 'your_secret',
mode: 'websocket'
});
// 创建现代化会话管理器
const modernSession = new ModernSessionManager_1.ModernSessionManager(bot);
// 监听会话事件
modernSession.on('ready', () => {
console.log('现代化会话管理器已就绪');
});
modernSession.on('error', (error) => {
console.error('会话管理器错误:', error);
});
modernSession.on('close', (code, reason) => {
console.log(`会话关闭: ${code} - ${reason}`);
});
// 启动会话管理器
try {
await modernSession.start();
console.log('会话管理器启动成功');
// 获取接收器健康状态
const health = modernSession.getReceiverHealth();
console.log('接收器健康状态:', health);
// 获取接收器配置
const config = modernSession.getReceiverConfig();
console.log('接收器配置:', config);
}
catch (error) {
console.error('会话管理器启动失败:', error);
}
}
// ============================================================================
// 示例5: 使用接收器管理器
// ============================================================================
async function exampleReceiverManager() {
console.log('=== 接收器管理器示例 ===');
const manager = ModernSessionManager_1.ReceiverManager.getInstance();
// 创建多个接收器
const wsReceiver = receiver_1.ReceiverFactory.createWebSocketReceiver();
const webhookReceiver = receiver_1.ReceiverFactory.createWebhookReceiver(receiver_1.ReceiverConfigBuilder.webhook({ port: 3000, path: '/webhook' }));
// 注册接收器
manager.registerReceiver('main-websocket', wsReceiver);
manager.registerReceiver('backup-webhook', webhookReceiver);
// 获取所有接收器的健康状态
const allHealth = manager.getAllHealthStatus();
console.log('所有接收器健康状态:', allHealth);
// 获取所有接收器的配置
const allConfigs = manager.getAllConfigs();
console.log('所有接收器配置:', allConfigs);
// 获取特定接收器
const mainReceiver = manager.getReceiver('main-websocket');
if (mainReceiver) {
console.log('主WebSocket接收器类型:', mainReceiver.getType());
}
}
// ============================================================================
// 示例6: 接收器继承和扩展
// ============================================================================
// 自定义WebSocket接收器,扩展基础功能
class CustomWebSocketReceiver extends receiver_1.WebSocketReceiver {
constructor() {
super(...arguments);
this.messageCount = 0;
}
handlePacket(packet) {
super.handlePacket(packet);
this.messageCount++;
console.log(`已处理 ${this.messageCount} 条消息`);
}
getMessageCount() {
return this.messageCount;
}
// 重写健康检查,添加自定义信息
healthCheck() {
const baseHealth = super.healthCheck();
return {
...baseHealth,
details: {
...baseHealth.details,
messageCount: this.messageCount,
customFeature: 'enabled'
}
};
}
}
async function exampleCustomReceiver() {
console.log('=== 自定义接收器示例 ===');
const customReceiver = new CustomWebSocketReceiver();
// 使用自定义功能
console.log('消息计数:', customReceiver.getMessageCount());
// 健康检查包含自定义信息
const health = customReceiver.healthCheck();
console.log('自定义接收器健康状态:', health);
}
// ============================================================================
// 示例7: 错误处理和重连策略
// ============================================================================
async function exampleErrorHandling() {
console.log('=== 错误处理示例 ===');
// 创建带有自定义重连策略的WebSocket接收器
const wsConfig = receiver_1.ReceiverConfigBuilder.websocket({
heartbeatInterval: 30000,
maxRetries: 3,
reconnectDelay: 5000
});
const wsReceiver = receiver_1.ReceiverFactory.createWebSocketReceiver(wsConfig);
// 设置错误处理
wsReceiver.on('error', (error) => {
console.error('接收器错误:', error.message);
// 可以实现自定义错误处理逻辑
if (error.message.includes('网络')) {
console.log('检测到网络错误,将采用备用连接策略');
}
});
wsReceiver.on('close', (code, reason) => {
console.log(`连接关闭: ${code} - ${reason}`);
// 根据关闭代码决定是否重连
if (code && code < 4000) {
console.log('正常关闭,无需重连');
}
else {
console.log('异常关闭,将自动重连');
}
});
// 定期健康检查
setInterval(() => {
const health = wsReceiver.healthCheck();
if (health.status === 'unhealthy') {
console.warn('接收器健康状态异常:', health.details);
}
}, 60000); // 每分钟检查一次
}
// ============================================================================
// 运行所有示例
// ============================================================================
async function runAllExamples() {
console.log('开始运行接收器架构示例...\n');
try {
await exampleWebSocketReceiver();
console.log();
await exampleWebhookReceiver();
console.log();
await exampleMiddlewareReceiver();
console.log();
await exampleModernSessionManager();
console.log();
await exampleReceiverManager();
console.log();
await exampleCustomReceiver();
console.log();
await exampleErrorHandling();
console.log();
console.log('所有示例运行完成!');
}
catch (error) {
console.error('运行示例时出错:', error);
}
}
// 如果直接运行此文件
if (require.main === module) {
runAllExamples();
}