module.exports = { CommandData: class { constructor(message) { // Get the location of the final period in the message this.finalPeriod = message.content.lastIndexOf('.'); this.isCommand = this.finalPeriod >= 0 ? true : false; // Check if there is a period somewhere in the message to flag as a possible command this.isValid = false; this.args = message.content.slice(0,this.finalPeriod).toLowerCase(); // Grab everything leading up to the final period this.command = message.content.slice(this.finalPeriod + 1).toLowerCase(); // Grab everything after the final period this.author = message.author.username; return this; } validate(dotCommands) { if (this.args.startsWith('http')) return false; if (this.args.startsWith('www')) return false; // Check for and extract the part of the message that's // wrapped in any type of brackets or quotes eg. ([{``''""}]) const bracketStart = this.args.match(/[\[\(\{\`\'\"\`]/g); const bracketEnd = this.args.match(/[\]\)\}\`\'\"\`]/g); let bracketedText = new String(); if ((bracketStart && bracketEnd) && (bracketStart.length !== bracketEnd.length)) { bracketedText = this.args.slice(this.args.indexOf(bracketStart[0]), this.args.lastIndexOf(bracketEnd[0]) + 1); this.args = this.args.replace(bracketedText, ''); } console.log(bracketedText); for (const [key, value] of dotCommands) { if (key === this.command) { this.isValid = true; return this; } else if (value.alias && value.alias.includes(this.command)) { this.command = key; this.isValid = true; return this; } } return this; } }, GifData: class { constructor() { this.id = 0; this.name = ""; this.url = ""; } // Initial GifData configuration // Can also be used to update the data piecemeal setInfo(name, url, id) { // Check for existing or incoming name if ((this.name === "") && (typeof name !== 'string')) throw `Error: This Gif doesn't have existing name, and no name is going to be set.`; // Check for existing content or incoming content if ((this.url === "") && (typeof url !== 'string')) throw `Error: This Gif doesn't have existing url, and no url is going to be set.`; // Property is set if the variable is the right type, // otherwise it keeps the existing property this.id = typeof id === 'number' ? id : this.id; this.name = typeof name === 'string' ? name : this.name; this.url = typeof url === 'string' ? url : this.url; return this; // For chaining } }, PastaData: class { constructor() { this.id = 0; this.name = ""; this.content = ""; this.iconUrl = ""; } // Initial PastaData configuration // Can also be used to update the data piecemeal setInfo(name, content, iconUrl, id) { // Check for existing or incoming name if ((this.name === "") && (typeof name !== 'string')) throw `Error: This Pasta doesn't have existing name, and no name is going to be set.`; // Check for existing content or incoming content if ((this.content === "") && (typeof content !== 'string')) throw `Error: This Pasta doesn't have existing content, and no content is going to be set.`; // Property is set if the variable is the right type, // otherwise it keeps the existing property this.id = typeof id === 'number' ? id : this.id; this.name = typeof name === 'string' ? name : this.name; this.content = typeof content === 'string' ? content : this.content; this.iconUrl = typeof iconUrl === 'string' ? iconUrl : this.iconUrl; return this; // For chaining } } }