aboutsummaryrefslogtreecommitdiff
path: root/src/arguments/messageLink.ts
blob: 2a9800c93d02a975df1355bf0ebe7b8996c560e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { type Message } from 'discord.js';
import { type BushArgumentTypeCaster } from '../lib';

export const messageLink: BushArgumentTypeCaster<Promise<Message | null>> = async (_, phrase) => {
	const match = client.consts.regex.messageLink.exec(phrase);
	if (!match || !match.groups) return null;

	const { guild_id, channel_id, message_id } = match.groups;

	if (!guild_id || !channel_id || message_id) return null;

	const guild = client.guilds.cache.get(guild_id);
	if (!guild) return null;

	const channel = guild.channels.cache.get(channel_id);
	if (!channel || (!channel.isText() && !channel.isThread())) return null;

	const message = await channel.messages.fetch(message_id).catch(() => null);
	return message;
};