diff --git a/commands/random/word-of-the-day.js b/commands/random/word-of-the-day.js index bdf397de..f67672e4 100644 --- a/commands/random/word-of-the-day.js +++ b/commands/random/word-of-the-day.js @@ -1,6 +1,6 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); +const { stripIndents } = require('common-tags'); const { WORDNIK_KEY } = process.env; module.exports = class WordOfTheDayCommand extends Command { @@ -10,8 +10,7 @@ module.exports = class WordOfTheDayCommand extends Command { aliases: ['wordnik-word-of-the-day'], group: 'random', memberName: 'word-of-the-day', - description: 'Gets the word of the day.', - clientPermissions: ['EMBED_LINKS'] + description: 'Gets the word of the day.' }); } @@ -20,13 +19,10 @@ module.exports = class WordOfTheDayCommand extends Command { const { body } = await snekfetch .get('http://api.wordnik.com/v4/words.json/wordOfTheDay') .query({ api_key: WORDNIK_KEY }); - const embed = new MessageEmbed() - .setAuthor('Wordnik', 'https://i.imgur.com/VcLZLXn.jpg') - .setColor(0xFE6F11) - .setTitle(body.word) - .setURL('http://wordnik.com/word-of-the-day') - .setDescription(`(${body.definitions[0].partOfSpeech || 'N/A'}) ${body.definitions[0].text}`); - return msg.embed(embed); + return msg.say(stripIndents` + **${body.word}** + (${body.definitions[0].partOfSpeech || 'N/A'}) ${body.definitions[0].text} + `); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/search/derpibooru.js b/commands/search/derpibooru.js index 43cf9ff7..eb351e55 100644 --- a/commands/search/derpibooru.js +++ b/commands/search/derpibooru.js @@ -1,7 +1,6 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); -const { shorten } = require('../../structures/Util'); +const { stripIndents } = require('common-tags'); module.exports = class DerpibooruCommand extends Command { constructor(client) { @@ -11,7 +10,6 @@ module.exports = class DerpibooruCommand extends Command { group: 'search', memberName: 'derpibooru', description: 'Searches Derpibooru for your query.', - clientPermissions: ['EMBED_LINKS'], args: [ { key: 'query', @@ -33,21 +31,10 @@ module.exports = class DerpibooruCommand extends Command { if (!search.body) return msg.say('Could not find any results.'); const { body } = await snekfetch .get(`https://derpibooru.org/images/${search.body.id}.json`); - if (!msg.channel.nsfw && body.tags.includes('suggestive')) { - return msg.say('This image is only viewable in NSFW channels.'); - } - const embed = new MessageEmbed() - .setAuthor('Derpibooru', 'https://i.imgur.com/cptnecp.png') - .setColor(0xC6D2E1) - .setURL(`https://derpibooru.org/images/${body.id}`) - .setImage(`https:${body.representations.medium}`) - .addField('❯ Uploader', - body.uploader, true) - .addField('❯ Upload Date', - new Date(body.created_at).toDateString(), true) - .addField('❯ Tags', - shorten(body.tags, 1000)); - return msg.embed(embed); + return msg.say(stripIndents` + Result for ${query}: + ${body.representations.medium} + `); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/search/dictionary.js b/commands/search/dictionary.js index 0d27d4c3..4463e31f 100644 --- a/commands/search/dictionary.js +++ b/commands/search/dictionary.js @@ -1,6 +1,6 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); +const { stripIndents } = require('common-tags'); const { WORDNIK_KEY } = process.env; module.exports = class DictionaryCommand extends Command { @@ -11,7 +11,6 @@ module.exports = class DictionaryCommand extends Command { group: 'search', memberName: 'dictionary', description: 'Defines a word.', - clientPermissions: ['EMBED_LINKS'], args: [ { key: 'query', @@ -34,13 +33,10 @@ module.exports = class DictionaryCommand extends Command { }); if (!body.length) return msg.say('Could not find any results.'); const data = body[0]; - const embed = new MessageEmbed() - .setAuthor('Wordnik', 'https://i.imgur.com/VcLZLXn.jpg') - .setColor(0xFE6F11) - .setTitle(data.word) - .setURL(`http://wordnik.com/words/${query}#define`) - .setDescription(`(${data.partOfSpeech || 'N/A'}) ${data.text}`); - return msg.embed(embed); + return msg.say(stripIndents` + **${data.word}** + (${data.partOfSpeech || 'N/A'}) ${data.text} + `); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/search/flickr.js b/commands/search/flickr.js index 07282ab9..4eef725d 100644 --- a/commands/search/flickr.js +++ b/commands/search/flickr.js @@ -1,5 +1,4 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); const { FLICKR_KEY } = process.env; @@ -11,7 +10,6 @@ module.exports = class FlickrCommand extends Command { group: 'search', memberName: 'flickr', description: 'Searches Flickr for your query.', - clientPermissions: ['EMBED_LINKS'], args: [ { key: 'query', @@ -35,13 +33,7 @@ module.exports = class FlickrCommand extends Command { }); if (!body.photos.photo.length) return msg.say('Could not find any results.'); const data = body.photos.photo[Math.floor(Math.random() * body.photos.photo.length)]; - const embed = new MessageEmbed() - .setAuthor('Flickr', 'https://i.imgur.com/8QPPlV9.png') - .setColor(0x0059D4) - .setImage(`https://farm${data.farm}.staticflickr.com/${data.server}/${data.id}_${data.secret}.jpg`) - .setTitle(data.title) - .setURL(`https://www.flickr.com/photos/${data.owner}/${data.id}`); - return msg.embed(embed); + return msg.say(`https://farm${data.farm}.staticflickr.com/${data.server}/${data.id}_${data.secret}.jpg`); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/search/giphy.js b/commands/search/giphy.js index 7e35ce72..503e7ac1 100644 --- a/commands/search/giphy.js +++ b/commands/search/giphy.js @@ -1,5 +1,4 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); const { GIPHY_KEY } = process.env; @@ -11,7 +10,6 @@ module.exports = class GiphyCommand extends Command { group: 'search', memberName: 'giphy', description: 'Searches Giphy for your query.', - clientPermissions: ['EMBED_LINKS'], args: [ { key: 'query', @@ -32,17 +30,7 @@ module.exports = class GiphyCommand extends Command { rating: msg.channel.nsfw ? 'r' : 'pg' }); if (!body.data.length) return msg.say('Could not find any results.'); - const data = body.data[Math.floor(Math.random() * body.data.length)]; - const embed = new MessageEmbed() - .setAuthor('Giphy', 'https://i.imgur.com/rWphUCU.jpg') - .setColor(0x4C177F) - .setURL(data.url) - .setImage(data.images.original.url.replace(/\?fingerprint=.+/gi, '')) - .addField('❯ Uploader', - data.username || 'N/A', true) - .addField('❯ Upload Date', - new Date(data.import_datetime).toDateString(), true); - return msg.embed(embed); + return msg.say(body.data[Math.floor(Math.random() * body.data.length)].images.original.url); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/search/jisho.js b/commands/search/jisho.js index 74500340..db81c672 100644 --- a/commands/search/jisho.js +++ b/commands/search/jisho.js @@ -1,6 +1,6 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); +const { stripIndents } = require('common-tags'); module.exports = class JishoCommand extends Command { constructor(client) { @@ -10,7 +10,6 @@ module.exports = class JishoCommand extends Command { group: 'search', memberName: 'jisho', description: 'Defines a word, but with Japanese.', - clientPermissions: ['EMBED_LINKS'], args: [ { key: 'query', @@ -28,13 +27,10 @@ module.exports = class JishoCommand extends Command { .query({ keyword: query }); if (!body.data.length) return msg.say('Could not find any results.'); const data = body.data[0]; - const embed = new MessageEmbed() - .setAuthor('Jisho', 'https://i.imgur.com/CBJZe2m.png') - .setColor(0x0BC510) - .setTitle(data.japanese[0].word) - .setURL(`http://jisho.org/word/${data.japanese[0].word}`) - .setDescription(data.senses[0].english_definitions.join(', ')); - return msg.embed(embed); + return msg.say(stripIndents` + **${data.japanese[0].word}** + ${data.senses[0].english_definitions.join(', ')} + `); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/search/safebooru.js b/commands/search/safebooru.js index a9162b03..8c1ce2ae 100644 --- a/commands/search/safebooru.js +++ b/commands/search/safebooru.js @@ -1,12 +1,7 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); const { xml2js } = require('xml-js'); -const { shorten } = require('../../structures/Util'); -const ratings = { - s: 'Safe', - q: 'Questionable' -}; +const { stripIndents } = require('common-tags'); module.exports = class SafebooruCommand extends Command { constructor(client) { @@ -16,13 +11,11 @@ module.exports = class SafebooruCommand extends Command { group: 'search', memberName: 'safebooru', description: 'Searches Safebooru for your query.', - clientPermissions: ['EMBED_LINKS'], args: [ { key: 'query', prompt: 'What image would you like to search for?', - type: 'string', - default: '' + type: 'string' } ] }); @@ -40,21 +33,10 @@ module.exports = class SafebooruCommand extends Command { }); const parsed = xml2js(text, { compact: true }).posts; if (parsed._attributes.count === '0' || !parsed.post.length) return msg.say('Could not find any results.'); - const posts = msg.channel.nsfw ? parsed.post : parsed.post.filter(post => post._attributes.rating === 's'); - if (!posts.length) return msg.say('Could not find any results.'); - const data = posts[Math.floor(Math.random() * posts.length)]._attributes; - const embed = new MessageEmbed() - .setAuthor('Safebooru', 'https://i.imgur.com/iGMNwhf.jpg') - .setColor(0xC6D2E1) - .setURL(`http://safebooru.org/index.php?page=post&s=view&id=${data.id}`) - .setImage(`https:${data.file_url}`) - .addField('❯ Upload Date', - new Date(data.created_at).toDateString(), true) - .addField('❯ Rating', - ratings[data.rating], true) - .addField('❯ Tags', - shorten(data.tags, 1000)); - return msg.embed(embed); + return msg.say(stripIndents` + Result for ${query}: + http:${parsed.post.posts[Math.floor(Math.random() * parsed.post.posts.length)]._attributes.file_url} + `); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/search/thesaurus.js b/commands/search/thesaurus.js index b03d1e47..216b1dd4 100644 --- a/commands/search/thesaurus.js +++ b/commands/search/thesaurus.js @@ -1,6 +1,6 @@ const Command = require('../../structures/Command'); -const { MessageEmbed } = require('discord.js'); const snekfetch = require('snekfetch'); +const { stripIndents } = require('common-tags'); const { WORDNIK_KEY } = process.env; module.exports = class ThesaurusCommand extends Command { @@ -11,7 +11,6 @@ module.exports = class ThesaurusCommand extends Command { group: 'search', memberName: 'thesaurus', description: 'Gets the synonyms and antonyms of a word.', - clientPermissions: ['EMBED_LINKS'], args: [ { key: 'query', @@ -35,16 +34,11 @@ module.exports = class ThesaurusCommand extends Command { if (!body.length) return msg.say('Could not find any results.'); const synonyms = body.find(i => i.relationshipType === 'synonym'); const antonyms = body.find(i => i.relationshipType === 'antonym'); - const embed = new MessageEmbed() - .setAuthor('Wordnik', 'https://i.imgur.com/VcLZLXn.jpg') - .setColor(0xFE6F11) - .setTitle(query) - .setURL(`http://wordnik.com/words/${query}#relate`) - .addField('❯ Synonyms', - synonyms ? synonyms.words.join(', ') : 'N/A') - .addField('❯ Antonyms', - antonyms ? antonyms.words.join(', ') : 'N/A'); - return msg.embed(embed); + return msg.say(stripIndents` + **${query}** + __Synonyms:__ ${synonyms ? synonyms.words.join(', ') : 'N/A'} + __Antonyms:__ ${antonyms ? antonyms.words.join(', ') : 'N/A'} + `); } catch (err) { return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); } diff --git a/commands/text-edit/translate.js b/commands/text-edit/translate.js index 304e07c6..68eea301 100644 --- a/commands/text-edit/translate.js +++ b/commands/text-edit/translate.js @@ -67,9 +67,7 @@ module.exports = class TranslateCommand extends Command { }); const lang = body.lang.split('-'); const embed = new MessageEmbed() - .setAuthor('Yandex.Translate', 'https://i.imgur.com/HMpH9sq.png') .setColor(0xFF0000) - .setURL(`https://translate.yandex.com/?lang=${body.lang}&text=${encodeURIComponent(text)}`) .addField(`❯ From: ${codes[lang[0]]}`, text) .addField(`❯ To: ${codes[lang[1]]}`, diff --git a/package.json b/package.json index 1abe4326..0ca914c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiaobot", - "version": "42.15.1", + "version": "42.15.2", "description": "Your personal server companion.", "main": "Shard.js", "scripts": { diff --git a/structures/Command.js b/structures/Command.js index cb15945b..04de0a6b 100644 --- a/structures/Command.js +++ b/structures/Command.js @@ -4,7 +4,8 @@ class XiaoCommand extends Command { constructor(client, info) { super(client, info); - this.ownerOnly = info.ownerOnly; + this.ownerOnly = !!info.ownerOnly; + this.nsfw = !!info.nsfw; this.throttling = info.throttling || { usages: 1, duration: 2 @@ -17,6 +18,7 @@ class XiaoCommand extends Command { if (this.ownerOnly && !this.client.isOwner(msg.author)) { return `The \`${this.name}\` command can only be used by the bot owner.`; } + if (this.nsfw && !msg.channel.nsfw) return `The \`${this.name}\` command can only be used in NSFW channels.`; return true; } }