/* * * Scraping fetch With Failover * website endpoint ceknickname.com & ceknickname.vercel.app * */ const fetch = require('node-fetch'); const config = { domains: { primary: "https://ceknickname.com", fallback: "https://ceknickname.vercel.app" }, apis: { mobileLegends: { default: "mobile-legends", alternatives: ["mobile-legends-dg", "mobile-legends-mp"] } } }; // ==================================== async function fetchWithFallback(game, params, usePrimaryDomain = true, apiIndex = -1) { if (!config.apis[game]) { return { code: 400, status: "false", message: `Game ${game} tidak didukung` }; } const domain = usePrimaryDomain ? config.domains.primary : config.domains.fallback; let apiEndpoint; if (apiIndex === -1) { apiEndpoint = config.apis[game].default; } else if (apiIndex < config.apis[game].alternatives.length) { apiEndpoint = config.apis[game].alternatives[apiIndex]; } else { if (usePrimaryDomain) { return fetchWithFallback(game, params, false, -1); } else { return { code: 503, status: "false", message: "Semua API tidak tersedia saat ini" }; } } const queryString = Object.keys(params) .map(key => `${key}=${params[key]}`) .join('&'); const url = `${domain}/api/game/${apiEndpoint}?${queryString}`; try { const response = await fetch(url, { method: 'GET' }); const data = await response.json(); if (response.ok && data.status !== "false") { return data; } else { return fetchWithFallback(game, params, usePrimaryDomain, apiIndex + 1); } } catch (error) { if (usePrimaryDomain) { return fetchWithFallback(game, params, false, -1); } else if (apiIndex < config.apis[game].alternatives.length - 1) { return fetchWithFallback(game, params, false, apiIndex + 1); } else { return { code: 500, status: "false", message: "Internal Server Error" }; } } } // ==================================== exports.stalkml = async (userId, zoneId) => { return new Promise(async (resolve) => { if (!userId || !zoneId) { return resolve({ code: 400, status: "false", message: "Format Salah! Silakan isi ID dan Zone" }); } try { const result = await fetchWithFallback('mobileLegends', { id: userId, zone: zoneId }); if (result.code === 404 || result.status === "false") { resolve({ code: 404, status: "false", message: "ID atau Zone tidak ditemukan" }); } else { resolve({ code: 200, status: "true", message: "ID berhasil ditemukan", data: { username: result.data.username, user_id: userId, zone: zoneId } }); } } catch (error) { console.error('Error in stalkml:', error); resolve({ code: 500, status: "false", message: "Internal Server Error" }); } }); }; // ==================================== /* * CODE CASE */ case "stalkml": { if (!text) { return m.reply(`Example : stalkml 12345678 1234`); } const args = text.split(" "); const userId = args[0]; const zoneId = args[1]; if (!zoneId) { return m.reply(`Example : ${command} userid zone\nGunakan format yang benar!`); } let xst = "`"; try { const data = await stalkml(userId, zoneId); if (data.code === 200) { m.reply(`🔎 ${xst}Mobile Legends${xst} 🔍\n *›› Id Game :* ${data.data.user_id} (${data.data.zone}) *›› Nickname :* ${data.data.username}`); } else { m.reply(`Maaf, Tidak dapat menemukan nickname.`); } } catch (error) { console.error('Error in stalkml command:', error); m.reply("Terjadi kesalahan saat memproses permintaan"); } } break;