






















@@ -1,4 +1,5 @@
11import type { ChannelGatewayContext } from "openclaw/plugin-sdk/channel-contract";
2+import type { RawData } from "ws";
23import { resolveClickClackAccount } from "./accounts.js";
34import { createClickClackClient } from "./http-client.js";
45import { handleClickClackInbound } from "./inbound.js";
@@ -20,7 +21,9 @@ async function resolveEventMessage(params: {
2021event: ClickClackEvent;
2122}): Promise<ClickClackMessage | null> {
2223const messageId = payloadString(params.event, "message_id");
23-if (!messageId) return null;
24+if (!messageId) {
25+return null;
26+}
2427const directConversationId = payloadString(params.event, "direct_conversation_id");
2528if (directConversationId && typeof params.event.seq === "number") {
2629const messages = await params.client.directMessages(
@@ -32,7 +35,9 @@ async function resolveEventMessage(params: {
3235}
3336if (params.event.type === "thread.reply_created") {
3437const rootId = payloadString(params.event, "root_message_id");
35-if (!rootId) return null;
38+if (!rootId) {
39+return null;
40+}
3641const thread = await params.client.thread(rootId);
3742return thread.replies.find((message) => message.id === messageId) ?? null;
3843}
@@ -47,6 +52,19 @@ async function resolveEventMessage(params: {
4752return null;
4853}
495455+function decodeSocketMessage(data: RawData): string {
56+if (typeof data === "string") {
57+return data;
58+}
59+if (Buffer.isBuffer(data)) {
60+return data.toString("utf8");
61+}
62+if (data instanceof ArrayBuffer) {
63+return Buffer.from(data).toString("utf8");
64+}
65+return Buffer.concat(data).toString("utf8");
66+}
67+5068async function processEvent(params: {
5169account: ResolvedClickClackAccount;
5270config: CoreConfig;
@@ -128,7 +146,7 @@ export async function startClickClackGatewayAccount(
128146ctx.abortSignal.addEventListener("abort", abort, { once: true });
129147socket.on("message", (data) => {
130148void (async () => {
131-const event = JSON.parse(String(data)) as ClickClackEvent;
149+const event = JSON.parse(decodeSocketMessage(data)) as ClickClackEvent;
132150afterCursor = event.cursor || afterCursor;
133151await processEvent({
134152 account,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。