From b334cf63f557015ddfe7051c50601a800f4c92fc Mon Sep 17 00:00:00 2001 From: huntharo Date: Fri, 20 Mar 2026 18:53:55 -0400 Subject: [PATCH] Discord: resolve bind approvals in-place --- .../discord/src/monitor/agent-components.ts | 27 +++++++++---------- .../discord/src/monitor/monitor.test.ts | 12 +++++---- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/extensions/discord/src/monitor/agent-components.ts b/extensions/discord/src/monitor/agent-components.ts index 523740f99cb..3971009a05a 100644 --- a/extensions/discord/src/monitor/agent-components.ts +++ b/extensions/discord/src/monitor/agent-components.ts @@ -168,10 +168,11 @@ async function dispatchPluginDiscordInteractiveEvent(params: { decision: pluginBindingApproval.decision, senderId: params.interactionCtx.userId, }); - let cleared = false; try { - await respond.clearComponents(); - cleared = true; + await respond.clearComponents({ + text: buildPluginBindingResolvedText(resolved), + }); + return "handled"; } catch { try { await respond.acknowledge(); @@ -180,21 +181,19 @@ async function dispatchPluginDiscordInteractiveEvent(params: { } } try { - await respond.followUp({ + await respond.reply({ text: buildPluginBindingResolvedText(resolved), ephemeral: true, }); } catch (err) { - logError(`discord plugin binding approval: failed to follow up: ${String(err)}`); - if (!cleared) { - try { - await respond.reply({ - text: buildPluginBindingResolvedText(resolved), - ephemeral: true, - }); - } catch { - // Interaction may no longer accept a direct reply. - } + logError(`discord plugin binding approval: failed to reply: ${String(err)}`); + try { + await respond.followUp({ + text: buildPluginBindingResolvedText(resolved), + ephemeral: true, + }); + } catch { + // Interaction may no longer accept a follow-up. } } return "handled"; diff --git a/extensions/discord/src/monitor/monitor.test.ts b/extensions/discord/src/monitor/monitor.test.ts index 82b60f2d977..a7fedd731d3 100644 --- a/extensions/discord/src/monitor/monitor.test.ts +++ b/extensions/discord/src/monitor/monitor.test.ts @@ -918,11 +918,13 @@ describe("discord component interactions", () => { await button.run(interaction, { cid: "btn_1" } as ComponentData); - expect(update).toHaveBeenCalledWith({ components: [] }); - expect(followUp).toHaveBeenCalledWith({ - content: expect.stringContaining("bind approval"), - ephemeral: true, - }); + expect(update).toHaveBeenCalledWith( + expect.objectContaining({ + content: expect.any(String), + components: [], + }), + ); + expect(followUp).not.toHaveBeenCalled(); expect(dispatchReplyMock).not.toHaveBeenCalled(); }); });