import type { ChannelGroupContext } from "openclaw/plugin-sdk/channel-contract" ;
import {
resolveChannelGroupRequireMention,
resolveChannelGroupToolsPolicy,
type GroupToolPolicyConfig,
} from "openclaw/plugin-sdk/channel-policy" ;
function parseTelegramGroupId(value?: string | null ) {
const raw = value?.trim() ?? "" ;
if (!raw) {
return { chatId: undefined, topicId: undefined };
}
const parts = raw.split(":" ).filter(Boolean );
if (
parts.length >= 3 &&
parts[1 ] === "topic" &&
/^-?\d+$/.test(parts[0 ]) &&
/^\d+$/.test(parts[2 ])
) {
return { chatId: parts[0 ], topicId: parts[2 ] };
}
if (parts.length >= 2 && /^-?\d+$/.test(parts[0 ]) && /^\d+$/.test(parts[1 ])) {
return { chatId: parts[0 ], topicId: parts[1 ] };
}
return { chatId: raw, topicId: undefined };
}
function resolveTelegramRequireMention(params: {
cfg: ChannelGroupContext["cfg" ];
chatId?: string;
topicId?: string;
accountId?: string | null ;
}): boolean | undefined {
const { cfg, chatId, topicId, accountId } = params;
if (!chatId) {
return undefined;
}
const scopedGroups =
(accountId ? cfg.channels?.telegram?.accounts?.[accountId]?.groups : undefined) ??
cfg.channels?.telegram?.groups;
const groupConfig = scopedGroups?.[chatId];
const groupDefault = scopedGroups?.["*" ];
const topicConfig = topicId && groupConfig?.topics ? groupConfig.topics[topicId] : undefined;
const defaultTopicConfig =
topicId && groupDefault?.topics ? groupDefault.topics[topicId] : undefined;
if (typeof topicConfig?.requireMention === "boolean" ) {
return topicConfig.requireMention;
}
if (typeof defaultTopicConfig?.requireMention === "boolean" ) {
return defaultTopicConfig.requireMention;
}
if (typeof groupConfig?.requireMention === "boolean" ) {
return groupConfig.requireMention;
}
if (typeof groupDefault?.requireMention === "boolean" ) {
return groupDefault.requireMention;
}
return undefined;
}
export function resolveTelegramGroupRequireMention(
params: ChannelGroupContext,
): boolean | undefined {
const { chatId, topicId } = parseTelegramGroupId(params.groupId);
const requireMention = resolveTelegramRequireMention({
cfg: params.cfg,
chatId,
topicId,
accountId: params.accountId,
});
if (typeof requireMention === "boolean" ) {
return requireMention;
}
return resolveChannelGroupRequireMention({
cfg: params.cfg,
channel: "telegram" ,
groupId: chatId ?? params.groupId,
accountId: params.accountId,
});
}
export function resolveTelegramGroupToolPolicy(
params: ChannelGroupContext,
): GroupToolPolicyConfig | undefined {
const { chatId } = parseTelegramGroupId(params.groupId);
return resolveChannelGroupToolsPolicy({
cfg: params.cfg,
channel: "telegram" ,
groupId: chatId ?? params.groupId,
accountId: params.accountId,
senderId: params.senderId,
senderName: params.senderName,
senderUsername: params.senderUsername,
senderE164: params.senderE164,
});
}
Messung V0.5 in Prozent C=100 H=96 G=97
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-13)
¤
*© Formatika GbR, Deutschland