blob: 354c3039cc7760fc28fa5d8e90f9983f5b706130 [file] [log] [blame]
TheCodedProf1807fb32023-02-20 14:33:48 -05001import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, ButtonStyle, CommandInteraction } from "discord.js";
TheCodedProff86ba092023-01-27 17:10:07 -05002import type { SlashCommandSubcommandBuilder } from "discord.js";
pineafan813bdf42022-07-24 10:39:10 +01003import EmojiEmbed from "../../utils/generateEmojiEmbed.js";
TheCodedProf267563a2023-01-21 17:00:57 -05004import client from "../../utils/client.js";
5import { LoadingEmbed } from "../../utils/defaults.js";
pineafan813bdf42022-07-24 10:39:10 +01006
7const command = (builder: SlashCommandSubcommandBuilder) =>
Skyler Grey11236ba2022-08-08 21:13:33 +01008 builder.setName("premium").setDescription("Information about Nucleus Premium");
pineafan813bdf42022-07-24 10:39:10 +01009
pineafanbd02b4a2022-08-05 22:01:38 +010010const callback = async (interaction: CommandInteraction): Promise<void> => {
TheCodedProf267563a2023-01-21 17:00:57 -050011 await interaction.reply({embeds: LoadingEmbed, ephemeral: true})
TheCodedProfd0a166d2023-02-19 00:04:53 -050012 const member = (await interaction.client.guilds.fetch("684492926528651336")).members.cache.get(interaction.user.id)
TheCodedProf267563a2023-01-21 17:00:57 -050013 const firstDescription = "\n\nPremium allows your server to get access to extra features, for a fixed price per month.\nThis includes:\n" +
14 "- Attachment logs - Stores attachments so they can be viewed after a message is deleted.\n" +
15 "- Ticket Transcripts - Gives a link to view the history of a ticket after it has been closed.\n"
16 if(!member) {
17 interaction.editReply({ embeds: [
Skyler Grey75ea9172022-08-06 10:22:23 +010018 new EmojiEmbed()
19 .setTitle("Premium")
20 .setDescription(
TheCodedProf267563a2023-01-21 17:00:57 -050021 `*You are not currently in the Clicks Server. To gain access to premium please join.*` + firstDescription
Skyler Grey75ea9172022-08-06 10:22:23 +010022 )
23 .setEmoji("NUCLEUS.LOGO")
24 .setStatus("Danger")
TheCodedProf267563a2023-01-21 17:00:57 -050025 ], components: [new ActionRowBuilder<ButtonBuilder>().addComponents(new ButtonBuilder().setStyle(ButtonStyle.Link).setLabel("Join").setURL("https://discord.gg/bPaNnxe"))] });
26 return;
27 }
TheCodedProf633866f2023-02-03 17:06:00 -050028 const dbMember = await client.database.premium.fetchUser(interaction.user.id)
29 let premium = `You do not have premium! You can't activate premium on any servers.`;
TheCodedProf267563a2023-01-21 17:00:57 -050030 let count = 0;
TheCodedProf1807fb32023-02-20 14:33:48 -050031 const {level, appliesTo} = dbMember ?? {level: 0, appliesTo: []}
TheCodedProf633866f2023-02-03 17:06:00 -050032 if (level === 99) {
TheCodedProf267563a2023-01-21 17:00:57 -050033 premium = `You have Infinite Premium! You have been gifted this by the developers as a thank you. You can give premium to any and all servers you are in.`;
34 count = 200;
TheCodedProf633866f2023-02-03 17:06:00 -050035 } else if (level === 1) {
36 premium = `You have Premium tier 1! You can give premium to ${1 - appliesTo.length} more servers.`;
TheCodedProf267563a2023-01-21 17:00:57 -050037 count = 1;
TheCodedProf633866f2023-02-03 17:06:00 -050038 } else if (level === 2) {
39 premium = `You have Premium tier 2! You can give premium to ${3 - appliesTo.length} more servers.`;
TheCodedProf267563a2023-01-21 17:00:57 -050040 count = 3;
TheCodedProf633866f2023-02-03 17:06:00 -050041 } else if (level === 3) {
42 premium = `You have Premium Mod! You can give premium to ${3 - appliesTo.length} more servers, as well as automatically giving premium to all servers you have a "manage" permission in.`
TheCodedProf267563a2023-01-21 17:00:57 -050043 count = 3;
44 }
TheCodedProffc420b72023-01-24 17:14:38 -050045 const hasPremium = await client.database.premium.hasPremium(interaction.guild!.id);
46 let premiumGuild = ""
47 if (hasPremium) {
48 premiumGuild = `\n\n**This server has premium!**`
49 }
50
TheCodedProf1807fb32023-02-20 14:33:48 -050051 interaction.editReply({
52 embeds: [
53 new EmojiEmbed()
54 .setTitle("Premium")
55 .setDescription(
56 premium + firstDescription + premiumGuild
57 )
58 .setEmoji("NUCLEUS.LOGO")
59 .setStatus("Danger")
60 ],
61 components: [
62 new ActionRowBuilder<ButtonBuilder>()
63 .addComponents(
64 new ButtonBuilder()
65 .setStyle(ButtonStyle.Primary)
66 .setLabel("Activate Premium here")
67 .setCustomId("premiumActivate")
68 .setDisabled(count <= 0 && hasPremium)
69 )
70 ]
71 });
72
73 const filter = (i: ButtonInteraction) => i.customId === "premiumActivate" && i.user.id === interaction.user.id;
74 let i;
75 try {
76 i = await interaction.channel!.awaitMessageComponent<2>({ filter, time: 60000 });
77 } catch (e) {
78 return;
79 }
80 i.deferUpdate();
81 const guild = i.guild!;
82 if (count - appliesTo.length <= 0) {
TheCodedProf267563a2023-01-21 17:00:57 -050083 interaction.editReply({
84 embeds: [
85 new EmojiEmbed()
86 .setTitle("Premium")
87 .setDescription(
TheCodedProf1807fb32023-02-20 14:33:48 -050088 `You have already activated premium on the maximum amount of servers!` + firstDescription
89 )
90 .setEmoji("NUCLEUS.PREMIUMACTIVATE")
91 .setStatus("Danger")
92 ],
93 components: []
94 });
95 } else {
96 client.database.premium.addPremium(interaction.user.id, guild.id);
97 interaction.editReply({
98 embeds: [
99 new EmojiEmbed()
100 .setTitle("Premium")
101 .setDescription(
102 `You have activated premium on this server!` + firstDescription
TheCodedProf267563a2023-01-21 17:00:57 -0500103 )
104 .setEmoji("NUCLEUS.LOGO")
105 .setStatus("Danger")
106 ],
TheCodedProf1807fb32023-02-20 14:33:48 -0500107 components: []
TheCodedProf267563a2023-01-21 17:00:57 -0500108 });
TheCodedProf1807fb32023-02-20 14:33:48 -0500109 }
pineafan63fc5e22022-08-04 22:04:10 +0100110};
pineafan813bdf42022-07-24 10:39:10 +0100111
pineafan813bdf42022-07-24 10:39:10 +0100112export { command };
113export { callback };