use native d.js embed generator
This commit is contained in:
parent
a7331e789f
commit
3441d15c95
2 changed files with 1 additions and 155 deletions
|
@ -23,6 +23,7 @@ class WoomyClient extends Discord.Client {
|
||||||
|
|
||||||
// Essential modules
|
// Essential modules
|
||||||
this.logger = Logger;
|
this.logger = Logger;
|
||||||
|
this.MessageEmbed = Discord.MessageEmbed;
|
||||||
this.db = new Database(this);
|
this.db = new Database(this);
|
||||||
this.functions = new Functions(this);
|
this.functions = new Functions(this);
|
||||||
this.commandLoader = new CommandLoader(this);
|
this.commandLoader = new CommandLoader(this);
|
||||||
|
|
|
@ -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;
|
|
Loading…
Reference in a new issue