openclaw/extensions/qq/test-connection.ts
taki 9d036cae3a feat: add QQ channel plugin via NapCatQQ/OneBot v11
- Complete ChannelPlugin implementation for QQ messaging
- WebSocket client with auto-reconnect and heartbeat
- Support private chat and group messages
- OneBot v11 API wrapper (send, receive, group management)
- Onboarding wizard for CLI configuration
- Multi-account support
- 156 unit tests (accounts, client, api, send, monitor, normalize, connection)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 16:38:24 +08:00

83 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* QQ Connection Test Script
*
* Tests connection to NapCat OneBot WebSocket server.
* Run with: npx tsx extensions/qq/test-connection.ts
*/
import WebSocket from "ws";
const WS_URL = "ws://127.0.0.1:3001";
console.log(`\n🔌 Connecting to NapCat at ${WS_URL}...\n`);
const ws = new WebSocket(WS_URL);
ws.on("open", () => {
console.log("✅ Connected to NapCat!\n");
// Request login info
const request = {
action: "get_login_info",
params: {},
echo: "test_login_info"
};
console.log("📤 Sending get_login_info request...");
ws.send(JSON.stringify(request));
});
ws.on("message", (data) => {
try {
const message = JSON.parse(data.toString());
// Check if it's our API response
if (message.echo === "test_login_info") {
if (message.status === "ok") {
console.log("\n✅ Login info received:");
console.log(` QQ号: ${message.data.user_id}`);
console.log(` 昵称: ${message.data.nickname}`);
} else {
console.log("\n❌ API call failed:", message.message || message.wording);
}
// Close connection after getting info
setTimeout(() => {
console.log("\n👋 Closing connection...");
ws.close();
}, 500);
return;
}
// It's an event
if (message.post_type === "message") {
const chatType = message.message_type === "group" ? "群聊" : "私聊";
const sender = message.sender?.nickname || message.user_id;
console.log(`\n📨 收到${chatType}消息 [${sender}]: ${message.raw_message?.slice(0, 50)}...`);
} else if (message.post_type === "meta_event" && message.meta_event_type === "heartbeat") {
console.log("💓 Heartbeat");
} else if (message.post_type === "meta_event" && message.meta_event_type === "lifecycle") {
console.log(`🔄 Lifecycle event: ${message.sub_type}`);
}
} catch (err) {
console.log("⚠️ Failed to parse message:", data.toString().slice(0, 100));
}
});
ws.on("error", (error) => {
console.error("\n❌ Connection error:", error.message);
console.log("\n提示: 请确保 NapCat 已启动且 WebSocket 服务器已配置在端口 3001");
process.exit(1);
});
ws.on("close", (code, reason) => {
console.log(`\n🔌 Connection closed (code: ${code})`);
process.exit(0);
});
// Timeout after 10 seconds
setTimeout(() => {
console.log("\n⏱ Timeout - closing connection");
ws.close();
}, 10000);