refactor: reuse ack reaction helper for whatsapp
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { shouldAckReaction } from "./ack-reactions.js";
|
||||
import { shouldAckReaction, shouldAckReactionForWhatsApp } from "./ack-reactions.js";
|
||||
|
||||
describe("shouldAckReaction", () => {
|
||||
it("honors direct and group-all scopes", () => {
|
||||
@@ -132,3 +132,93 @@ describe("shouldAckReaction", () => {
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("shouldAckReactionForWhatsApp", () => {
|
||||
it("respects direct and group modes", () => {
|
||||
expect(
|
||||
shouldAckReactionForWhatsApp({
|
||||
emoji: "👀",
|
||||
isDirect: true,
|
||||
isGroup: false,
|
||||
directEnabled: true,
|
||||
groupMode: "mentions",
|
||||
wasMentioned: false,
|
||||
groupActivated: false,
|
||||
}),
|
||||
).toBe(true);
|
||||
|
||||
expect(
|
||||
shouldAckReactionForWhatsApp({
|
||||
emoji: "👀",
|
||||
isDirect: true,
|
||||
isGroup: false,
|
||||
directEnabled: false,
|
||||
groupMode: "mentions",
|
||||
wasMentioned: false,
|
||||
groupActivated: false,
|
||||
}),
|
||||
).toBe(false);
|
||||
|
||||
expect(
|
||||
shouldAckReactionForWhatsApp({
|
||||
emoji: "👀",
|
||||
isDirect: false,
|
||||
isGroup: true,
|
||||
directEnabled: true,
|
||||
groupMode: "always",
|
||||
wasMentioned: false,
|
||||
groupActivated: false,
|
||||
}),
|
||||
).toBe(true);
|
||||
|
||||
expect(
|
||||
shouldAckReactionForWhatsApp({
|
||||
emoji: "👀",
|
||||
isDirect: false,
|
||||
isGroup: true,
|
||||
directEnabled: true,
|
||||
groupMode: "never",
|
||||
wasMentioned: true,
|
||||
groupActivated: true,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("honors mentions or activation for group-mentions", () => {
|
||||
expect(
|
||||
shouldAckReactionForWhatsApp({
|
||||
emoji: "👀",
|
||||
isDirect: false,
|
||||
isGroup: true,
|
||||
directEnabled: true,
|
||||
groupMode: "mentions",
|
||||
wasMentioned: true,
|
||||
groupActivated: false,
|
||||
}),
|
||||
).toBe(true);
|
||||
|
||||
expect(
|
||||
shouldAckReactionForWhatsApp({
|
||||
emoji: "👀",
|
||||
isDirect: false,
|
||||
isGroup: true,
|
||||
directEnabled: true,
|
||||
groupMode: "mentions",
|
||||
wasMentioned: false,
|
||||
groupActivated: true,
|
||||
}),
|
||||
).toBe(true);
|
||||
|
||||
expect(
|
||||
shouldAckReactionForWhatsApp({
|
||||
emoji: "👀",
|
||||
isDirect: false,
|
||||
isGroup: true,
|
||||
directEnabled: true,
|
||||
groupMode: "mentions",
|
||||
wasMentioned: false,
|
||||
groupActivated: false,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
export type AckReactionScope = "all" | "direct" | "group-all" | "group-mentions" | "off" | "none";
|
||||
|
||||
export type WhatsAppAckReactionMode = "always" | "mentions" | "never";
|
||||
|
||||
export type AckReactionGateParams = {
|
||||
scope: AckReactionScope | undefined;
|
||||
isDirect: boolean;
|
||||
@@ -25,3 +27,29 @@ export function shouldAckReaction(params: AckReactionGateParams): boolean {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
export function shouldAckReactionForWhatsApp(params: {
|
||||
emoji: string;
|
||||
isDirect: boolean;
|
||||
isGroup: boolean;
|
||||
directEnabled: boolean;
|
||||
groupMode: WhatsAppAckReactionMode;
|
||||
wasMentioned: boolean;
|
||||
groupActivated: boolean;
|
||||
}): boolean {
|
||||
if (!params.emoji) return false;
|
||||
if (params.isDirect) return params.directEnabled;
|
||||
if (!params.isGroup) return false;
|
||||
if (params.groupMode === "never") return false;
|
||||
if (params.groupMode === "always") return true;
|
||||
return shouldAckReaction({
|
||||
scope: "group-mentions",
|
||||
isDirect: false,
|
||||
isGroup: true,
|
||||
isMentionableGroup: true,
|
||||
requireMention: true,
|
||||
canDetectMention: true,
|
||||
effectiveWasMentioned: params.wasMentioned,
|
||||
shouldBypassMention: params.groupActivated,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user