mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-11 23:03:53 +08:00
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import type { Message } from "@grammyjs/types";
|
|
import { MediaFetchError } from "openclaw/plugin-sdk/media-runtime";
|
|
|
|
export const APPROVE_CALLBACK_DATA_RE =
|
|
/^\/approve(?:@[^\s]+)?\s+[A-Za-z0-9][A-Za-z0-9._:-]*\s+(allow-once|allow-always|deny)\b/i;
|
|
|
|
export function isMediaSizeLimitError(err: unknown): boolean {
|
|
const errMsg = String(err);
|
|
return errMsg.includes("exceeds") && errMsg.includes("MB limit");
|
|
}
|
|
|
|
export function isRecoverableMediaGroupError(err: unknown): boolean {
|
|
return err instanceof MediaFetchError || isMediaSizeLimitError(err);
|
|
}
|
|
|
|
export function hasInboundMedia(msg: Message): boolean {
|
|
return (
|
|
Boolean(msg.media_group_id) ||
|
|
(Array.isArray(msg.photo) && msg.photo.length > 0) ||
|
|
Boolean(msg.video ?? msg.video_note ?? msg.document ?? msg.audio ?? msg.voice ?? msg.sticker)
|
|
);
|
|
}
|
|
|
|
export function hasReplyTargetMedia(msg: Message): boolean {
|
|
const externalReply = (msg as Message & { external_reply?: Message }).external_reply;
|
|
const replyTarget = msg.reply_to_message ?? externalReply;
|
|
return Boolean(replyTarget && hasInboundMedia(replyTarget));
|
|
}
|
|
|
|
export function resolveInboundMediaFileId(msg: Message): string | undefined {
|
|
return (
|
|
msg.sticker?.file_id ??
|
|
msg.photo?.[msg.photo.length - 1]?.file_id ??
|
|
msg.video?.file_id ??
|
|
msg.video_note?.file_id ??
|
|
msg.document?.file_id ??
|
|
msg.audio?.file_id ??
|
|
msg.voice?.file_id
|
|
);
|
|
}
|