MCPcopy Create free account
hub / github.com/TeleBoxOrg/TeleBox_Plugins / extractMediaInfo

Method extractMediaInfo

xmsl/xmsl.ts:285–389  ·  view source on GitHub ↗

* 从消息中提取媒体信息

(message: Api.Message)

Source from the content-addressed store, hash-verified

283
284 try {
285 // 处理图片
286 if (message.media instanceof Api.MessageMediaPhoto) {
287 const buffer = await client.downloadMedia(message.media, {});
288 if (buffer && Buffer.isBuffer(buffer)) {
289 const detectedMime = detectImageMime(buffer);
290 if (detectedMime) {
291 return {
292 base64: buffer.toString('base64'),
293 mimeType: detectedMime,
294 mediaType: 'photo',
295 };
296 }
297 }
298 }
299
300 // 处理文档类型(贴纸、图片文件等)
301 if (message.media instanceof Api.MessageMediaDocument) {
302 const doc = message.media.document;
303 if (!(doc instanceof Api.Document)) return null;
304
305 const mimeType = doc.mimeType || '';
306
307 // 检测是否为贴纸
308 const isSticker = doc.attributes?.some(
309 (a: any) => a instanceof Api.DocumentAttributeSticker
310 );
311
312 // TGS 动态贴纸 - 尝试渲染第一帧
313 if (mimeType === TGS_MIME) {
314 const buffer = await client.downloadMedia(message.media, {});
315 if (buffer && Buffer.isBuffer(buffer)) {
316 const pngBuffer = await extractTgsFirstFrame(buffer);
317 if (pngBuffer) {
318 return {
319 base64: pngBuffer.toString('base64'),
320 mimeType: 'image/png',
321 mediaType: 'sticker',
322 isAnimated: true,
323 };
324 }
325 }
326 return null;
327 }
328
329 // 视频贴纸 (WebM) - 提取第一帧
330 if (mimeType === WEBM_MIME) {
331 const buffer = await client.downloadMedia(message.media, {});
332 if (buffer && Buffer.isBuffer(buffer)) {
333 const pngBuffer = await extractWebmFirstFrame(buffer);
334 if (pngBuffer) {
335 return {
336 base64: pngBuffer.toString('base64'),
337 mimeType: 'image/png',
338 mediaType: 'sticker',
339 isAnimated: true,
340 };
341 }
342 }

Callers 1

handleXmslMethod · 0.95

Calls 5

detectImageMimeFunction · 0.85
extractTgsFirstFrameFunction · 0.85
extractWebmFirstFrameFunction · 0.85
errorMethod · 0.80
downloadMediaMethod · 0.45

Tested by

no test coverage detected