mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-21 15:01:03 +00:00
92 lines
2.8 KiB
TypeScript
92 lines
2.8 KiB
TypeScript
import {
|
|
resolveChannelGroupRequireMention,
|
|
resolveChannelGroupToolsPolicy,
|
|
type GroupToolPolicyConfig,
|
|
} from "openclaw/plugin-sdk/channel-policy";
|
|
import { type ChannelGroupContext } from "openclaw/plugin-sdk/channel-runtime";
|
|
|
|
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;
|
|
}): boolean | undefined {
|
|
const { cfg, chatId, topicId } = params;
|
|
if (!chatId) {
|
|
return undefined;
|
|
}
|
|
const groupConfig = cfg.channels?.telegram?.groups?.[chatId];
|
|
const groupDefault = cfg.channels?.telegram?.groups?.["*"];
|
|
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,
|
|
});
|
|
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,
|
|
});
|
|
}
|