@gguf/claw
Version:
Multi-channel AI gateway with extensible messaging integrations
140 lines (139 loc) • 5.66 kB
TypeScript
import type { Bot } from "grammy";
import { type HistoryEntry } from "../auto-reply/reply/history.js";
import type { MsgContext } from "../auto-reply/templating.js";
import { type StatusReactionController } from "../channels/status-reactions.js";
import type { OpenClawConfig } from "../config/config.js";
import type { DmPolicy, TelegramGroupConfig, TelegramTopicConfig } from "../config/types.js";
import type { StickerMetadata, TelegramContext } from "./bot/types.js";
export type TelegramMediaRef = {
path: string;
contentType?: string;
stickerMetadata?: StickerMetadata;
};
type TelegramMessageContextOptions = {
forceWasMentioned?: boolean;
messageIdOverride?: string;
};
type TelegramLogger = {
info: (obj: Record<string, unknown>, msg: string) => void;
};
type ResolveTelegramGroupConfig = (chatId: string | number, messageThreadId?: number) => {
groupConfig?: TelegramGroupConfig;
topicConfig?: TelegramTopicConfig;
};
type ResolveGroupActivation = (params: {
chatId: string | number;
agentId?: string;
messageThreadId?: number;
sessionKey?: string;
}) => boolean | undefined;
type ResolveGroupRequireMention = (chatId: string | number) => boolean;
export type BuildTelegramMessageContextParams = {
primaryCtx: TelegramContext;
allMedia: TelegramMediaRef[];
storeAllowFrom: string[];
options?: TelegramMessageContextOptions;
bot: Bot;
cfg: OpenClawConfig;
account: {
accountId: string;
};
historyLimit: number;
groupHistories: Map<string, HistoryEntry[]>;
dmPolicy: DmPolicy;
allowFrom?: Array<string | number>;
groupAllowFrom?: Array<string | number>;
ackReactionScope: "off" | "group-mentions" | "group-all" | "direct" | "all";
logger: TelegramLogger;
resolveGroupActivation: ResolveGroupActivation;
resolveGroupRequireMention: ResolveGroupRequireMention;
resolveTelegramGroupConfig: ResolveTelegramGroupConfig;
};
export declare const buildTelegramMessageContext: ({ primaryCtx, allMedia, storeAllowFrom, options, bot, cfg, account, historyLimit, groupHistories, dmPolicy, allowFrom, groupAllowFrom, ackReactionScope, logger, resolveGroupActivation, resolveGroupRequireMention, resolveTelegramGroupConfig, }: BuildTelegramMessageContextParams) => Promise<{
ctxPayload: {
CommandAuthorized: boolean;
MessageThreadId: number | undefined;
IsForum: boolean;
OriginatingChannel: "telegram";
OriginatingTo: string;
LocationLat?: number | undefined;
LocationLon?: number | undefined;
LocationAccuracy?: number;
LocationName?: string;
LocationAddress?: string;
LocationSource?: import("../channels/location.js").LocationSource | undefined;
LocationIsLive?: boolean | undefined;
Body: string;
BodyForAgent: string;
InboundHistory: {
sender: string;
body: string;
timestamp: number | undefined;
}[] | undefined;
RawBody: string;
CommandBody: string;
From: string;
To: string;
SessionKey: string;
AccountId: string;
ChatType: string;
ConversationLabel: string;
GroupSubject: string | undefined;
GroupSystemPrompt: string | undefined;
SenderName: string | undefined;
SenderId: string | undefined;
SenderUsername: string | undefined;
Provider: string;
Surface: string;
MessageSid: string;
ReplyToId: string | undefined;
ReplyToBody: string | undefined;
ReplyToSender: string | undefined;
ReplyToIsQuote: boolean | undefined;
ForwardedFrom: string | undefined;
ForwardedFromType: string | undefined;
ForwardedFromId: string | undefined;
ForwardedFromUsername: string | undefined;
ForwardedFromTitle: string | undefined;
ForwardedFromSignature: string | undefined;
ForwardedFromChatType: "group" | "channel" | "private" | "supergroup" | undefined;
ForwardedFromMessageId: number | undefined;
ForwardedDate: number | undefined;
Timestamp: number | undefined;
WasMentioned: boolean | undefined;
MediaPath: string | undefined;
MediaType: string | undefined;
MediaUrl: string | undefined;
MediaPaths: string[] | undefined;
MediaUrls: string[] | undefined;
MediaTypes: string[] | undefined;
Sticker: StickerMetadata | undefined;
} & Omit<MsgContext, "CommandAuthorized"> & {
CommandAuthorized: boolean;
};
primaryCtx: TelegramContext;
msg: import("@grammyjs/types").Message;
chatId: number;
isGroup: boolean;
resolvedThreadId: number | undefined;
threadSpec: import("./bot/helpers.js").TelegramThreadSpec;
replyThreadId: number | undefined;
isForum: boolean;
historyKey: string | undefined;
historyLimit: number;
groupHistories: Map<string, HistoryEntry[]>;
route: import("../routing/resolve-route.js").ResolvedAgentRoute;
skillFilter: string[] | undefined;
sendTyping: () => Promise<void>;
sendRecordVoice: () => Promise<void>;
ackReactionPromise: Promise<boolean> | null;
reactionApi: ((chatId: number | string, messageId: number, reactions: Array<{
type: "emoji";
emoji: string;
}>) => Promise<void>) | null;
removeAckAfterReply: boolean;
statusReactionController: StatusReactionController | null;
accountId: string;
} | null>;
export type TelegramMessageContext = NonNullable<Awaited<ReturnType<typeof buildTelegramMessageContext>>>;
export {};