import { describe, expect, it } from "vitest"; import { hasControlCommand } from "./command-detection.js"; import { listChatCommands } from "./commands-registry.js"; import { parseActivationCommand } from "./group-activation.js"; import { parseSendPolicyCommand } from "./send-policy.js"; describe("control command parsing", () => { it("requires slash for send policy", () => { expect(parseSendPolicyCommand("/send on")).toEqual({ hasCommand: true, mode: "allow", }); expect(parseSendPolicyCommand("/send: on")).toEqual({ hasCommand: true, mode: "allow", }); expect(parseSendPolicyCommand("/send")).toEqual({ hasCommand: true }); expect(parseSendPolicyCommand("/send:")).toEqual({ hasCommand: true }); expect(parseSendPolicyCommand("send on")).toEqual({ hasCommand: false }); expect(parseSendPolicyCommand("send")).toEqual({ hasCommand: false }); }); it("requires slash for activation", () => { expect(parseActivationCommand("/activation mention")).toEqual({ hasCommand: true, mode: "mention", }); expect(parseActivationCommand("/activation: mention")).toEqual({ hasCommand: true, mode: "mention", }); expect(parseActivationCommand("/activation:")).toEqual({ hasCommand: true, }); expect(parseActivationCommand("activation mention")).toEqual({ hasCommand: false, }); }); it("treats bare commands as non-control", () => { expect(hasControlCommand("send")).toBe(false); expect(hasControlCommand("help")).toBe(false); expect(hasControlCommand("/commands")).toBe(true); expect(hasControlCommand("/commands:")).toBe(true); expect(hasControlCommand("commands")).toBe(false); expect(hasControlCommand("/status")).toBe(true); expect(hasControlCommand("/status:")).toBe(true); expect(hasControlCommand("status")).toBe(false); expect(hasControlCommand("usage")).toBe(false); for (const command of listChatCommands()) { for (const alias of command.textAliases) { expect(hasControlCommand(alias)).toBe(true); expect(hasControlCommand(`${alias}:`)).toBe(true); } } expect(hasControlCommand("/compact")).toBe(true); expect(hasControlCommand("/compact:")).toBe(true); expect(hasControlCommand("compact")).toBe(false); }); it("respects disabled config/debug commands", () => { const cfg = { commands: { config: false, debug: false } }; expect(hasControlCommand("/config show", cfg)).toBe(false); expect(hasControlCommand("/debug show", cfg)).toBe(false); }); it("requires commands to be the full message", () => { expect(hasControlCommand("hello /status")).toBe(false); expect(hasControlCommand("/status please")).toBe(false); expect(hasControlCommand("prefix /send on")).toBe(false); expect(hasControlCommand("/send on")).toBe(true); }); it("ignores telegram commands addressed to other bots", () => { expect( hasControlCommand("/help@otherbot", undefined, { botUsername: "clawdbot", }), ).toBe(false); expect( hasControlCommand("/help@clawdbot", undefined, { botUsername: "clawdbot", }), ).toBe(true); }); });