diff --git a/extensions/matrix/src/group-mentions.ts b/extensions/matrix/src/group-mentions.ts index dd8c2bb7e..8f36f6d95 100644 --- a/extensions/matrix/src/group-mentions.ts +++ b/extensions/matrix/src/group-mentions.ts @@ -3,29 +3,33 @@ import type { CoreConfig } from "./types.js"; import { resolveMatrixAccountConfig } from "./matrix/accounts.js"; import { resolveMatrixRoomConfig } from "./matrix/monitor/rooms.js"; -export function resolveMatrixGroupRequireMention(params: ChannelGroupContext): boolean { +function stripLeadingPrefixCaseInsensitive(value: string, prefix: string): string { + return value.toLowerCase().startsWith(prefix.toLowerCase()) + ? value.slice(prefix.length).trim() + : value; +} + +function resolveMatrixRoomConfigForGroup(params: ChannelGroupContext) { const rawGroupId = params.groupId?.trim() ?? ""; let roomId = rawGroupId; - const lower = roomId.toLowerCase(); - if (lower.startsWith("matrix:")) { - roomId = roomId.slice("matrix:".length).trim(); - } - if (roomId.toLowerCase().startsWith("channel:")) { - roomId = roomId.slice("channel:".length).trim(); - } - if (roomId.toLowerCase().startsWith("room:")) { - roomId = roomId.slice("room:".length).trim(); - } + roomId = stripLeadingPrefixCaseInsensitive(roomId, "matrix:"); + roomId = stripLeadingPrefixCaseInsensitive(roomId, "channel:"); + roomId = stripLeadingPrefixCaseInsensitive(roomId, "room:"); + const groupChannel = params.groupChannel?.trim() ?? ""; const aliases = groupChannel ? [groupChannel] : []; const cfg = params.cfg as CoreConfig; const matrixConfig = resolveMatrixAccountConfig({ cfg, accountId: params.accountId }); - const resolved = resolveMatrixRoomConfig({ + return resolveMatrixRoomConfig({ rooms: matrixConfig.groups ?? matrixConfig.rooms, roomId, aliases, name: groupChannel || undefined, }).config; +} + +export function resolveMatrixGroupRequireMention(params: ChannelGroupContext): boolean { + const resolved = resolveMatrixRoomConfigForGroup(params); if (resolved) { if (resolved.autoReply === true) { return false; @@ -43,27 +47,6 @@ export function resolveMatrixGroupRequireMention(params: ChannelGroupContext): b export function resolveMatrixGroupToolPolicy( params: ChannelGroupContext, ): GroupToolPolicyConfig | undefined { - const rawGroupId = params.groupId?.trim() ?? ""; - let roomId = rawGroupId; - const lower = roomId.toLowerCase(); - if (lower.startsWith("matrix:")) { - roomId = roomId.slice("matrix:".length).trim(); - } - if (roomId.toLowerCase().startsWith("channel:")) { - roomId = roomId.slice("channel:".length).trim(); - } - if (roomId.toLowerCase().startsWith("room:")) { - roomId = roomId.slice("room:".length).trim(); - } - const groupChannel = params.groupChannel?.trim() ?? ""; - const aliases = groupChannel ? [groupChannel] : []; - const cfg = params.cfg as CoreConfig; - const matrixConfig = resolveMatrixAccountConfig({ cfg, accountId: params.accountId }); - const resolved = resolveMatrixRoomConfig({ - rooms: matrixConfig.groups ?? matrixConfig.rooms, - roomId, - aliases, - name: groupChannel || undefined, - }).config; + const resolved = resolveMatrixRoomConfigForGroup(params); return resolved?.tools; }