From 718c884e232f613451331275de424e264f24e174 Mon Sep 17 00:00:00 2001 From: Daniel Odendahl Jr Date: Sun, 14 May 2017 17:21:53 +0000 Subject: [PATCH] Anime List Command --- commands/search/anime.js | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 commands/search/anime.js diff --git a/commands/search/anime.js b/commands/search/anime.js new file mode 100644 index 00000000..46a33647 --- /dev/null +++ b/commands/search/anime.js @@ -0,0 +1,54 @@ +const { Command } = require('discord.js-commando'); +const { RichEmbed } = require('discord.js'); +const request = require('superagent'); +const cheerio = require('cheerio'); +const { ANIMELIST_LOGIN } = process.env; + +module.exports = class AnimeCommand extends Command { + constructor(client) { + super(client, { + name: 'anime', + group: 'search', + memberName: 'anime', + description: 'Searches My Anime List for a specified anime.', + args: [ + { + key: 'query', + prompt: 'What anime would you like to search for?', + type: 'string', + parse: query => encodeURIComponent(query) + } + ] + }); + } + + async run(msg, args) { + if (msg.channel.type !== 'dm') + if (!msg.channel.permissionsFor(this.client.user).has('EMBED_LINKS')) + return msg.say('This Command requires the `Embed Links` Permission.'); + const { query } = args; + try { + const { text } = await request + .get(`https://${ANIMELIST_LOGIN}@myanimelist.net/api/anime/search.xml?q=${query}`); + const $ = cheerio.load(text, { xmlMode: true }); + const embed = new RichEmbed() + .setColor(0x2D54A2) + .setAuthor('My Anime List', 'https://i.imgur.com/R4bmNFz.png') + .setURL(`https://myanimelist.net/anime/${$('id').first().text()}`) + .setThumbnail($('image').first().text()) + .setTitle(`${$('title').first().text()} (${$('english').first().text()})`) + .setDescription($('synopsis').first().text().substr(0, 2000)) + .addField('Type', + `${$('type').first().text()} - ${$('status').first().text()}`) + .addField('Episodes', + $('episodes').first().text(), true) + .addField('Start Date', + $('start_date').first().text(), true) + .addField('End Date', + $('end_date').first().text(), true); + return msg.embed(embed); + } catch (err) { + return msg.say('Error: No Results.'); + } + } +};