UNPKG

tester-scraper

Version:

Sebuah Module Scraper yang dibuat oleh Sxyz dan SuzakuTeam untuk memudahkan penggunaan scraper di project ESM maupun CJS.

741 lines (688 loc) 20 kB
import axios from "axios"; import WebSocket from "ws"; import * as cheerio from "cheerio"; import FormData from "form-data"; import fakeUserAgent from "fake-useragent"; const { fromBuffer } = await import("file-type"); import MathRandoms from "./lib/math.random.js"; import { randomUUID } from "crypto"; import https from "https"; import qs from "qs"; import { Success } from "./lib/function.js"; const ai = { ss2code: async (urlImage, timeoutMs = 30000) => { function generateUUIDv4() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { const r = (Math.random() * 16) | 0; const v = c === "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); } const buffer = await axios.get(urlImage, { responseType: "arraybuffer" }); const base64 = `data:image/png;base64,${Buffer.from(buffer.data).toString("base64")}`; const uuid = generateUUIDv4(); return new Promise((resolve, reject) => { const sock = new WebSocket( "wss://screenshot-code.onrender.com/generate-code", ); const timer = setTimeout(() => { sock.terminate(); reject(new Error("Timeout: Server tidak merespons dalam 30 detik")); }, timeoutMs); sock.on("open", () => { const payload = { generationType: "create", image: base64, codeGenerationModel: "gpt-4o-2024-05-13", editorTheme: "cobalt", generatedCodeConfig: "html_tailwind", inputMode: "image", isImageGenerationEnabled: true, isTermOfServiceAccepted: false, openAiApiKey: null, openAiBaseURL: null, screenshotOneApiKey: null, sessionId: uuid, }; sock.send(JSON.stringify(payload)); }); sock.on("message", (raw) => { try { const data = JSON.parse(raw.toString()); if (data.type === "setCode") { clearTimeout(timer); sock.close(); resolve({ code: data.value }); } } catch (err) { clearTimeout(timer); sock.close(); reject(new Error("Parsing error: " + err.message)); } }); sock.on("error", (err) => { clearTimeout(timer); reject(err); }); sock.on("close", () => { console.log("WebSocket Closed!"); }); }); }, chatAIOrg: async (query) => { if (!query) { return { code: 403, timestamp: new Date().getTime(), message: "Query Tidak Di Isi!", }; } let payload = { messages: [ { role: "user", content: query, }, ], }; let headers = { headers: { Origin: "https://chatai.org", Referer: "https://chatai.org/", }, }; let { data } = await axios.post( "https://chatai.org/api/chat", payload, headers, ); if (data.status === 500) { return { code: 500, timestamp: new Date().getTime(), message: data.data || null, }; } return { code: 200, timestamp: new Date().getTime(), message: data.content, }; }, chatAIOrgPrompt: async (query, prompt) => { if (!query && !prompt) { return { code: 403, timestamp: new Date().getTime(), message: "Parameter Query Atau Prompt Tidak Terisi.", }; } let payload = { messages: [ { role: "user", content: "Siapa Nama Kamu?", }, { role: "assistant", content: prompt, }, { role: "user", content: query, }, ], }; let headers = { headers: { Origin: "https://chatai.org", Referer: "https://chatai.org/", }, }; let { data } = await axios.post( "https://chatai.org/api/chat", payload, headers, ); if (data.status === 500) { return { code: 500, timestamp: new Date().getTime(), message: data.data || null, }; } return { code: 200, timestamp: new Date().getTime(), content: data.content, }; }, gptOnline: async (prompt) => { const { data: html } = await axios.get( "https://gptonline.ai/id/chatgpt-online/", ); const $ = cheerio.load(html); const div = $(".wpaicg-chat-shortcode"); const nonce = div.attr("data-nonce"); const botId = div.attr("data-bot-id"); const postId = div.attr("data-post-id"); const form = new FormData(); form.append("_wpnonce", nonce); form.append("post_id", postId); form.append("url", "https://gptonline.ai/id/chatgpt-online/"); form.append("action", "wpaicg_chat_shortcode_message"); form.append("message", prompt); form.append("bot_id", botId); form.append("chat_bot_identity", "custom_bot_1040"); form.append("wpaicg_chat_history", "[]"); form.append("wpaicg_chat_client_id", "LCgGOMeIOC"); const headersList = { headers: { ...form.getHeaders(), }, }; const { data } = await axios.post( "https://gptonline.ai/id/wp-admin/admin-ajax.php", form, headersList, ); return data; }, aiCodeAssistant: async (q) => { async function generateUserId() { const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; let userId = ""; for (let i = 0; i < 10; i++) { userId += chars[Math.floor(Math.random() * chars.length)]; } return userId; } let userId = await generateUserId(); let { data } = await axios.get( `https://yw85opafq6.execute-api.us-east-1.amazonaws.com/default/boss_mode_15aug?text=Generate a Codes in Indonesian for the following text: ${encodeURIComponent(q)}&country=Asia&user_id=${userId}`, ); return data; }, toBald: async (imgUrl) => { const ress = await axios.get(imgUrl, { responseType: "arraybuffer", }); const base64 = Buffer.from(ress.data).toString("base64"); const payload = { filter: "botak", imageData: base64, }; const { data } = await axios.post( "https://wpw.my.id/api/process-image", payload, ); return { success: true, outputBase64: data.processedImageUrl, }; }, toBlack: async (imgUrl) => { const ress = await axios.get(imgUrl, { responseType: "arraybuffer", }); const base64 = Buffer.from(ress.data).toString("base64"); const payload = { filter: "hitam", imageData: base64, }; const { data } = await axios.post( "https://wpw.my.id/api/process-image", payload, ); return { success: true, outputBase64: data.processedImageUrl, }; }, toPiggy: async (imgUrl) => { const ress = await axios.get(imgUrl, { responseType: "arraybuffer", }); const base64 = Buffer.from(ress.data).toString("base64"); const payload = { filter: "piggy", imageData: base64, }; const { data } = await axios.post( "https://wpw.my.id/api/process-image", payload, ); return { success: true, outputBase64: data.processedImageUrl, }; }, toNerd: async (imgUrl) => { const ress = await axios.get(imgUrl, { responseType: "arraybuffer", }); const base64 = Buffer.from(ress.data).toString("base64"); const payload = { filter: "nerd", imageData: base64, }; const { data } = await axios.post( "https://wpw.my.id/api/process-image", payload, ); return { success: true, outputBase64: data.processedImageUrl, }; }, gemini: async (chat) => { const apikeyArray = [ "AIzaSyA0ECSvKEUpTySjwCXLPQATWTjJzmaDeoc", "AIzaSyB8qHA81c8rsNGQ9PyeOSCXMgxJ99h63Rg", "AIzaSyDptw3Q8R_s_cLUfYcb3hQCWXuboM08CSQ", ]; const randomMath = MathRandoms(apikeyArray); const payload = { contents: [ { parts: [ { text: chat, }, ], }, ], }; const { data } = await axios.post( `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${randomMath}`, payload, ); return { success: true, response: data.candidates[0].content.parts[0].text, }; }, phindChat: async (chat, options = {}) => { const endpoint = "https://https.extension.phind.com/agent/"; const getHeaders = () => ({ "Content-Type": "application/json", "User-Agent": "", Accept: "*/*", "Accept-Encoding": "Identity", }); const createRequestBody = (input, options = {}) => ({ additional_extension_context: "", allow_magic_buttons: true, is_vscode_extension: true, message_history: [ ...(options.previousMessages || []), { content: input, role: "user" }, ], requested_model: options.model || "Phind-70B", user_input: input, }); try { const response = await fetch(endpoint, { method: "POST", headers: getHeaders(), body: JSON.stringify(createRequestBody(chat, options)), }); if (!response.ok) { throw new Error(`Request failed with status ${response.status}`); } const reader = response.body.getReader(); const decoder = new TextDecoder(); let fullText = ""; while (true) { const { done, value } = await reader.read(); if (done) { break; } const text = decoder.decode(value); const lines = text.split("\n"); for (const line of lines) { if (line.startsWith("data: ")) { try { const jsonStr = line.slice(6); if (jsonStr === "[DONE]") continue; const data = JSON.parse(jsonStr); if (data.choices?.[0]?.delta?.content) { fullText += data.choices[0].delta.content; } } catch (e) { // Skip invalid JSON } } } } return fullText; } catch (error) { console.error("Error:", error); throw error; } }, ratePhoto: async (url) => { const ress = await axios.get(url, { responseType: "arraybuffer", }); const binarys = Buffer.from(ress.data, "binary"); const d = new FormData(); d.append("imageFile", binarys, { filename: "y.png" }); d.append("canvasimg", ""); d.append( "image_data", `data:image/png;base64,${Buffer.from(ress.data).toString("base64")}`, ); const headers = { headers: { ...d.getHeaders(), }, }; const { data: s } = await axios.post( "https://rate-my-photo.com/result", d, headers, ); const $ = cheerio.load(s); const score = $(".skill-progress") .first() .text() .trim() .replace("SCORE: ", ""); const compare = $(".card-text").text().trim(); const aesthetic = $(".text-success").text().replace(/\s+/g, " ").trim(); return { success: true, result: { score, aesthetic, }, }; }, img2prompt: async (u) => { if (!u) throw new Error("Masukkan URL-nya"); const rdss = await axios.get(u, { responseType: "arraybuffer" }); const form = new FormData(); form.append("image_bytes", rdss.data, { filename: "image.png" }); const { data } = await axios({ method: "post", url: "https://api.findit.moe/util/image_caption", data: form, headers: form.getHeaders(), responseType: "stream", }); return new Promise((resolve, reject) => { function parsePromptText(text) { const extract = (tag) => { const regex = new RegExp( `<${tag}>\\s*([\\s\\S]*?)\\s*</${tag}>`, "i", ); const match = text.match(regex); return match ? match[1].trim() : ""; }; return { description: extract("DESCRIPTION"), details: extract("DETAILS"), style: extract("STYLE"), query: extract("QUERY"), }; } let fullText = ""; data.on("data", (chunk) => { try { const lines = chunk.toString().split("\n"); for (const line of lines) { if (line.startsWith("data:")) { const payload = JSON.parse(line.replace(/^data:\s*/, "")); fullText += payload.content || ""; } } } catch (err) { console.error("Parsing error:", err); } }); data.on("end", () => { resolve(parsePromptText(fullText)); }); data.on("error", reject); }); }, pollai: async ( question, { systemMessage = "yang membuatmu adalah suzakuTeam dan owner mu cifumo", model = "gpt-4.1-mini", imageBuffer = null, } = {}, ) => { try { const modelList = { "gpt-4.1": "openai-large", "gpt-4.1-mini": "openai", "gpt-4.1-nano": "openai-fast", }; if (!question) throw new Error("Question is required"); if (!modelList[model]) throw new Error( `List available model: ${Object.keys(modelList).join(", ")}`, ); const messages = [ ...(systemMessage ? [{ role: "system", content: systemMessage }] : []), { role: "user", content: [ { type: "text", text: question }, ...(imageBuffer ? [ { type: "image_url", image_url: { url: `data:image/jpeg;base64,${imageBuffer.toString("base64")}`, }, }, ] : []), ], }, ]; const { data } = await axios.post( "https://text.pollinations.ai/openai", { messages, model: modelList[model], temperature: 0.5, presence_penalty: 0, top_p: 1, frequency_penalty: 0, }, { headers: { accept: "*/*", authorization: "Bearer dummy", "content-type": "application/json", origin: "https://sur.pollinations.ai", referer: "https://sur.pollinations.ai/", "user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36", }, }, ); return data.choices[0].message.content; } catch (error) { console.error(error.message); throw new Error("No result found"); } }, claila: async (msg, sessionid, model) => { const validModels = [ "chatgpt", "grok", "chatgpto1p", "claude", "chatgpt41mini", "gemini", "mistral", ]; if (!validModels.includes(model)) { throw new Error( `Model tidak valid. Pilihan yang tersedia: ${validModels.join(", ")}`, ); } let csrfToken; try { const tokenres = await axios.get( "https://app.claila.com/api/v2/getcsrftoken", ); if (tokenres.status === 403) { throw new Error("dapet hadiah tuh bang 403"); } csrfToken = tokenres.data; if (!csrfToken) throw new Error("Token kosong, mungkin format response berubah?"); } catch (err) { if (err.message === "403" || err.response?.status === 403) { return { status: false, msg: "ngambil tokennya gabisa rek, itu vps mu jelek kayaknya, ganti region makanya jangan sg terus wkwk", }; } return { status: false, msg: "servernya lagi down atau webnya nambah bypass lagi kayaknya om sabar yah wkwkw", }; } try { const data = qs.stringify({ calltype: "completion", message: msg, sessionId: sessionid, }); const response = await axios.post( `https://app.claila.com/api/v2/unichat1/${model}`, data, { headers: { "User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36", "Accept-Encoding": "gzip, deflate, br, zstd", "Content-Type": "application/x-www-form-urlencoded", "sec-ch-ua-platform": '"Android"', "x-csrf-token": csrfToken, "sec-ch-ua": '"Google Chrome";v="137", "Chromium";v="137", "Not/A)Brand";v="24"', "sec-ch-ua-mobile": "?1", "x-requested-with": "XMLHttpRequest", origin: "https://app.claila.com", "sec-fetch-site": "same-origin", "sec-fetch-mode": "cors", "sec-fetch-dest": "empty", referer: "https://app.claila.com/chat?uid=9683c3b4&lang=en", "accept-language": "en-GB,en;q=0.9,id;q=0.8,en-US;q=0.7,ja;q=0.6", priority: "u=1, i", }, }, ); return { status: true, msg: response.data, }; } catch (e) { if (e.response?.status === 403 || e.message.includes("403")) { return { status: false, msg: "vps mu jelek tuh dapet 403, ganti region aja lek", }; } else { return { status: false, msg: "scrapenya rusak kali om, tanyain sama yang punya aja", }; } } }, ripleAI: async (text) => { let payload = { messages: [ { content: text, role: "user", }, ], }; try { let { data } = await axios.post("https://ai.riple.org/", payload, { headers: { "Content-Type": "application/json", Accept: "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", }, responseType: "stream", }); return new Promise((resolve, reject) => { let fullResponse = ""; data.on("data", (chunk) => { let lines = chunk.toString().split("\n"); for (let line of lines) { if (line.startsWith("data: ")) { let jsonString = line.slice(6).trim(); if (jsonString === "[DONE]") { return resolve({ result: fullResponse.trim() }); } try { let parsedData = JSON.parse(jsonString); let content = parsedData?.choices?.[0]?.delta?.content; if (content) { fullResponse += content; } } catch (err) { reject(err); } } } }); data.on("error", (err) => reject(err)); }); } catch (error) { throw new Error(error.message); } }, text2image: async (prompt) => { const payload = { clip_skip: 2, guidance: 7, height: 768, lora_ids: "", lora_weight: "0.7", model_id: "mistoonJade_v10Anime", negative_prompt: "", prompt, sampler: "Euler a", samples: 1, seed: 0, steps: 25, width: 512 }; const createRes = await axios.post( "https://api.arting.ai/api/cg/text-to-image/create", payload ); const requestId = createRes.data.data.request_id; const checkPayload = { request_id: requestId }; while (true) { const { data } = await axios.post( "https://api.arting.ai/api/cg/text-to-image/get", checkPayload ); if (data?.data?.output?.length > 0) { return new Success({ imageGenerated: data.data.output[0] }) } await new Promise((resolve) => setTimeout(resolve, 1000)); } } }; export default ai;