import {
normalizeLowercaseStringOrEmpty,
normalizeOptionalLowercaseString,
} from "openclaw/plugin-sdk/text-runtime"; import { hasIrcControlChars } from "./control-chars.js"; import type { IrcInboundMessage } from "./types.js";
export function normalizeIrcMessagingTarget(raw: string): string | undefined { const trimmed = raw.trim(); if (!trimmed) { return undefined;
}
let target = trimmed; const lowered = normalizeLowercaseStringOrEmpty(target); if (lowered.startsWith("irc:")) {
target = target.slice("irc:".length).trim();
} if (normalizeLowercaseStringOrEmpty(target).startsWith("channel:")) {
target = target.slice("channel:".length).trim(); if (!target.startsWith("#") && !target.startsWith("&")) {
target = `#${target}`;
}
} if (normalizeLowercaseStringOrEmpty(target).startsWith("user:")) {
target = target.slice("user:".length).trim();
} if (!target || !looksLikeIrcTargetId(target)) { return undefined;
} return target;
}
export function looksLikeIrcTargetId(raw: string): boolean { const trimmed = raw.trim(); if (!trimmed) { returnfalse;
} if (hasIrcControlChars(trimmed)) { returnfalse;
} return IRC_TARGET_PATTERN.test(trimmed);
}
export function normalizeIrcAllowEntry(raw: string): string {
let value = normalizeLowercaseStringOrEmpty(raw); if (!value) { return"";
} if (value.startsWith("irc:")) {
value = value.slice("irc:".length);
} if (value.startsWith("user:")) {
value = value.slice("user:".length);
} return value.trim();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.