diff --git a/plugin/rules.ts b/plugin/rules.ts index 1a69b44..ca00593 100644 --- a/plugin/rules.ts +++ b/plugin/rules.ts @@ -43,7 +43,10 @@ function stripTrailingMetadata(input: string): string { function getLastChar(input: string): string { const t = stripTrailingMetadata(input).trim(); - return t.length ? t[t.length - 1] : ""; + if (!t.length) return ""; + // Use Array.from to handle multi-byte characters (emoji, surrogate pairs) + const chars = Array.from(t); + return chars[chars.length - 1] || ""; } export function resolvePolicy(config: WhisperGateConfig, channelId?: string, channelPolicies?: Record) {