TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 1 | import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction } from "discord.js"; |
TheCodedProf | f86ba09 | 2023-01-27 17:10:07 -0500 | [diff] [blame] | 2 | import type { SlashCommandSubcommandBuilder } from "discord.js"; |
pineafan | 813bdf4 | 2022-07-24 10:39:10 +0100 | [diff] [blame] | 3 | import EmojiEmbed from "../../utils/generateEmojiEmbed.js"; |
TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 4 | import client from "../../utils/client.js"; |
| 5 | import { LoadingEmbed } from "../../utils/defaults.js"; |
pineafan | 813bdf4 | 2022-07-24 10:39:10 +0100 | [diff] [blame] | 6 | |
| 7 | const command = (builder: SlashCommandSubcommandBuilder) => |
Skyler Grey | 11236ba | 2022-08-08 21:13:33 +0100 | [diff] [blame] | 8 | builder.setName("premium").setDescription("Information about Nucleus Premium"); |
pineafan | 813bdf4 | 2022-07-24 10:39:10 +0100 | [diff] [blame] | 9 | |
pineafan | bd02b4a | 2022-08-05 22:01:38 +0100 | [diff] [blame] | 10 | const callback = async (interaction: CommandInteraction): Promise<void> => { |
TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 11 | await interaction.reply({embeds: LoadingEmbed, ephemeral: true}) |
| 12 | const member = await (await interaction.client.guilds.fetch("684492926528651336")).members.fetch(interaction.user.id) |
| 13 | 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 Grey | 75ea917 | 2022-08-06 10:22:23 +0100 | [diff] [blame] | 18 | new EmojiEmbed() |
| 19 | .setTitle("Premium") |
| 20 | .setDescription( |
TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 21 | `*You are not currently in the Clicks Server. To gain access to premium please join.*` + firstDescription |
Skyler Grey | 75ea917 | 2022-08-06 10:22:23 +0100 | [diff] [blame] | 22 | ) |
| 23 | .setEmoji("NUCLEUS.LOGO") |
| 24 | .setStatus("Danger") |
TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 25 | ], components: [new ActionRowBuilder<ButtonBuilder>().addComponents(new ButtonBuilder().setStyle(ButtonStyle.Link).setLabel("Join").setURL("https://discord.gg/bPaNnxe"))] }); |
| 26 | return; |
| 27 | } |
| 28 | const dbMember = await client.database.premium.fetchTotal(interaction.user.id) |
| 29 | let premium; |
| 30 | let count = 0; |
| 31 | if (member.roles.cache.has("1066468879309750313")) { |
| 32 | 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.`; |
| 33 | count = 200; |
| 34 | } else if (member.roles.cache.has("1066465491713003520")) { |
| 35 | premium = `You have Premium tier 1! You can give premium to ${1 - dbMember}.`; |
| 36 | count = 1; |
| 37 | } else if (member.roles.cache.has("1066439526496604194")) { |
| 38 | premium = `You have Premium tier 2! You can give premium to ${3 - dbMember}.`; |
| 39 | count = 3; |
| 40 | } else if (member.roles.cache.has("1066464134322978912")) { |
| 41 | premium = `You have Premium Mod! You already give premium to all servers you have a "manage" permission in.` |
| 42 | count = 3; |
| 43 | } |
| 44 | |
TheCodedProf | fc420b7 | 2023-01-24 17:14:38 -0500 | [diff] [blame] | 45 | 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 | |
| 51 | let closed = false; |
TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 52 | do { |
| 53 | interaction.editReply({ |
| 54 | embeds: [ |
| 55 | new EmojiEmbed() |
| 56 | .setTitle("Premium") |
| 57 | .setDescription( |
TheCodedProf | fc420b7 | 2023-01-24 17:14:38 -0500 | [diff] [blame] | 58 | premium + firstDescription + premiumGuild |
TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 59 | ) |
| 60 | .setEmoji("NUCLEUS.LOGO") |
| 61 | .setStatus("Danger") |
| 62 | ], |
| 63 | components: [ |
| 64 | new ActionRowBuilder<ButtonBuilder>() |
| 65 | .addComponents( |
| 66 | new ButtonBuilder() |
| 67 | .setStyle(ButtonStyle.Primary) |
| 68 | .setLabel("Activate Premium here") |
| 69 | .setCustomId("premiumActivate") |
TheCodedProf | fc420b7 | 2023-01-24 17:14:38 -0500 | [diff] [blame] | 70 | .setDisabled(count <= 0 && hasPremium) |
TheCodedProf | 267563a | 2023-01-21 17:00:57 -0500 | [diff] [blame] | 71 | ) |
| 72 | ] |
| 73 | }); |
| 74 | |
| 75 | const filter = (i: any) => i.customId === "premiumActivate" && i.user.id === interaction.user.id; |
TheCodedProf | fc420b7 | 2023-01-24 17:14:38 -0500 | [diff] [blame] | 76 | let i; |
| 77 | try { |
| 78 | i = await interaction.channel!.awaitMessageComponent({ filter, time: 60000 }); |
| 79 | } catch (e) { |
| 80 | return; |
| 81 | } |
| 82 | if (i) { |
| 83 | i.deferUpdate(); |
| 84 | let guild = i.guild!; |
| 85 | let m = await client.database.premium.fetchTotal(interaction.user.id); |
| 86 | if (count - m <= 0) { |
| 87 | interaction.editReply({ |
| 88 | embeds: [ |
| 89 | new EmojiEmbed() |
| 90 | .setTitle("Premium") |
| 91 | .setDescription( |
| 92 | `You have already activated premium on the maximum amount of servers!` + firstDescription |
| 93 | ) |
TheCodedProf | 1c3ad3c | 2023-01-25 17:58:36 -0500 | [diff] [blame] | 94 | .setEmoji("NUCLEUS.PREMIUMACTIVATE") |
TheCodedProf | fc420b7 | 2023-01-24 17:14:38 -0500 | [diff] [blame] | 95 | .setStatus("Danger") |
| 96 | ], |
| 97 | components: [] |
| 98 | }); |
| 99 | closed = true; |
| 100 | } else { |
| 101 | client.database.premium.addPremium(interaction.user.id, guild.id); |
| 102 | interaction.editReply({ |
| 103 | embeds: [ |
| 104 | new EmojiEmbed() |
| 105 | .setTitle("Premium") |
| 106 | .setDescription( |
| 107 | `You have activated premium on this server!` + firstDescription |
| 108 | ) |
| 109 | .setEmoji("NUCLEUS.LOGO") |
| 110 | .setStatus("Danger") |
| 111 | ], |
| 112 | components: [] |
| 113 | }); |
| 114 | closed = true; |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | } while (!closed); |
pineafan | 63fc5e2 | 2022-08-04 22:04:10 +0100 | [diff] [blame] | 119 | }; |
pineafan | 813bdf4 | 2022-07-24 10:39:10 +0100 | [diff] [blame] | 120 | |
pineafan | 813bdf4 | 2022-07-24 10:39:10 +0100 | [diff] [blame] | 121 | export { command }; |
| 122 | export { callback }; |