//© AkiraaBot 2023-2024 // • Credits : wa.me/6287869975929 [ Bang syaii ] // • Owner: 6287869975929,6283831945469 /* • untuk siapa pun yang ketahuan menjual script ini tanpa sepengetahuan developer mohon untuk dilaporkan ! */ const axios = require("axios"); const cheerio = require("cheerio"); class Samehada { latest = async () => { try { let { data } = await axios.get("https://samehadaku.email/anime-terbaru/"); let $ = cheerio.load(data); const posts = []; $(".post-show li").each((index, element) => { const title = $(element).find(".entry-title a").attr("title"); const link = $(element).find(".entry-title a").attr("href"); const author = $(element).find('[itemprop="author"] author').text(); const date = $(element) .find(".dashicons-calendar") .parent() .text() .replace("Released on:", "") .trim(); posts.push({ title, author, date, link, }); }); return posts; } catch (error) { console.error(error); return []; } }; search = async (text) => { const { data } = await axios.get("https://samehadaku.email"); const $ = cheerio.load(data); const scriptContent = $("#live_search-js-extra").html(); const nonceMatch = scriptContent.match(/"nonce":"([^"]+)"/); const nonce = nonceMatch ? nonceMatch[1] : null; try { let { data: result } = await axios.get( `https://samehadaku.email/wp-json/eastheme/search/?keyword=${text}&nonce=${nonce}`, ); let objek = Object.values(result).map((v) => v); return objek; } catch (e) { return { msg: e, }; } }; detail = async (url) => { try { const response = await axios.get(url); const $ = cheerio.load(response.data); const title = $("h1.entry-title").text().trim(); const author = "shannz"; const image = $(".thumb img").attr("src"); const rating = $('.rtg span[itemprop="ratingValue"]').text().trim(); const description = $(".entry-content-single").text().trim(); const genres = []; $(".genre-info a").each((i, el) => { genres.push($(el).text().trim()); }); const episodes = []; $(".lstepsiode.listeps li").each((i, el) => { const episodeNumber = $(el).find(".epsright .eps a").text().trim(); const episodeTitle = $(el).find(".epsleft .lchx a").text().trim(); const episodeUrl = $(el).find(".epsleft .lchx a").attr("href"); const episodeDate = $(el).find(".epsleft .date").text().trim(); episodes.push({ number: episodeNumber, title: episodeTitle, url: episodeUrl, date: episodeDate, }); }); return { author, title, image, rating, description, genres, episodes, }; } catch (error) { console.error("Error scraping anime:", error); return null; } }; download = async (url) => { if (!url.includes("samehadaku.email")) { throw new Error("URL tidak valid"); } try { const response = await axios.get(url); const $ = cheerio.load(response.data); const result = { judul: $("h1.entry-title").text().trim(), url: url, unduhan: [], }; const serverList = $("div#server > ul > li"); for (let i = 0; i < serverList.length; i++) { const server = $(serverList[i]); const serverInfo = { nama: server.find("span").text().trim(), tipeServer: server.find("div").attr("data-type"), nomorServer: server.find("div").attr("data-nume"), postId: server.find("div").attr("data-post"), }; const formData = new URLSearchParams(); formData.append("action", "player_ajax"); formData.append("post", serverInfo.postId); formData.append("nume", serverInfo.nomorServer); formData.append("type", serverInfo.tipeServer); const linkResponse = await axios.post( "https://samehadaku.email/wp-admin/admin-ajax.php", formData, { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", Origin: "https://samehadaku.email", "Content-Type": "application/x-www-form-urlencoded", }, }, ); const $link = cheerio.load(linkResponse.data); serverInfo.tautan = $link("iframe").attr("src"); result.unduhan.push(serverInfo); } return result; } catch (error) { console.error("Terjadi kesalahan:", error.message); throw error; } }; } const handler = async (m, { conn, args, usedPrefix, text, command }) => { let lister = ["search", "detail", "pdf"]; if (!text) throw `*[ SHINIGAMI EXAMPLE ]* > *• Example :* ${usedPrefix + command} search *[query]* > *• Example :* ${usedPrefix + command} detail *[url]* > *• Example :* ${usedPrefix + command} episode *[url]*`; let feature = text.split(" ")[0]; let inputs = text.slice(feature.length + 1); let same = new Samehada(); if ("search" === feature) { if (!inputs) throw `*• Example :* ${usedPrefix + command} search *[query]*`; m.reply(wait); try { let res = await same.search(inputs); let cap = `Type a command ${usedPrefix + command} detail *[url]* for Get detail!\n\n` + res .map( (a, i) => `*${i + 1}.* ${a.title} *• Type :* ${a.data.type} *• Score :* ${a.data.score} *• Genre :* ${a.data.genre} *• Url :* ${a.url}`, ) .join("\n\n"); m.reply(cap, res[0].img); } catch (e) { throw e; } } if ("detail" === feature) { if (!inputs) throw `*• Example :* ${usedPrefix + command} detail *[url]*`; try { let resl = await same.detail(inputs); let cap = `*${resl.title}* *• Score :* ${resl.rating} *• Genre :* ${resl.genres.join(", ")} ${resl.description || ""} Type a command ${usedPrefix + command} episode *[url]* for Get video! ${resl.episodes .map( (a) => `*• Title :* ${a.title} *• Date :* ${a.date} *• Url :* ${a.url}`, ) .join("\n\n")}`; await conn.sendFile(m.chat, resl.image, "", cap, m); } catch (e) { throw e; } } if ("episode" === feature) { if (!inputs) throw `*• Example :* ${usedPrefix + command} episode *[url]*`; try { let buff = await same.download(inputs); let hasil = buff.unduhan.find((a) => a.tautan.endsWith(".mp4")); let q = await conn.sendMessage(m.chat, { text: `*• Title :* ${buff.judul}\n*• Url :* ${buff.url}\n*• Resolution :* ${hasil.nama}\n*• Download :* ${hasil.tautan}`, }); await conn.sendMessage( m.chat, { document: { url: hasil.tautan, }, caption: buff.utl, fileName: buff.judul + ".mp4", mimetype: "video/mp4", }, { quoted: q, }, ); } catch (e) { throw e; } } }; handler.help = ["samehadaku", "samehada"].map((a) => a + " *[options]*"); handler.tags = ["anime"]; handler.command = ["samehadaku", "samehada"]; module.exports = handler;