galactic-bot/structure/extensions/Message.js

67 lines
1.8 KiB
JavaScript

const { Structures } = require('discord.js');
const emojis = require('../../util/emojis.json');
const Message = Structures.extend('Message', (Message) => {
class ExtendedMessage extends Message {
constructor(...args) {
super(...args);
this.command = null; //Will set to command if the message induces a command.
this.args = null;
this.parameters = null;
this._pending = null;
}
async resolve() {
try {
const resolved = this.command.execute(this, {
params: this.parameters,
args: this.args
});
if(resolved instanceof Promise) await resolved;
return { error: false };
} catch(error) {
return { error: true, message: error };
}
}
async respond(str, opts = {}) {
if(typeof str === 'string') {
if(opts.emoji) {
const emoji = emojis[opts.emoji];
if(!emoji) this.command.client.logger.warn(`Invalid emoji provided to command ${this.command.resolveable}: "${opts.emoji}".`);
str = `${emoji} ${str}`;
}
if(opts.reply) str = `<@!${this.author.id}> ${str}`;
}
this._pending = await this.channel.send(str);
return this._pending;
}
async edit(str, opts) {
if(!this.editable) return null;
if(typeof str === 'string') {
if(opts.emoji) str = `${emojis[opts.emoji]} ${str}`;
if(opts.reply) str = `<@!${this.author.id}> ${str}`;
}
return super.edit(str);
}
}
return ExtendedMessage;
});
module.exports = Message;