// Copyright 2019-2020 Campbell Crowley. All rights reserved.
// Author: Campbell Crowley (dev@campbellcrowley.com)
/**
* @description Creates a {@link Discord~Message}-like object, for a
* message that doesn't actually exist.
* @class
*/
class MessageMaker {
/**
* Forms a Discord~Message similar object from given IDs.
*
* @param {SubModule} self SubModule instance to reference Discord objects.
* @param {string} uId The id of the user who wrote this message.
* @param {string} gId The id of the guild this message is in.
* @param {?string} cId The id of the channel this message was 'sent' in.
* @param {?string} msg The message content.
*/
constructor(self, uId, gId, cId, msg) {
const g = self.client && self.client.guilds.resolve(gId);
const prefix = self.bot.getPrefix(gId);
/**
* @description Always true. Can be used to check if this message was
* created by us.
* @public
* @type {boolean}
* @default
* @constant
*/
this.fabricated = true;
/**
* @description Message author.
* @public
* @type {Discord~User}
* @constant
*/
this.author = self.client && self.client.users.resolve(uId);
/**
* @description Discord.JS Client.
* @public
* @type {Discord~Client}
* @constant
*/
this.client = self.client;
/**
* @description Message author Member.
* @public
* @type {?Discord~GuildMember}
* @constant
*/
this.member = g && g.members.resolve(uId);
/**
* @description Guild.
* @public
* @type {?Discord~Guild}
* @constant
*/
this.guild = g;
/**
* @description TextChannel or DMChannel.
* @public
* @type {Discord~TextChannel|Discord~DMChannel}
* @constant
*/
this.channel = (g && g.channels.resolve(cId)) ||
(self.client && self.client.channels.resolve(uId));
/**
* @description Message content without command prefix.
* @public
* @type {string}
* @constant
*/
this.text = msg;
/**
* @description Message content with command prefix.
* @public
* @type {string}
* @constant
*/
this.content = `${prefix}${msg}`;
/**
* @description Command prefix.
* @public
* @type {string}
* @constant
*/
this.prefix = prefix;
/**
* @description Guild locale setting.
* @public
* @type {?string}
*/
this.locale = self.bot.getLocale && self.bot.getLocale(gId);
/**
* @description Empty soft mention collections for compatibility.
* @public
* @type {{
* members: Discord~Collection,
* users: Discord~Collection,
* roles: Discord~Collection
* }}
* @constant
*/
this.softMentions = {
members: new self.Discord.Collection(),
users: new self.Discord.Collection(),
roles: new self.Discord.Collection(),
},
/**
* @description Empty mention collections for compatibility.
* @public
* @type {{
* channels: Discord~Collection,
* members: Discord~Collection,
* roles: Discord~Collection,
* users: Discord~Collection
* }}
* @constant
*/
this.mentions = {
channels: new self.Discord.Collection(),
members: new self.Discord.Collection(),
roles: new self.Discord.Collection(),
users: new self.Discord.Collection(),
};
}
}
module.exports = MessageMaker;