import { Command, CommandoMessage, CommandoClient } from 'discord.js-commando'; import { MessageEmbed } from 'discord.js'; import axios from 'axios' export default class DanbooruNSFW extends Command { constructor(client: CommandoClient) { super(client, { name: 'danbooru', group: 'nsfw', memberName: 'danbooru', description: 'Danbooru.', throttling: { usages: 5, duration: 30 }, examples: [ 'uwu!danbooru', 'uwu!danbooru 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().toLowerCase() console.log(tags) 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)) { return msg.reply('Blacklisted word was used! ⛔') } } const res = await axios.get(`https://danbooru.donmai.us/posts.json?limit=200&tags=${tags}+-rating:safe`) .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)) { 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(`Danbooru - ${!tags ? 'Random Image' : tags}`) //@ts-ignore yes data exists .setDescription(`[Source](http://danbooru.donmai.us/posts/${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); } }