discord-reactions-roles
Version:
A simple and powerful module for adding a reaction role system to your discord.js project
217 lines (216 loc) • 7.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Utils = void 0;
// Import requirements
const discord_emojis_parser_1 = __importDefault(require("discord-emojis-parser"));
const discord_message_parser_1 = require("discord-message-parser");
const discord_js_1 = require("discord.js");
class Utils {
reactionsRoles;
/**
* @constructor
*
* @param {ReactionsRoles} reactionsRoles Reaction Roles Class
*/
constructor(reactionsRoles) {
/**
* Reactions Roles Class
*
* @type {ReactionsRoles}
* @private
*/
this.reactionsRoles = reactionsRoles;
}
/**
* Method for checking module configuration
*
* @param {Options} options Module options
*
* @returns {Options} Valid module configuration
*/
fetchOptions(options) {
if (!options) {
options = {
deleteOldMenus: false,
deleteOldMenusReactions: true,
database: {
name: "reactions_roles",
path: "./"
}
};
}
else {
if (typeof options?.deleteOldMenus != "boolean")
options.deleteOldMenus = false;
if (typeof options?.deleteOldMenusReactions != "boolean")
options.deleteOldMenusReactions = true;
if (!options.database || typeof options.database != "object") {
options.database = {
name: "reactions_roles",
path: "./"
};
}
else {
if (!options.database.name || typeof options.database.name != "string")
options.database.name = "reactions_roles";
if (!options.database.path || typeof options.database.path != "string")
options.database.path = "./";
}
}
return options;
}
/**
* Method for checking client intents
*
* @private
*/
fetchIntents() {
const defaultIntents = [
discord_js_1.GatewayIntentBits.Guilds,
discord_js_1.GatewayIntentBits.GuildMembers,
discord_js_1.GatewayIntentBits.GuildMessages,
discord_js_1.GatewayIntentBits.GuildMessageReactions
];
const clientIntents = new discord_js_1.IntentsBitField(this.reactionsRoles.client.options.intents);
for (const intent of defaultIntents) {
if (!clientIntents.has(intent))
throw new Error(`Missing required client intent: '${discord_js_1.GatewayIntentBits[intent]}'!`);
}
}
/**
* Method for checking client partials
*
* @private
*/
fetchPartials() {
const defaultPartials = [
discord_js_1.Partials.Message,
discord_js_1.Partials.Reaction,
discord_js_1.Partials.User
];
const clientPartials = this.reactionsRoles.client.options.partials;
for (const partial of defaultPartials) {
if (!clientPartials.includes(partial))
throw new Error(`Missing required client partial: '${discord_js_1.Partials[partial]}'!`);
}
}
/**
* Method for parsing emoji content
*
* @param {string} guildID Discord Guild ID
* @param {string} data Emoji content
*
* @returns {ParsedEmoji} Content parsing data
*/
parseEmoji(guildID, data) {
const guild = this.reactionsRoles.client.guilds.cache.get(guildID);
if (!guild)
throw new Error(`Unknown guild with id '${guildID}'!`);
let parsed;
const guildEmoji = guild.emojis.cache.find(e => `<${e.animated ? "a" : ""}:${e.name}:${e.id}>` === data);
if (data.startsWith("<") && data.endsWith(">")) {
const parseData = discord_message_parser_1.EmojiParser.parseEmojis(data);
parsed = {
id: guildEmoji?.id ?? null,
name: guildEmoji?.name ?? null,
raw: parseData.allEmojis[0]?.raw ?? null,
isValid: guildEmoji ? true : parseData.allEmojis[0]?.raw ? parseData.allEmojis[0].raw.includes("<") ? false : true : false,
unicode: parseData.allEmojis[0]?.unicode ?? null,
animated: parseData.allEmojis[0]?.animated ?? null
};
}
else {
const parseData = discord_emojis_parser_1.default.parse(data);
parsed = {
id: guildEmoji?.id ?? null,
name: guildEmoji?.name ?? null,
raw: parseData[0]?.unicode ?? null,
isValid: parseData.length ? true : false,
unicode: parseData.length ? true : false,
animated: false
};
}
return parsed;
}
/**
* A method for getting a text channel
*
* @param {string} guildID Discord Guild ID
* @param {string} channelID Discord Guild Channel ID
*
* @returns {Promise<TextChannel>} Guild Text Channel
*/
getChannel(guildID, channelID) {
return new Promise(async (res, rej) => {
const guild = this.reactionsRoles.client.guilds.cache.get(guildID);
if (!guild)
return rej(new Error(`Unknown guild with ID '${guildID}'!`));
let channel;
try {
channel = guild.channels.cache.get(channelID);
if (!channel)
channel = (await guild.channels.fetch(channelID));
}
catch (error) {
return res(null);
}
return res(channel);
});
}
/**
* Method for receiving a message on a specified channel
*
* @param {string} guildID Discord Guild ID
* @param {string} channelID Discord Guild Channel ID
* @param {string} messageID Discord Guild Message ID
*
* @returns {Promise<Message>} Discord Guild Message
*/
getMessage(guildID, channelID, messageID) {
return new Promise(async (res, rej) => {
const guild = this.reactionsRoles.client.guilds.cache.get(guildID);
if (!guild)
return rej(new Error(`Unknown guild with ID '${guildID}'!`));
let message;
try {
const channel = await this.getChannel(guildID, channelID);
message = channel.messages.cache.get(messageID);
if (!message)
message = (await channel.messages.fetch(messageID));
}
catch (error) {
return res(null);
}
return res(message);
});
}
/**
* A method to get the server member
*
* @param {string} guildID Discord Guild ID
* @param {string} userID Discord User ID
*
* @returns {Promise<GuildMember>} Guild Member Data
*/
getMember(guildID, userID) {
return new Promise(async (res, rej) => {
const guild = this.reactionsRoles.client.guilds.cache.get(guildID);
if (!guild)
return rej(new Error(`Unknown guild with ID '${guildID}'!`));
let member;
try {
member = guild.members.cache.get(userID);
if (!member)
member = (await guild.members.fetch(userID));
}
catch (error) {
return res(null);
}
return res(member);
});
}
}
exports.Utils = Utils;