@discord-additions/embed-builder
Version:
Some helpful additions to make creating embeds easier.
260 lines • 13.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class EmbedBuilder {
static loadFromJSON(json, forceSingular) {
if (Array.isArray(json)) {
const val = json.map((v) => EmbedBuilder.loadFromJSON(v));
return forceSingular ? val[0] : val;
}
else
return new EmbedBuilder().load(json);
}
json = {};
/**
* load json into this embed builder instance - use static loadFromJSON method
*
* @private
* @param {EmbedOptions} json - the json to load
* @returns {this}
*/
load(json) {
this.json = json;
return this;
}
/**
* set the embed author
*
* @param {string} name - the name of the author
* @param {string} [iconURL] - an icon url for the author
* @param {string} [url] - a url for the author
* @returns {this}
*/
setAuthor(name, iconURL, url) {
this.json.author = {
name,
iconURL,
url
};
return this;
}
/**
* get the current author
*
* @returns {(EmbedAuthorOptions | undefined)}
*/
getAuthor() { return this.json.author; }
/**
* remove the current author
*
* @returns {this}
*/
removeAuthor() { this.json.author = undefined; return this; }
/**
* set the embed color
*
* @param {number} color - the color
* @returns {this}
*/
setColor(color) {
this.json.color = color;
return this;
}
/**
* get the current color
*
* @returns {(number | undefined)}
*/
getColor() { return this.json.color; }
/**
* remove the current color
*
* @returns {this}
*/
removeColor() { this.json.color = undefined; return this; }
/**
* set the embed description
*
* @param {...(string | Array<string>)} value - the description value
* @returns {this}
*/
setDescription(first, ...other) { this.json.description = [...(Array.isArray(first) ? first : [first]), ...(other.map(o => [...(Array.isArray(o) ? o : [o])].join("\n")))].join("\n"); return this; }
/**
* get the current description
*
* @returns {(string | undefined)}
*/
getDescription() { return this.json.description; }
/**
* remove the current description
*
* @returns {this}
*/
removeDescription() { this.json.description = undefined; return this; }
/**
* add a field to the embed
*
* @param {string} name - the field name
* @param {string} value - the field value
* @param {boolean} [inline] - if the field should be inline
* @returns {this}
*/
addField(name, value, inline) { this.json.fields = [...(this.json.fields ?? []), { name, value, inline }]; return this; }
/**
* add a blank field to the embed (zero width spaces)
*
* @param {boolean} [inline] - if the field should be inline
* @returns {this}
*/
addBlankField(inline) { return this.addField("\u200b", "\u200b", inline); }
/**
* get the field at the specified index
*
* @param {number} index - the index of the field to get
* @returns {this}
*/
getField(index) { return (this.json.fields ?? [])[index]; }
/**
* add multiple raw fields
*
* @param {...EmbedField} args - the fields to add
* @returns {this}
*/
addFields(...args) { args.forEach(arg => this.addField(arg.name, arg.value, arg.inline)); return this; }
/**
* get the current fields
*
* @returns {Array<EmbedField>}
*/
getFields() { return (this.json.fields ?? []); }
/**
* set the embed footer
*
* @param {string} text - the text
* @param {string} [iconURL] - the icon url
* @returns {this}
*/
setFooter(text, iconURL) { this.json.footer = { text, iconURL }; return this; }
/**
* get the current footer
*
* @returns {(string | undefined)}
*/
getFooter() { return this.json.footer; }
/**
* remove the current footer
*
* @returns {this}
*/
removeFooter() { this.json.footer = undefined; return this; }
/**
* set the embed image
*
* @param {string} url - image url
* @returns {this}
*/
setImage(url) { this.json.image = { url }; return this; }
/**
* get the current image
*
* @returns {(EmbedImageOptions | undefined)}
*/
getImage() { return this.json.image; }
/**
* remove the current image
*
* @returns {this}
*/
removeImage() { this.json.image = undefined; return this; }
/**
* set the embed thumbnail
*
* @param {string} url - thumbnail url
* @returns {this}
*/
setThumbnail(url) { this.json.thumbnail = { url }; return this; }
/**
* get the current thumbnail
*
* @returns {(EmbedImageOptions | undefined)}
*/
getThumbnail() { return this.json.thumbnail; }
/**
* remove the current thumbnail
*
* @returns {this}
*/
removeThumbnail() { this.json.thumbnail = undefined; return this; }
/**
* set the embed timestamp
*
* @param {(string | Date | "now")} time - an iso timestamp, Date object, or "now"
* @returns {this}
*/
setTimestamp(time) {
if (time === "now")
time = new Date().toISOString();
if (time instanceof Date)
time = time.toISOString();
this.json.timestamp = time;
return this;
}
/**
* get the current timestamp
*
* @returns {(string | undefined)}
*/
getTimestamp() { return this.json.timestamp; }
/**
* get the current timestamp as a date object
*
* @returns {(Date | undefined)}
*/
getTimestampDate() { return !this.json.timestamp ? undefined : new Date(this.json.timestamp); }
/**
* remove the current timestamp
*
* @returns {this}
*/
removeTimestamp() { this.json.timestamp = undefined; return this; }
/**
* set the embed title
*
* @param {string} title - the title
* @returns {this}
*/
setTitle(title) { this.json.title = title; return this; }
/**
* get the current title
*
* @returns {(string | undefined)}
*/
getTitle() { return this.json.title; }
/**
* remove the current title
*
* @returns {this}
*/
removeTitle() { this.json.title = undefined; return this; }
/**
* set the embed url
*
* @param {string} url - the url
* @returns {this}
*/
setURL(url) { this.json.url = url; return this; }
/**
* get the current url
*
* @returns {(string | undefined)}
*/
getURL() { return this.json.url; }
/**
* remove the current url
*
* @returns {this}
*/
removeURL() { this.json.url = undefined; return this; }
toJSON(array = false) { return array ? [this.json] : this.json; }
}
exports.default = EmbedBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1iZWRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0VtYmVkQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE1BQXFCLFlBQVk7SUFVaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUF3QyxFQUFFLGFBQXVCO1FBQ3BGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1NBQ3BDOztZQUFNLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNPLElBQUksR0FBaUIsRUFBRSxDQUFDO0lBQ2hDOzs7Ozs7T0FNRztJQUNLLElBQUksQ0FBQyxJQUFrQjtRQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxDQUFDLElBQVksRUFBRSxPQUFnQixFQUFFLEdBQVk7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDbEIsSUFBSTtZQUNKLE9BQU87WUFDUCxHQUFHO1NBQ0gsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEM7Ozs7T0FJRztJQUNILFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FB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