const { login, start } = require('weixin-agent-sdk'); const axios = require('axios'); const NANOBOT_BRIDGE_URL = process.env.NANOBOT_BRIDGE_URL || 'http://127.0.0.1:5000/chat'; const BASE_URL = NANOBOT_BRIDGE_URL.replace('/chat', ''); console.log('🔌 WeChat-Nanobot Bridge'); console.log(' 桥接地址:', NANOBOT_BRIDGE_URL); console.log(' 支持命令: /clear, /context, /reset, /stats'); // 命令处理 async function handleCommand(text, conversationId) { const cmd = text.trim().toLowerCase(); switch (cmd) { case '/clear': try { await axios.post(`${BASE_URL}/clear`, { conversationId }); return { text: '✅ 会话历史已清空' }; } catch (e) { return { text: '❌ 清空失败: ' + e.message }; } case '/context': case '/history': try { const res = await axios.post(`${BASE_URL}/context`, { conversationId }); const data = res.data; if (data.status === 'ok') { let msg = `📜 历史记录 (${data.message_count}条):\n`; data.history.slice(-5).forEach((h, i) => { const role = h.role === 'user' ? '👤' : '🤖'; msg += `${role} ${h.content.substring(0, 50)}${h.content.length > 50 ? '...' : ''}\n`; }); return { text: msg }; } } catch (e) { return { text: '❌ 获取历史失败: ' + e.message }; } case '/reset': try { await axios.post(`${BASE_URL}/reset`, { conversationId }); return { text: '✅ 会话已完全重置' }; } catch (e) { return { text: '❌ 重置失败: ' + e.message }; } case '/stats': case '/status': try { const res = await axios.get(`${BASE_URL}/stats`); const data = res.data; if (data.status === 'ok') { return { text: `📊 服务状态:\n会话数: ${data.stats.total_sessions}\n消息数: ${data.stats.total_messages}` }; } } catch (e) { return { text: '❌ 获取状态失败: ' + e.message }; } case '/help': case '/?': return { text: `🤖 可用命令: /clear - 清空当前会话历史 /context - 查看会话历史 /reset - 完全重置会话 /stats - 查看服务统计 /help - 显示此帮助` }; default: return null; // 不是命令,继续正常处理 } } const agent = { async chat(request) { try { const { conversationId, text, media } = request; console.log(`\n📨 [${conversationId}] ${text.substring(0, 50)}...`); // 检查是否是命令 const cmdResult = await handleCommand(text, conversationId); if (cmdResult) { console.log(`📤 命令回复: ${cmdResult.text.substring(0, 50)}...`); return cmdResult; } // 正常消息处理 const response = await axios.post(NANOBOT_BRIDGE_URL, { conversationId, text, media }, { timeout: 70000 }); console.log(`📤 回复: ${response.data.text.substring(0, 50)}...`); return { text: response.data.text, media: response.data.media }; } catch (error) { console.error('❌ 错误:', error.message); return { text: '服务暂时不可用,请稍后再试' }; } } }; (async () => { console.log('\n📱 准备登录微信...'); console.log(' 请扫描屏幕上显示的二维码'); console.log(''); await login(); console.log('✅ 登录成功!'); console.log('🚀 启动消息处理...\n'); await start(agent); })();