@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
90 lines (88 loc) • 3.35 kB
JavaScript
import { __name } from '../../chunk-PAWJFY3S.mjs';
import { SnowflakeRegex, MessageLinkRegex, ChannelMessageRegex } from '@sapphire/discord-utilities';
import { isStageChannel, isGuildBasedChannel, isTextBasedChannel, isAnyInteraction, isNewsChannel, isTextChannel } from '@sapphire/discord.js-utilities';
import { container } from '@sapphire/pieces';
import { Result } from '@sapphire/result';
import { PermissionFlagsBits } from 'discord.js';
import { Identifiers } from '../errors/Identifiers.mjs';
async function resolveMessage(parameter, options) {
const message = await resolveById(parameter, options) ?? await resolveByLink(parameter, options) ?? await resolveByChannelAndMessage(parameter, options);
if (message) {
return Result.ok(message);
}
return Result.err(Identifiers.ArgumentMessageError);
}
__name(resolveMessage, "resolveMessage");
function resolveById(parameter, options) {
if (!SnowflakeRegex.test(parameter) || isStageChannel(options.messageOrInteraction.channel)) {
return null;
}
if (options.channel && !isStageChannel(options.channel)) {
return options.channel.messages.fetch(parameter);
}
if (options.scan && isGuildBasedChannel(options.messageOrInteraction.channel)) {
for (const channel of options.messageOrInteraction.channel.guild.channels.cache.values()) {
if (!isTextBasedChannel(channel) || isStageChannel(channel)) {
continue;
}
const message = channel.messages.cache.get(parameter);
if (message) {
return message;
}
}
}
return options.messageOrInteraction.channel?.messages.fetch(parameter) ?? null;
}
__name(resolveById, "resolveById");
async function resolveByLink(parameter, options) {
if (!options.messageOrInteraction.guild) {
return null;
}
const matches = MessageLinkRegex.exec(parameter);
if (!matches) {
return null;
}
const [, guildId, channelId, messageId] = matches;
const guild = container.client.guilds.cache.get(guildId);
if (guild !== options.messageOrInteraction.guild) {
return null;
}
return getMessageFromChannel(
channelId,
messageId,
isAnyInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author
);
}
__name(resolveByLink, "resolveByLink");
async function resolveByChannelAndMessage(parameter, options) {
const result = ChannelMessageRegex.exec(parameter)?.groups;
if (!result) {
return null;
}
return getMessageFromChannel(
result.channelId,
result.messageId,
isAnyInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author
);
}
__name(resolveByChannelAndMessage, "resolveByChannelAndMessage");
async function getMessageFromChannel(channelId, messageId, originalAuthor) {
const channel = container.client.channels.cache.get(channelId);
if (!channel) {
return null;
}
if (!(isNewsChannel(channel) || isTextChannel(channel))) {
return null;
}
if (!channel.viewable) {
return null;
}
if (!channel.permissionsFor(originalAuthor)?.has(PermissionFlagsBits.ViewChannel)) {
return null;
}
return channel.messages.fetch(messageId);
}
__name(getMessageFromChannel, "getMessageFromChannel");
export { resolveMessage };
//# sourceMappingURL=message.mjs.map
//# sourceMappingURL=message.mjs.map