mlstalk

by XshopTopup
14 Raw

/* * 
* 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;