Slack: support blocks in plugin edit action

This commit is contained in:
Colin
2026-02-16 12:20:09 -05:00
committed by Peter Steinberger
parent 3912a2264b
commit 378e18b75b
2 changed files with 78 additions and 2 deletions

View File

@@ -593,4 +593,75 @@ describe("slack actions adapter", () => {
).rejects.toThrow(/blocks must be valid JSON/i);
expect(handleSlackAction).not.toHaveBeenCalled();
});
it("forwards blocks JSON for edit", async () => {
const cfg = { channels: { slack: { botToken: "tok" } } } as OpenClawConfig;
const actions = createSlackActions("slack");
await actions.handleAction?.({
channel: "slack",
action: "edit",
cfg,
params: {
channelId: "C1",
messageId: "171234.567",
message: "",
blocks: JSON.stringify([{ type: "divider" }]),
},
});
const [params] = handleSlackAction.mock.calls[0] ?? [];
expect(params).toMatchObject({
action: "editMessage",
channelId: "C1",
messageId: "171234.567",
content: "",
blocks: [{ type: "divider" }],
});
});
it("forwards blocks arrays for edit", async () => {
const cfg = { channels: { slack: { botToken: "tok" } } } as OpenClawConfig;
const actions = createSlackActions("slack");
await actions.handleAction?.({
channel: "slack",
action: "edit",
cfg,
params: {
channelId: "C1",
messageId: "171234.567",
message: "",
blocks: [{ type: "section", text: { type: "mrkdwn", text: "updated" } }],
},
});
const [params] = handleSlackAction.mock.calls[0] ?? [];
expect(params).toMatchObject({
action: "editMessage",
channelId: "C1",
messageId: "171234.567",
content: "",
blocks: [{ type: "section", text: { type: "mrkdwn", text: "updated" } }],
});
});
it("rejects edit when both message and blocks are missing", async () => {
const cfg = { channels: { slack: { botToken: "tok" } } } as OpenClawConfig;
const actions = createSlackActions("slack");
await expect(
actions.handleAction?.({
channel: "slack",
action: "edit",
cfg,
params: {
channelId: "C1",
messageId: "171234.567",
message: "",
},
}),
).rejects.toThrow(/edit requires message or blocks/i);
expect(handleSlackAction).not.toHaveBeenCalled();
});
});

View File

@@ -130,13 +130,18 @@ export async function handleSlackMessageAction(params: {
const messageId = readStringParam(actionParams, "messageId", {
required: true,
});
const content = readStringParam(actionParams, "message", { required: true });
const content = readStringParam(actionParams, "message", { allowEmpty: true });
const blocks = readSlackBlocksParam(actionParams);
if (!content && !blocks) {
throw new Error("Slack edit requires message or blocks.");
}
return await invoke(
{
action: "editMessage",
channelId: resolveChannelId(),
messageId,
content,
content: content ?? "",
blocks,
accountId,
},
cfg,