@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
49 lines (47 loc) • 3.32 kB
JavaScript
;
const require_lib_errors_Identifiers = require('../errors/Identifiers.cjs');
let __sapphire_pieces = require("@sapphire/pieces");
let discord_js = require("discord.js");
let __sapphire_result = require("@sapphire/result");
let __sapphire_discord_js_utilities = require("@sapphire/discord.js-utilities");
let __sapphire_discord_utilities = require("@sapphire/discord-utilities");
//#region src/lib/resolvers/message.ts
async function resolveMessage(parameter, options) {
const message = await resolveById(parameter, options) ?? await resolveByLink(parameter, options) ?? await resolveByChannelAndMessage(parameter, options);
if (message) return __sapphire_result.Result.ok(message);
return __sapphire_result.Result.err(require_lib_errors_Identifiers.Identifiers.ArgumentMessageError);
}
function resolveById(parameter, options) {
if (!__sapphire_discord_utilities.SnowflakeRegex.test(parameter) || (0, __sapphire_discord_js_utilities.isStageChannel)(options.messageOrInteraction.channel)) return null;
if (options.channel && !(0, __sapphire_discord_js_utilities.isStageChannel)(options.channel)) return options.channel.messages.fetch(parameter);
if (options.scan && (0, __sapphire_discord_js_utilities.isGuildBasedChannel)(options.messageOrInteraction.channel)) for (const channel of options.messageOrInteraction.channel.guild.channels.cache.values()) {
if (!(0, __sapphire_discord_js_utilities.isTextBasedChannel)(channel) || (0, __sapphire_discord_js_utilities.isStageChannel)(channel)) continue;
const message = channel.messages.cache.get(parameter);
if (message) return message;
}
return options.messageOrInteraction.channel?.messages.fetch(parameter) ?? null;
}
async function resolveByLink(parameter, options) {
if (!options.messageOrInteraction.guild) return null;
const matches = __sapphire_discord_utilities.MessageLinkRegex.exec(parameter);
if (!matches) return null;
const [, guildId, channelId, messageId] = matches;
if (__sapphire_pieces.container.client.guilds.cache.get(guildId) !== options.messageOrInteraction.guild) return null;
return getMessageFromChannel(channelId, messageId, (0, __sapphire_discord_js_utilities.isAnyInteraction)(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author);
}
async function resolveByChannelAndMessage(parameter, options) {
const result = __sapphire_discord_utilities.ChannelMessageRegex.exec(parameter)?.groups;
if (!result) return null;
return getMessageFromChannel(result.channelId, result.messageId, (0, __sapphire_discord_js_utilities.isAnyInteraction)(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author);
}
async function getMessageFromChannel(channelId, messageId, originalAuthor) {
const channel = __sapphire_pieces.container.client.channels.cache.get(channelId);
if (!channel) return null;
if (!((0, __sapphire_discord_js_utilities.isNewsChannel)(channel) || (0, __sapphire_discord_js_utilities.isTextChannel)(channel))) return null;
if (!channel.viewable) return null;
if (!channel.permissionsFor(originalAuthor)?.has(discord_js.PermissionFlagsBits.ViewChannel)) return null;
return channel.messages.fetch(messageId);
}
//#endregion
exports.resolveMessage = resolveMessage;
//# sourceMappingURL=message.cjs.map