api-sadteam / index.js
Khrisna's picture
Update index.js
2b4621b
raw
history blame
14.7 kB
const os = require('os')
const bytes = require('bytes')
const sharp = require('sharp')
const morgan = require('morgan')
const express = require('express')
const PDFDocument = require('pdfkit')
const axios = require("axios")
const FormData = require("form-data")
const tfjs = require('@tensorflow/tfjs-node')
const nsfwjs = require('nsfwjs')
const jpegjs = require('jpeg-js')
const fileType = require("file-type")
//const { BingChat } = (await import("bing-chat")).default
const { sss_instagram, gramvio } = require("./lib/instagram.js")
const { allToJpg } = require("./lib/convertFormat.js")
const apikey = "@SadTeam77"
const app = express()
app.set('json spaces', 4)
app.use(morgan('dev'))
app.use(express.json({ limit: "500mb" }))
app.use(express.urlencoded({ limit: '500mb', extended: true }))
app.use((req, res, next) => {
load_model(),
next()
})
app.all('/', (req, res) => {
const status = {}
const used = process.memoryUsage()
for (let key in used) status[key] = formatSize(used[key])
const totalmem = os.totalmem()
const freemem = os.freemem()
status.memoryUsage = `${formatSize(totalmem - freemem)} / ${formatSize(totalmem)}`
res.json({
creator: "@SadTeams",
message: 'Hello World!!',
uptime: new Date(process.uptime() * 1000).toUTCString().split(' ')[4],
status
})
})
app.post('/imagetopdf', async (req, res) => {
try {
console.log(req.body)
const { images } = req.body
if (!images) return res.json({ success: false, message: 'Required an array image url' })
const buffer = await toPDF(images)
res.setHeader('Content-Disposition', `attachment; filename=${Math.random().toString(36).slice(2)}.pdf`)
res.setHeader('Content-Type', 'application/pdf')
res.setHeader('Content-Length', buffer.byteLength)
res.send(buffer)
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
app.post('/api/chatgpt', async (req, res) => {
try {
console.log(req.body)
const { prompt, model, status } = req.body
if (!prompt) return res.json({ success: false, message: 'Required an prompt text!' })
if (!model) return res.json({ success: false, message: 'Required an model version!' })
if (!status) return res.json({ success: false, message: 'Required an prompt text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
const response = await acytoo(prompt, model)
res.json({
status: "ok",
result: response
})
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
app.post('/api/chatgpt2', async (req, res) => {
try {
console.log(req.body)
const { data, prompt, status } = req.body
if (!data) return res.json({ success: false, message: 'Required an data text!' })
if (!prompt) return res.json({ success: false, message: 'Required an prompt text!' })
if (!status) return res.json({ success: false, message: 'Required an status text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
const response = await axios.request({
method: "GET",
url: `https://aemt.me/prompt/gpt?prompt=${data}&text=${prompt}`
})
res.json({
status: "ok",
result: response.data.result
})
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
app.post('/api/toanime', async (req, res) => {
try {
console.log(req.body)
const { url, status } = req.body
if (!url) return res.json({ success: false, message: 'Required an url!' })
if (!status) return res.json({ success: false, message: 'Required an status text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
const response = await axios.request({
method: "GET",
url: `https://aemt.me/toanime?url=${url}`
})
const image = await axios.request({
method: "GET",
url: response.data.url.img_crop_single,
responseType: "arraybuffer"
})
res.setHeader('Content-Type', 'image/jpeg')
res.send(image.data)
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
app.post('/api/waifu2x', async (req, res) => {
try {
console.log(req.body)
const { images, format, status } = req.body
if (!images) return res.json({ success: false, message: 'Required an images!' })
if (!format) return res.json({ success: false, message: 'Required an format size!' })
if (!status) return res.json({ success: false, message: 'Required an status text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
if (/^(https?|http):\/\//i.test(images)) {
const data_img = await axios.request({
method: "GET",
url: images,
responseType: "arraybuffer"
})
const response = await waifu2x(data_img.data, format)
res.setHeader('Content-Type', 'image/jpg')
res.send(response)
} else if (images && typeof images == 'string' && isBase64(images)) {
const response = await waifu2x(Buffer.from(images, "base64"), format)
res.setHeader('Content-Type', 'image/jpg')
res.send(response)
} else {
res.json({
success: false, message: 'No url or base64 detected!!'
})
}
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
app.post('/api/nsfw-check', async (req, res) => {
try {
console.log(req.body)
const { images, status } = req.body
if (!images) return res.json({ success: false, message: 'Required an images!' })
if (!status) return res.json({ success: false, message: 'Required an status text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
if (/^(https?|http):\/\//i.test(images)) {
const data_img = await axios.request({
method: "GET",
url: images,
responseType: "arraybuffer"
})
const response = await check_nsfw(data_img.data)
res.json({
status: "ok",
result: response
})
} else if (images && typeof images == 'string' && isBase64(images)) {
const img = Buffer.from(images, "base64")
const type = await fileType.fromBuffer(img)
if (type.ext == "jpg") {
let response = await check_nsfw(img)
res.json({
status: "ok",
result: response
})
}
if (type.ext == "webp") {
let converting = await allToJpg(img)
let response = await check_nsfw(converting)
res.json({
status: "ok",
result: response
})
}
} else {
res.json({
success: false, message: 'No url or base64 detected!!'
})
}
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
app.post('/api/instagram/stalk', async (req, res) => {
try {
console.log(req.body)
const { username, status } = req.body
if (!username) return res.json({ success: false, message: 'Required an username text!' })
if (!status) return res.json({ success: false, message: 'Required an status text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
const response = await gramvio(username)
res.json({
status: "ok",
result: response
})
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
app.post('/api/instagram/download', async (req, res) => {
try {
console.log(req.body)
const { url, status } = req.body
if (!url) return res.json({ success: false, message: 'Required an url!' })
if (!status) return res.json({ success: false, message: 'Required an status text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
const response = await sss_instagram(url)
res.json({
status: "ok",
result: response
})
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})
/*app.post('/api/bingchat', async (req, res) => {
try {
console.log(req.body)
const { prompt, status } = req.body
if (!prompt) return res.json({ success: false, message: 'Required an prompt text!' })
if (!status) return res.json({ success: false, message: 'Required an status text!' })
if(status !== apikey) return res.json({ success: false, message: 'Invalid status!' })
const api = new BingChat({
cookie: process.env.BING_COOKIE
})
const resonse = await api.sendMessage(prompt)
res.json({
status: "ok",
result: response.text
})
} catch (e) {
console.log(e)
e = String(e)
res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
}
})*/
const PORT = process.env.PORT || 7860
app.listen(PORT, () => {
console.log('App running on port', PORT)
})
function formatSize(num) {
return bytes(+num || 0, { unitSeparator: ' ' })
}
function isBase64(str) {
try {
return btoa(atob(str)) === str
} catch {
return false
}
}
function toPDF(urls) {
return new Promise(async (resolve, reject) => {
try {
if (!Array.isArray(urls)) urls = [urls]
const doc = new PDFDocument({ margin: 0, size: 'A4' })
const buffers = []
for (let i = 0; i < urls.length; i++) {
const response = await fetch(urls[i], { headers: { referer: urls[i] }})
if (!response.ok) continue
const type = response.headers.get('content-type')
if (!/image/.test(type)) continue
let buffer = Buffer.from(await response.arrayBuffer())
if (/gif|webp/.test(type)) buffer = await sharp(buffer).png().toBuffer()
doc.image(buffer, 0, 0, { fit: [595.28, 841.89], align: 'center', valign: 'center' })
if (urls.length !== i + 1) doc.addPage()
}
doc.on('data', (chunk) => buffers.push(chunk))
doc.on('end', () => resolve(Buffer.concat(buffers)))
doc.on('error', reject)
doc.end()
} catch (e) {
console.log(e)
reject(e)
}
})
}
async function acytoo(text, model) {
let res = await axios.request({
method: "POST",
url: "https://chat.acytoo.com/api/completions",
data: JSON.stringify({
key: "",
messages: [{
role: "user",
content: text,
createAt: "",
}],
model: model,
password: "",
temprature: 1
}),
headres: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
"Origin": "https://chat.acytoo.com"
}
})
return res.data
}
async function waifu2x(image, formats) {
// data
//let img = await axios.get(urls, { responseType: "arraybuffer"})
let random_numbers = Math.floor(Math.random() * 1000)
let format
if(formats == "Medium") {
format = "1"
} else if(formats == "High") {
format = "2"
} else if(!formats) {
format = "0"
}
// memasukan data api
const formData = new FormData()
formData.append("denoise", format)
formData.append("scale", "true")
formData.append("file", image, {
filename: "images_" + random_numbers.toString().padStart(3, '0') + ".jpg",
contentType: "image/jpeg"
})
// request ke api untuk mendapatkan hash nya
const response = await axios.request({
method: "POST",
url: "https://api.alcaamado.es/api/v1/waifu2x/convert",
data: formData,
headers: {
"Accept": "application/json",
"Referer": "https://waifu2x.pro/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"
}
})
const ress = await axios.request({
method: "GET",
url: "https://api.alcaamado.es/api/v2/waifu2x/check?hash=" + response.data.hash,
headers: {
"Accept": "application/json",
"Referer": "https://waifu2x.pro/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"
}
})
if(!ress.data.finished) return "Images Not Supported!!"
const images = await axios.request({
method: "GET",
url: "https://api.alcaamado.es/api/v2/waifu2x/get?hash=" + response.data.hash + "&type=jpg",
headers: {
"Accept": "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
"Content-Type": "image/jpg",
"Referer": "https://waifu2x.pro/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"
},
responseType: "arraybuffer"
})
return images.data
}
async function check_nsfw(buffer) {
let _model = await load_model()
const convert = async (img) => {
// Decoded image in UInt8 Byte array
const image = await jpegjs.decode(img, { useTArray: true })
const numChannels = 3
const numPixels = image.width * image.height
const values = new Int32Array(numPixels * numChannels)
for (let i = 0; i < numPixels; i++)
for (let c = 0; c < numChannels; ++c)
values[i * numChannels + c] = image.data[i * 4 + c]
return tfjs.tensor3d(values, [image.height, image.width, numChannels], 'int32')
}
const image = await convert(buffer)
const predictions = await _model.classify(image)
image.dispose();
const results = predictions.map(v => {
return {
class_name: v.className,
probability: v.probability,
probability_percent: (v.probability * 100).toFixed(2)
}
})
return results
}
async function load_model() {
return await nsfwjs.load()
}