notmebotz-tools
Version:
Sebuah Tools yang berfungsi untuk mendownload Video atau Foto dari media sosial, serta sebagai tools yang berguna untuk aplikasi kamu seperti untuk BOT
142 lines (129 loc) • 4.08 kB
JavaScript
const axios = require('axios');
const crypto = require('crypto');
/* IG DOWNLOADER
BY HERZA
THANKS TO *NB SCRIPT*
https://whatsapp.com/channel/0029Vb5EZCjIiRotHCI1213L
Join My Channel Please
https://whatsapp.com/channel/0029VaGVOvq1iUxY6WgHLv2R
FOR THE SIGNATURE KEY
BASE *https://igram.world*
Follow my github please
https://github.com/herzonly
DONT DELETE WM PLEASE
*/
const IGRAM_BASE_URL = 'https://api.igram.world';
const SECRET_KEY = '40a71e771b673e3a35200acdd331bbd616fc4ba76c6d77d821a25985e46fb488';
const TIMESTAMP = 1739185248317;
const headers = {
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Origin': 'https://igram.world',
'Referer': 'https://igram.world/'
};
async function getServerTime() {
try {
const response = await axios.get(`${IGRAM_BASE_URL}/msec`, { headers });
return Math.floor(response.data.msec * 1000);
} catch (error) {
return 0;
}
}
function generateSignature(url, timestamp) {
const hash = `${url}${timestamp}${SECRET_KEY}`;
return crypto.createHash('sha256').update(hash).digest('hex');
}
async function igdl(url) {
try {
const serverTime = await getServerTime();
const currentTime = Date.now();
const adjustedTime = serverTime ? serverTime : currentTime;
const timeOffset = serverTime ? currentTime - serverTime : 0;
const signature = generateSignature(url, adjustedTime);
const requestBody = {
url: url,
ts: adjustedTime,
_ts: TIMESTAMP,
_tsc: timeOffset,
_s: signature
};
const response = await axios.post(
`${IGRAM_BASE_URL}/api/convert`,
requestBody,
{ headers }
);
const data = response.data;
if (Array.isArray(data)) {
return {
author: "Herza",
status: 200,
data: {
success: true,
type: "slide",
slides: data.map(slide => ({
mediaUrls: slide.url ? slide.url.map(media => ({
url: media.url,
type: media.type,
name: media.name,
ext: media.ext
})) : [],
thumbnailUrl: slide.thumb || null
})),
metadata: {
title: data[0]?.meta?.title || null,
source: data[0]?.meta?.source || null,
shortcode: data[0]?.meta?.shortcode || null,
username: data[0]?.meta?.username || null,
takenAt: data[0]?.meta?.taken_at || null,
likeCount: data[0]?.meta?.like_count || 0,
commentCount: data[0]?.meta?.comment_count || 0,
comments: data[0]?.meta?.comments || []
},
hosting: data[0]?.hosting || null,
timestamp: data[0]?.timestamp || null,
rawResponse: data
}
};
}
else {
return {
author: "Herza",
status: 200,
data: {
success: true,
type: "video",
videoUrls: data.url ? data.url.map(item => ({
url: item.url,
type: item.type,
name: item.name,
ext: item.ext
})) : [],
thumbnailUrl: data.thumb || null,
metadata: {
title: data.meta?.title || null,
source: data.meta?.source || null,
shortcode: data.meta?.shortcode || null,
username: data.meta?.username || null,
takenAt: data.meta?.taken_at || null,
likeCount: data.meta?.like_count || 0,
commentCount: data.meta?.comment_count || 0,
comments: data.meta?.comments || []
},
hosting: data.hosting || null,
timestamp: data.timestamp || null,
rawResponse: data
}
};
}
} catch (error) {
return {
author: "Herza",
status: 500,
success: false,
error: error.message,
errorDetails: error.response?.data || null
};
}
}
module.exports = { igdl }