


























@@ -1,5 +1,4 @@
1-import { createRunStateMachine } from "openclaw/plugin-sdk/channel-lifecycle";
2-import { KeyedAsyncQueue } from "openclaw/plugin-sdk/keyed-async-queue";
1+import { createChannelRunQueue } from "openclaw/plugin-sdk/channel-lifecycle";
32import type { ClaimableDedupe } from "openclaw/plugin-sdk/persistent-dedupe";
43import { danger } from "openclaw/plugin-sdk/runtime-env";
54import {
@@ -77,39 +76,26 @@ async function processDiscordQueuedMessage(params: {
7776export function createDiscordMessageRunQueue(
7877params: DiscordMessageRunQueueParams,
7978): DiscordMessageRunQueue {
80-const runQueue = new KeyedAsyncQueue();
81-const runState = createRunStateMachine({
79+const replayGuard = params.replayGuard ?? createDiscordInboundReplayGuard();
80+const runQueue = createChannelRunQueue({
8281setStatus: params.setStatus,
8382abortSignal: params.abortSignal,
83+onError: (error) => {
84+params.runtime.error?.(danger(`discord message run failed: ${String(error)}`));
85+},
8486});
85-const replayGuard = params.replayGuard ?? createDiscordInboundReplayGuard();
86878788return {
8889enqueue(job) {
89-void runQueue
90-.enqueue(job.queueKey, async () => {
91-if (!runState.isActive()) {
92-return;
93-}
94-runState.onRunStart();
95-try {
96-if (!runState.isActive()) {
97-return;
98-}
99-await processDiscordQueuedMessage({
100- job,
101-lifecycleSignal: params.abortSignal,
102- replayGuard,
103-testing: params.__testing,
104-});
105-} finally {
106-runState.onRunEnd();
107-}
108-})
109-.catch((error) => {
110-params.runtime.error?.(danger(`discord message run failed: ${String(error)}`));
90+runQueue.enqueue(job.queueKey, async ({ lifecycleSignal }) => {
91+await processDiscordQueuedMessage({
92+ job,
93+ lifecycleSignal,
94+ replayGuard,
95+testing: params.__testing,
11196});
97+});
11298},
113-deactivate: runState.deactivate,
99+deactivate: runQueue.deactivate,
114100};
115101}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。