diff --git a/bot/index.js b/bot/index.js index 9e05ada..93f8003 100644 --- a/bot/index.js +++ b/bot/index.js @@ -23,6 +23,7 @@ class WoomyClient extends Discord.Client { // Essential modules this.logger = Logger; + this.MessageEmbed = Discord.MessageEmbed; this.db = new Database(this); this.functions = new Functions(this); this.commandLoader = new CommandLoader(this); diff --git a/bot/util/embed.js b/bot/util/embed.js deleted file mode 100644 index c9a79e9..0000000 --- a/bot/util/embed.js +++ /dev/null @@ -1,155 +0,0 @@ -const colours = require('../assets/colours.json'); -const HEX_REGEX = /#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; - -class RichEmbed { - /** - * @param {EmbedData} data - */ - constructor (data = {}) { - if (data.title) this.title = data.title; - if (data.description) this.description = data.description; - if (data.url) this.url = data.url; - if (data.timestamp) this.timestamp = data.timestamp; - if (data.color) this.color = data.color; - if (data.footer) this.footer = data.footer; - if (data.image) this.image = data.image; - if (data.thumbnail) this.thumbnail = data.thumbnail; - if (data.author) this.author = data.author; - this.fields = data.fields || []; - } - - /** - * @param {String} title - */ - setTitle (title) { - if (typeof title !== 'string') throw new TypeError(`Expected type 'string', received type '${typeof title}'`); - if (title.length > 256) throw new RangeError('Embed titles cannot exceed 256 characters'); - this.title = title; - return this; - } - - /** - * @param {String} description - */ - setDescription (description) { - if (typeof description !== 'string') throw new TypeError(`Expected type 'string', received type '${typeof description}'`); - if (description.length > 2048) throw new RangeError('Embed titles cannot exceed 2048 characters'); - this.description = description; - return this; - } - - /** - * @param {String} url - */ - setURL (url) { - if (typeof url !== 'string') throw new TypeError(`Expected type 'string', received type '${typeof url}'`); - this.url = url; - return this; - } - - /** - * @param {DateConstructor} [timestamp] - */ - setTimestamp (timestamp = new Date()) { - if (Number.isNaN(new Date(timestamp).getTime())) throw new Error('Invalid Date'); - this.timestamp = new Date(timestamp); - return this; - } - - /** - * @param {String|Number} color - */ - setColour (color) { - const resolvedColour = colours[color.toUpperCase()]; - if (resolvedColour) color = resolvedColour; - - if (typeof color !== 'string' && typeof color !== 'number') throw new TypeError(`Expected types 'string' or 'number', received type ${typeof color} instead`); - if (typeof color === 'number') { - if (color > 16777215 || color < 0) throw new RangeError('Invalid color'); - this.color = color; - } else { - const match = color.match(HEX_REGEX); - if (!match) throw new Error('Invalid color'); - this.color = parseInt(match[1], 16); - } - - return this; - } - - /** - * @param {String} text - * @param {String} [iconURL] - */ - setFooter (text, iconURL) { - if (typeof text !== 'string') throw new TypeError(`Expected type 'string', received type ${typeof text}`); - if (text.length > 2048) throw new RangeError('Embed footer texts cannot exceed 2048 characters'); - this.footer = { text }; - - if (iconURL !== undefined) { - if (typeof iconURL !== 'string') throw new TypeError(`Expected type 'string', received type '${typeof iconURL}'`); - this.footer.icon_url = iconURL; - } - - return this; - } - - /** - * @param {String} imageURL - */ - setImage (imageURL) { - if (typeof imageURL !== 'string') throw new TypeError(`Expected type 'string', received type ${typeof imageURL}`); - this.image = { url: imageURL }; - return this; - } - - /** - * @param {String} thumbnailURL - */ - setThumbnail (thumbnailURL) { - if (typeof thumbnailURL !== 'string') throw new TypeError(`Expected type 'string', received type ${typeof thumbnailURL}`); - this.thumbnail = { url: thumbnailURL }; - return this; - } - - /** - * @param {String} name - * @param {String} [url] - * @param {String} [iconURL] - */ - setAuthor (name, url, iconURL) { - if (typeof name !== 'string') throw new TypeError(`Expected type 'string', received type ${typeof name}`); - if (name.length > 256) throw new RangeError('Embed footer texts cannot exceed 2048 characters'); - this.author = { name }; - - if (url !== undefined) { - if (typeof url !== 'string') throw new TypeError(`Expected type 'string', received type '${typeof url}'`); - this.author.url = url; - } - - if (iconURL !== undefined) { - if (typeof iconURL !== 'string') throw new TypeError(`Expected type 'string', received type '${typeof iconURL}'`); - this.author.icon_url = iconURL; - } - - return this; - } - - /** - * @param {String} name - * @param {String} value - * @param {Boolean} [inline] - */ - addField (name, value, inline = false) { - if (this.fields.length >= 25) throw new RangeError('Embeds cannot contain more than 25 fields'); - if (typeof name !== 'string') throw new TypeError(`Name field expected type 'string', received type ${typeof name}`); - if (typeof value !== 'string') throw new TypeError(`Value field expected type 'string', received type ${typeof value}`); - if (typeof inline !== 'boolean') throw new TypeError(`Inline field expected type 'boolean', received type ${typeof inline}`); - if (name.length > 256) throw new RangeError('Embed field names cannot exceed 256 characters'); - if (value.length > 1024) throw new RangeError('Embed field names cannot exceed 256 characters'); - - this.fields.push({ name, value, inline }); - return this; - } -} - -module.exports = RichEmbed; \ No newline at end of file