UNPKG

@sapphire/framework

Version:

Discord bot framework built for advanced and amazing bots.

49 lines (47 loc) 3.32 kB
"use strict"; 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