import { Command, CommandoMessage, CommandoClient } from 'discord.js-commando'; import { MessageEmbed } from 'discord.js'; import axios from 'axios' export default class GelbooruNSFW extends Command { constructor(client: CommandoClient) { super(client, { name: 'gelbooru', group: 'nsfw', memberName: 'gelbooru', description: 'Gelbooru.', throttling: { usages: 5, duration: 30 }, examples: [ 'uwu!gelbooru', 'uwu!gelbooru minecraft' ], userPermissions: ['SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], clientPermissions: ['SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], args: [ { key: 'tTags', prompt: 'What tag(s) would you like?', type: 'string', default: '' } ], nsfw: true }); } async run(msg: CommandoMessage, { tTags }: any) { const tags = await tTags.trim() const blacklist = ['loli', 'shota', 'cub', 'young', 'child', 'baby', 'guro', 'gore', 'vore', 'scat', 'poop', 'kid', 'shit', 'turd', 'feces', 'excrement', 'excrete']; if (tags) { if (blacklist.includes(tags.toLowerCase())) { return msg.reply('Blacklisted word was used! ⛔') } } const res = await axios.get(`https://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=100&tags=${tags}+-rating:safe&json=1`) .catch(error => console.log(error)) //@ts-ignore yes data exists const randomInt = Math.floor(Math.random() * res.data.length) //@ts-ignore yes data exists if (blacklist.includes(res.data[randomInt].tags.toLowerCase())) { return msg.reply('Sorry! This image had a tag that was blacklisted! ⛔') } //@ts-ignore yes all code paths return a value let getRating = (rating: any) => { if (rating === 's') { return 'Safe' } if (rating === 'q') { return 'Questionable' } if (rating === 'e') { return 'Explicit' } if (rating === 'u') { return 'Unrated' } } let emb = new MessageEmbed() .setColor(0xFFCC4D) .setTitle(`Gelbooru - ${!tags ? 'Random Image' : tags}`) //@ts-ignore yes data exists .setDescription(`[Source](https://gelbooru.com/index.php?page=post&s=view&id=${res.data[randomInt].id})\n\nFixed bug where responses were being evaluated out of 100 instead of data length!`) //@ts-ignore yes data exists .setImage(res.data[randomInt].file_url) .setTimestamp(new Date()) //@ts-ignore yes data exists .setFooter(`Score: ${res.data[randomInt].score} | Rating: ${getRating(res.data[randomInt].rating)}`, msg.author.avatarURL()) return msg.say(emb); } }