Files
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

121 lines
3.5 KiB
JavaScript

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);
})();