projek2 / plugins /samehadaku.js
devstok's picture
Upload 2 files
1fef695 verified
//© 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;