aboutsummaryrefslogtreecommitdiff
path: root/src/commands/moulberry-bush/solved.ts
blob: ecda1c757d0b5cb58619053c91d7087af06e03d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import { BotCommand, emojis, mappings, type CommandMessage, type SlashMessage } from '#lib';
import assert from 'assert/strict';

export default class Solved extends BotCommand {
	public constructor() {
		super('solved', {
			aliases: ['solved'],
			category: "Moulberry's Bush",
			description: 'A command to mark a support threads as solved.',
			usage: ['solved'],
			examples: ['solved'],
			slash: true,
			channel: 'guild',
			clientPermissions: [],
			userPermissions: [],
			slashGuilds: [mappings.guilds["Moulberry's Bush"]],
			restrictedGuilds: [mappings.guilds["Moulberry's Bush"]]
		});
	}

	public override async exec(message: CommandMessage | SlashMessage) {
		assert(message.inGuild());
		assert(message.channel);

		if (!message.channel.isThread()) return message.util.reply(`${emojis.error} This command can only be used in threads.`);

		const allowed = [mappings.channels['neu-support'], '1006832334638678057'];

		if (!allowed.some((id) => message.channel!.parentId === id))
			return message.util.reply(
				`${emojis.error} This command can only be used in thread that are created in <#${mappings.channels['neu-support']}>.`
			);

		if (message.channel.name.startsWith('[Solved]')) return message.util.reply(`${emojis.error} This thread is already solved.`);

		if (!message.channel.name.startsWith('Support'))
			return message.util.reply(`${emojis.error} This thread is not a support thread.`);

		const newName = `[Solved] ${message.channel.name}`;

		await message.channel.setName(newName);
		await message.util.reply(`${emojis.success} This thread has been marked as solved.`);

		await message.channel.setArchived(true, `${message.author.tag} (${message.author.id}) marked this support thread as solved.`);
	}
}