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

Function getWebPDimensions

yvlu/yvlu.ts:219–272  ·  view source on GitHub ↗
(imageBuffer: any)

Source from the content-addressed store, hash-verified

217
218 const mimeType = message.media.document?.mimeType;
219 const isTgsSticker = isSticker && mimeType === "application/x-tgsticker";
220 const isGifOrMp4 = mimeType === "video/mp4" || mimeType === "image/gif";
221
222 const buffer = await downloadMediaBuffer(client, message);
223 if (!Buffer.isBuffer(buffer)) return undefined;
224
225 let finalBuffer = buffer;
226 let finalMime = mimeType;
227
228 // Convert TGS to WebM
229 if (isTgsSticker || isTgsFormat(buffer)) {
230 try {
231 const depCheck = await checkTgsDependencies();
232 if (!depCheck.ok) console.error(`[yvlu] ${depCheck.message}`);
233 else {
234 console.log(`[yvlu] 检测到 TGS 贴纸,开始转换为 WebM...`);
235 finalBuffer = await convertTgsToWebm(buffer);
236 finalMime = "video/webm";
237 console.log(`[yvlu] TGS -> WebM 转换成功,大小: ${finalBuffer.length}`);
238 }
239 } catch (convertError) {
240 console.error(`[yvlu] TGS 转换失败:`, convertError);
241 }
242 } else if (isGifOrMp4 || isMp4Format(buffer)) {
243 try {
244 console.log(`[yvlu] 检测到 GIF/MP4,开始转换为 WebM...`);
245 finalBuffer = await convertMp4ToWebm(buffer);
246 finalMime = "video/webm";
247 console.log(`[yvlu] MP4 -> WebM 转换成功,大小: ${finalBuffer.length}`);
248 } catch (convertError) {
249 console.error(`[yvlu] MP4 转换失败:`, convertError);
250 }
251 }
252
253 const mime = finalMime || (mediaTypeForQuote === "sticker" ? "image/webp" : "image/jpeg");
254 console.log(`媒体下载: mimeType=${mimeType}, isTgs=${isTgsSticker}, isGif=${isGifOrMp4}, size=${finalBuffer.length}`);
255 return { buffer: finalBuffer, mime };
256}
257
258async function getPeerEntity(client: any, peer: any): Promise<any | undefined> {
259 if (!client || !peer) return undefined;
260 const key = JSON.stringify(peer, (_, v) => typeof v === "bigint" ? v.toString() : v);
261 try {
262 return await withTimeout(client.getEntity(peer), QUOTE_RPC_TIMEOUT_MS, "getPeerEntity.getEntity");
263 } catch (_) {
264 try {
265 return await withTimeout(client.getInputEntity(peer), QUOTE_RPC_TIMEOUT_MS, "getPeerEntity.getInputEntity");
266 } catch (_) {
267 return undefined;
268 }
269 }
270}
271
272async function ensureFullEntity(client: any, entity: any): Promise<any> {
273 if (!entity || !client) return entity;
274 // If entity has an id but no emojiStatus at all, it may be incomplete
275 if (entity.id && entity.emojiStatus === undefined && entity.emoji_status === undefined) {

Callers 1

YvluPluginClass · 0.85

Calls 2

isWebmFormatFunction · 0.85
warnMethod · 0.80

Tested by

no test coverage detected