export type ParsedTelegramTopicConversation = {
chatId: string;
topicId: string;
canonicalConversationId: string;
};
function buildTelegramTopicConversationId(params: {
chatId: string;
topicId: string;
}): string | null {
const chatId = params.chatId.trim();
const topicId = params.topicId.trim();
if (!/^-?\d+$/.test(chatId) || !/^\d+$/.test(topicId)) {
return null ;
}
return `${chatId}:topic:${topicId}`;
}
export function parseTelegramTopicConversation(params: {
conversationId: string;
parentConversationId?: string;
}): ParsedTelegramTopicConversation | null {
const conversation = params.conversationId.trim();
const directMatch = conversation.match(/^(-?\d+):topic:(\d+)$/i);
if (directMatch?.[1 ] && directMatch[2 ]) {
const canonicalConversationId = buildTelegramTopicConversationId({
chatId: directMatch[1 ],
topicId: directMatch[2 ],
});
if (!canonicalConversationId) {
return null ;
}
return {
chatId: directMatch[1 ],
topicId: directMatch[2 ],
canonicalConversationId,
};
}
if (!/^\d+$/.test(conversation)) {
return null ;
}
const parent = params.parentConversationId?.trim();
if (!parent || !/^-?\d+$/.test(parent)) {
return null ;
}
const canonicalConversationId = buildTelegramTopicConversationId({
chatId: parent,
topicId: conversation,
});
if (!canonicalConversationId) {
return null ;
}
return {
chatId: parent,
topicId: conversation,
canonicalConversationId,
};
}
Messung V0.5 in Prozent C=99 H=99 G=98
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-13)
¤
*© Formatika GbR, Deutschland