mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-05-14 19:05:27 +00:00
8841c73fb2
ciBotCommand's regex was unanchored, so a customer message like "follow/read blog posts?" parsed as a /read command and the Grok handler silently dropped the message. Anchor the regex with ^ so a command requires `/` at the start of the (trimmed) message. In the support bot, filter customer command parsing by the registered keyword set: any unknown `/word` from a customer (e.g. /help) is now routed as plain text instead of being silently dropped by Grok. This also makes /grok when Grok is disabled behave consistently as text, removing the previous ad-hoc workaround.
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import {T} from "@simplex-chat/types"
|
|
import {ciBotCommand} from "../src/util"
|
|
|
|
function rcvText(text: string): T.ChatItem {
|
|
return {content: {type: "rcvMsgContent", msgContent: {type: "text", text}}} as T.ChatItem
|
|
}
|
|
|
|
describe("ciBotCommand", () => {
|
|
it("parses a command at the start of the message", () => {
|
|
expect(ciBotCommand(rcvText("/grok hello"))).toEqual({keyword: "grok", params: "hello"})
|
|
})
|
|
|
|
it("returns undefined for a slash in the middle of a word", () => {
|
|
expect(ciBotCommand(rcvText("What follow/read blog posts?"))).toBeUndefined()
|
|
})
|
|
|
|
it("returns undefined for a slash after a space", () => {
|
|
expect(ciBotCommand(rcvText("see /home for details"))).toBeUndefined()
|
|
})
|
|
|
|
it("strips leading whitespace before matching", () => {
|
|
expect(ciBotCommand(rcvText(" /grok ask this"))).toEqual({keyword: "grok", params: "ask this"})
|
|
})
|
|
|
|
it("returns command with empty params when only the keyword is present", () => {
|
|
expect(ciBotCommand(rcvText("/team"))).toEqual({keyword: "team", params: ""})
|
|
})
|
|
|
|
it("returns undefined for plain text without slash", () => {
|
|
expect(ciBotCommand(rcvText("hello there"))).toBeUndefined()
|
|
})
|
|
|
|
it("returns undefined for non-text chat item content", () => {
|
|
const ci = {content: {type: "rcvDeleted"}} as T.ChatItem
|
|
expect(ciBotCommand(ci)).toBeUndefined()
|
|
})
|
|
})
|