1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| export async function onRequest(context) { const { request, env, params } = context; const url = new URL(request.url);
let fileUrl = 'https://telegra.ph/' + url.pathname + url.search;
if (url.pathname.length > 39) { const fileId = url.pathname.split(".")[0].split("/")[2]; const filePath = await getFilePath(env, fileId); if (filePath) { fileUrl = `https://api.telegram.org/file/bot${env.TG_Bot_Token}/${filePath}`; } }
const response = await fetch(fileUrl, { method: request.method, headers: request.headers, body: request.body, });
if (!response.ok) return response;
const isAdmin = request.headers.get('Referer')?.includes(`${url.origin}/admin`); if (isAdmin) return forceImageInline(response, fileUrl);
if (!env.img_url) return forceImageInline(response, fileUrl);
let record = await env.img_url.getWithMetadata(params.id); if (!record || !record.metadata) { record = { metadata: { ListType: "None", Label: "None", TimeStamp: Date.now(), liked: false, fileName: params.id, fileSize: 0, } }; await env.img_url.put(params.id, "", { metadata: record.metadata }); }
const metadata = { ListType: record.metadata.ListType || "None", Label: record.metadata.Label || "None", TimeStamp: record.metadata.TimeStamp || Date.now(), liked: record.metadata.liked !== undefined ? record.metadata.liked : false, fileName: record.metadata.fileName || params.id, fileSize: record.metadata.fileSize || 0, };
if (metadata.ListType === "White") { return forceImageInline(response, fileUrl); }
if (metadata.ListType === "Block" || metadata.Label === "adult") { const referer = request.headers.get('Referer'); const redirectUrl = referer ? "https://static-res.pages.dev/teleimage/img-block-compressed.png" : `${url.origin}/block-img.html`; return Response.redirect(redirectUrl, 302); }
if (env.WhiteList_Mode === "true") { return Response.redirect(`${url.origin}/whitelist-on.html`, 302); }
if (env.ModerateContentApiKey) { try { const moderateUrl = `https://api.moderatecontent.com/moderate/?key=${env.ModerateContentApiKey}&url=https://telegra.ph${url.pathname}${url.search}`; const moderateResponse = await fetch(moderateUrl); if (moderateResponse.ok) { const moderateData = await moderateResponse.json(); if (moderateData?.rating_label) { metadata.Label = moderateData.rating_label; if (moderateData.rating_label === "adult") { await env.img_url.put(params.id, "", { metadata }); return Response.redirect(`${url.origin}/block-img.html`, 302); } } } } catch (error) { console.error("Moderation error:", error.message); } }
await env.img_url.put(params.id, "", { metadata });
return forceImageInline(response, fileUrl); }
function forceImageInline(originalResponse, fileUrl) { const newHeaders = new Headers(originalResponse.headers);
const lower = fileUrl.toLowerCase(); if (lower.endsWith(".jpg") || lower.endsWith(".jpeg")) newHeaders.set("Content-Type", "image/jpeg"); else if (lower.endsWith(".png")) newHeaders.set("Content-Type", "image/png"); else if (lower.endsWith(".gif")) newHeaders.set("Content-Type", "image/gif"); else if (lower.endsWith(".webp")) newHeaders.set("Content-Type", "image/webp"); else if (lower.endsWith(".bmp")) newHeaders.set("Content-Type", "image/bmp");
if (newHeaders.get("Content-Type")?.startsWith("image/")) { newHeaders.set("Content-Disposition", "inline"); }
return new Response(originalResponse.body, { status: originalResponse.status, statusText: originalResponse.statusText, headers: newHeaders }); }
async function getFilePath(env, file_id) { try { const res = await fetch(`https://api.telegram.org/bot${env.TG_Bot_Token}/getFile?file_id=${file_id}`, { method: 'GET' }); if (!res.ok) return null; const data = await res.json(); if (data.ok && data.result) return data.result.file_path; return null; } catch (error) { console.error("getFilePath error:", error.message); return null; } }
|