mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-27 09:21:35 +07:00
bluebubbles: honor reaction mention gating (#55283)
This commit is contained in:
@@ -1658,6 +1658,19 @@ export async function processReaction(
|
|||||||
const peerId = reaction.isGroup
|
const peerId = reaction.isGroup
|
||||||
? (chatGuid ?? chatIdentifier ?? (chatId ? String(chatId) : "group"))
|
? (chatGuid ?? chatIdentifier ?? (chatId ? String(chatId) : "group"))
|
||||||
: reaction.senderId;
|
: reaction.senderId;
|
||||||
|
const requireMention =
|
||||||
|
reaction.isGroup &&
|
||||||
|
core.channel.groups.resolveRequireMention({
|
||||||
|
cfg: config,
|
||||||
|
channel: "bluebubbles",
|
||||||
|
groupId: peerId,
|
||||||
|
accountId: account.accountId,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (requireMention) {
|
||||||
|
logVerbose(core, runtime, "bluebubbles: skipping group reaction (requireMention=true)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const route = core.channel.routing.resolveAgentRoute({
|
const route = core.channel.routing.resolveAgentRoute({
|
||||||
cfg: config,
|
cfg: config,
|
||||||
|
|||||||
@@ -1318,6 +1318,28 @@ describe("BlueBubbles webhook monitor", () => {
|
|||||||
expect(mockEnqueueSystemEvent).not.toHaveBeenCalled();
|
expect(mockEnqueueSystemEvent).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("skips group reactions when requireMention=true", async () => {
|
||||||
|
mockEnqueueSystemEvent.mockClear();
|
||||||
|
mockResolveRequireMention.mockReturnValue(true);
|
||||||
|
|
||||||
|
setupWebhookTarget({
|
||||||
|
account: createMockAccount({
|
||||||
|
groupPolicy: "open",
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const payload = createTimestampedMessageReactionPayloadForTest({
|
||||||
|
isGroup: true,
|
||||||
|
chatGuid: "iMessage;+;chat123456",
|
||||||
|
associatedMessageType: 2000,
|
||||||
|
handle: { address: "+15559999999" },
|
||||||
|
});
|
||||||
|
|
||||||
|
await dispatchWebhookPayload(payload);
|
||||||
|
|
||||||
|
expect(mockEnqueueSystemEvent).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
it("enqueues system event for reaction added", async () => {
|
it("enqueues system event for reaction added", async () => {
|
||||||
mockEnqueueSystemEvent.mockClear();
|
mockEnqueueSystemEvent.mockClear();
|
||||||
|
|
||||||
@@ -1335,6 +1357,31 @@ describe("BlueBubbles webhook monitor", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("enqueues group reactions when requireMention=false", async () => {
|
||||||
|
mockEnqueueSystemEvent.mockClear();
|
||||||
|
mockResolveRequireMention.mockReturnValue(false);
|
||||||
|
|
||||||
|
setupWebhookTarget({
|
||||||
|
account: createMockAccount({
|
||||||
|
groupPolicy: "open",
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const payload = createTimestampedMessageReactionPayloadForTest({
|
||||||
|
isGroup: true,
|
||||||
|
chatGuid: "iMessage;+;chat123456",
|
||||||
|
associatedMessageType: 2000,
|
||||||
|
handle: { address: "+15559999999" },
|
||||||
|
});
|
||||||
|
|
||||||
|
await dispatchWebhookPayload(payload);
|
||||||
|
|
||||||
|
expect(mockEnqueueSystemEvent).toHaveBeenCalledWith(
|
||||||
|
expect.stringContaining("reacted with ❤️ [[reply_to:"),
|
||||||
|
expect.any(Object),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("enqueues system event for reaction removed", async () => {
|
it("enqueues system event for reaction removed", async () => {
|
||||||
mockEnqueueSystemEvent.mockClear();
|
mockEnqueueSystemEvent.mockClear();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user