UNPKG

scathach-api

Version:

A NodeJS wrapper to interacts with Scathach bot

91 lines (73 loc) 4.57 kB
import c from './consts'; import { get, randomArray, ratelimit, delay } from './utils'; export default async function request(options: { category: 'fgo' | 'genshin' | 'azur' | 'waifu' | 'arknights' | 'fire_emblem' | 'gfl' | 'hololive' | 'kancolle' | 'sex' | 'gelbooru' | 'r34' | 'safe' | 'animesex' | 'reaction', tags?: string | string[], apikey?: string, limit?: number, block?: string | string[], page?: number, useragent?: string, img?: string } ) { switch (options.category) { case 'fgo': return ratelimit(delay, await get(c.endpoint.fgo, options.useragent || '').then(res => res.body as string)); case 'genshin': return ratelimit(delay, await get(c.endpoint.genshin, options.useragent || '').then(res => res.body as string)); case 'azur': return ratelimit(delay, await get(c.endpoint.azur, options.useragent || '').then(res => res.body as string)); case 'waifu': return ratelimit(delay, await get(c.endpoint.waifu, options.useragent || '').then(res => res.body as string)); case 'arknights': return ratelimit(delay, await get(c.endpoint.arknights, options.useragent || '').then(res => res.body as string)); case 'fire_emblem': return ratelimit(delay, await get(c.endpoint.fire_emblem, options.useragent || '').then(res => res.body as string)); case 'gfl': return ratelimit(delay, await get(c.endpoint.gfl, options.useragent || '').then(res => res.body as string)); case 'hololive': return ratelimit(delay, await get(c.endpoint.hololive, options.useragent || '').then(res => res.body as string)); case 'kancolle': return ratelimit(delay, await get(c.endpoint.kancolle, options.useragent || '').then(res => res.body as string)); case 'sex': return ratelimit(delay, await get(c.endpoint.sex, options.useragent || '').then(res => res.body as string)); case 'reaction': if (!options.img) throw Error('No Tags provided'); if (!c.endpoint.reaction.includes(options.img)) throw Error('Invalid parameter, please use one of the following: ' + c.endpoint.reaction.join(', ')); const res = await get(`https://gitlab.com/d0g/servant/-/raw/master/_constant/${options.img}.json`, options.useragent || '').then(res => res.body as string); return { url: randomArray(res, `https://gitlab.com/d0g/servant/-/raw/master/${options.img}`) }; case 'animesex': if (!options.img) throw Error('No Tags provided'); if (!c.endpoint.animesex.includes(options.img)) throw Error('Invalid parameter, please use one of the following: ' + c.endpoint.animesex.join(', ')); const gitlab = await get(`https://gitlab.com/d0g/lewd/-/raw/master/${options.img}.json`, options.useragent || '').then(res => res.body as string); return { url: randomArray(gitlab) }; case 'gelbooru': if (!options.tags) throw Error('No Tags provided'); if (options.limit && (options.limit > 100 || options.limit < 25)) throw Error('Limit must be between 25 and 100'); const geltags = options.tags instanceof Array ? options.tags.join('+') : options.tags; const gelres = ratelimit(delay, await get(`${c.endpoint.gelbooru}/?tags=${geltags}&limit=${options.limit || 50}&page=${options.page || 1}&shuffle=true`, options.useragent || '').then(res => res.body as string)); return gelres; case 'r34': if (!options.tags) throw Error('No Tags provided'); if (options.limit && (options.limit > 100 || options.limit < 25)) throw Error('Limit must be between 25 and 100'); const r34tags = options.tags instanceof Array ? options.tags.join('+') : options.tags; const r34res = ratelimit(delay, await get(`${c.endpoint.r34}/?tags=${r34tags}&limit=${options.limit || 50}&page=${options.page || 1}&shuffle=true`, options.useragent || '').then(res => res.body as string)); return r34res; case 'safe': if (!options.tags) throw Error('No Tags provided'); if (options.limit && (options.limit > 100 || options.limit < 25)) throw Error('Limit must be between 25 and 100'); const safetags = options.tags instanceof Array ? options.tags.join('+') : options.tags; const saferes: unknown = ratelimit(delay, await get(`${c.endpoint.safe}/?tags=${safetags}&limit=${options.limit || 50}&page=${options.page || 1}&shuffle=true`, options.useragent || '').then(res => res.body as string)); return saferes; default: return { success: false, message: 'No URL provided' }; } } export { ratelimit, get, randomArray };