UNPKG

hanime-crave

Version:
108 lines (94 loc) 3.37 kB
const HentaiEpisode = require('../structures/episode.js'); const tags = require('../structures/tags.json'); const search = require('./search.js'); const defaults = { text: "", brands: [], blacklist: [], tags: [], tags_mode: "AND", page: 0, order: 'desc' }; function addMissingArgs(args) { let keys = Object.keys(defaults); let newArgs = args; for(let i = 0; i < keys.length; i++) if(!newArgs.hasOwnProperty(keys[i])) newArgs[keys[i]] = defaults[keys[i]]; return newArgs } function buildBody(data) { return { search_text: data.text, tags: data.tags, trags_mode: data.tags_mode, brands: data.brands, blacklist: data.blacklist, order_by: "created_at_unix", ordering: data.order, page: data.page } } module.exports = (args = defaults) => { return new Promise((res, rej) => { if(typeof args !== 'object') { if(!isNaN(args)) args = addMissingArgs({page: args}); if(typeof args === 'string') { if(args.toUpperCase() === 'AND' || args.toUpperCase() === 'OR') { args = addMissingArgs({tags_mode: args}) } else if(args.toLowerCase() === 'desc' || args.toLowerCase() === 'asc') { args = addMissingArgs({order: args}) } else args = addMissingArgs({text: args}) } } else if(!isNaN(args.length)) { // is array if(tags.includes(args[0])) args = addMissingArgs({tags: args}) else args = addMissingArgs({brands: args}) } else args = addMissingArgs(args); if(typeof args !== 'object' || (args || []).length >= 0) return rej(new Error("Wrong arguments format.")); fetch( "https://search.htv-services.com", { method: 'post', body: JSON.stringify(buildBody(args)), headers: { 'Content-Type': 'application/json' } } ) .then(resp => resp.json()) .then(data => { let episodes = []; let json = JSON.parse(data.hits); for(let i = 0; i < json.length; i++) episodes[i] = new HentaiEpisode(json[i].name, json[i].slug, json[i].created_at, json[i].created_at_unix, json[i].released_at, json[i].released_at_unix, json[i].views, json[i].interests, json[i].poster_url, json[i].cover_url, json[i].brand, json[i].is_censored, json[i].likes, json[i].dislikes, json[i].downloads, json[i].is_banned_in); res({ episodes: episodes, query: {page: data.page, maxPages: data.nbPages, totalHits: data.nbHits, hitsPerPage: data.hitsPerPage, tags: args.tags}, next: function() { args.page += 1; return search(args) } }) }) .catch(err => rej(err)) }) }