mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-27 01:11:16 +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
|
||||
? (chatGuid ?? chatIdentifier ?? (chatId ? String(chatId) : "group"))
|
||||
: 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({
|
||||
cfg: config,
|
||||
|
||||
@@ -1318,6 +1318,28 @@ describe("BlueBubbles webhook monitor", () => {
|
||||
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 () => {
|
||||
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 () => {
|
||||
mockEnqueueSystemEvent.mockClear();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user