diff --git a/.env.example b/.env.example
index f671bfd..ab76a48 100644
--- a/.env.example
+++ b/.env.example
@@ -2,5 +2,6 @@ DISCORD_TOKEN=
DISCORD_CLIENT_ID=
DISCORD_GUILD_ID=
MONGO_DB=
+GITHUB_ID=
+GITHUB_SECRET=
webhook=
-SERVER_URL=register-bot.is-a.dev
diff --git a/Dockerfile b/Dockerfile
index 185845f..8c2a669 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,22 +1,9 @@
-FROM node:latest
+FROM node:23
-# Create the directory!
-RUN mkdir -p /usr/src/bot
-WORKDIR /usr/src/bot
+WORKDIR /app
-# Copy and Install our bot
-COPY package.json /usr/src/bot
+COPY package*.json ./
RUN npm install
+COPY . .
-# For Debugging
-#RUN apt-get update && apt-get install -y \
-# nano \
-# curl \
-# git \
-# && rm -rf /var/lib/apt/lists/*
-
-# Our precious bot
-COPY . /usr/src/bot
-
-# Start me!
-CMD ["npm", "start"]
+CMD npm start
diff --git a/OLD/README.md b/OLD/README.md
deleted file mode 100644
index 2f6b155..0000000
--- a/OLD/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-
is-a.dev Discord Bot
-
-
-
-
-
-
-
-
-
-
-> A Discord bot to manage is-a.dev services.
-
-### ๐ [Homepage](https://is-a.dev)
-
-## Install
-
-```sh
-npm i
-```
-
-## Usage
-
-```sh
-npm run start
-```
-
-## Author
-
-๐ค **andrewstech**
-
-- Website: https://andrewstech.me
-- Twitter: [@andrewstech1](https://twitter.com/andrewstech1)
-- Github: [@andrewstech](https://github.com/andrewstech)
-
-## ๐ค Contributing
-
-Contributions, issues and feature requests are welcome!
Feel free to check [issues page](https://github.com/andrewstech/is-a-dev-discord/issues).
-
-## Show your support
-
-Give a โญ๏ธ if this project helped you!
-
-## ๐ License
-
-Copyright ยฉ 2023 [andrewstech1](https://github.com/andrewstech).
-This project is [MIT](https://github.com/andrewstech/is-a-dev-discord/blob/main/LICENSE) licensed.
diff --git a/OLD/commands/activate.js b/OLD/commands/activate.js
deleted file mode 100644
index 78b44eb..0000000
--- a/OLD/commands/activate.js
+++ /dev/null
@@ -1,76 +0,0 @@
-const fetch = require("node-fetch");
-const { SlashCommandBuilder } = require("discord.js");
-const { GuildID } = require("../services/guildId.js");
-const Maintainers = require("../models/maintainers.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("activate")
- .setDescription("Activate a hosts by is-a.dev domain.")
- .addStringOption((option) =>
- option
- .setName("subdomain")
- .setDescription("The subdomain to activate.")
- .setRequired(true),
- ),
- async execute(interaction) {
- const subdomain = interaction.options
- .getString("subdomain")
- .toLowerCase();
- // get the guild id from the interaction
- const guildId = interaction.guildId;
- // get the guild object from the guild id
- const guild = GuildID(guildId);
- // if the guild object is false, then the guild is not registered
- if (!guild)
- return await interaction.reply({
- content:
- "This guild is not registered with Domain Register Bot. Please contact the guild owner to register.",
- ephemeral: true,
- });
- if (!(await Maintainers.findOne({ userid: interaction.user.id }))) {
- // make text appear in ephemeral message
- await interaction.reply({
- content: "Only maintainers can use this command!",
- ephemeral: true,
- });
- return;
- }
-
- if (subdomain.length < 2 || subdomain.length > 64)
- return await interaction.reply(
- "The subdomain length must be between 2 and 64 characters.",
- );
-
- try {
- const response = await fetch(
- `https://hosts.is-a.dev/api/activate?domain=${subdomain}&NOTIFY_TOKEN=${process.env.WEBHOST_TOKEN}`,
- {
- headers: {
- "User-Agent": "is-a-dev-bot",
- },
- },
- );
-
- if (response.status === 200) {
- await interaction.reply(
- `${subdomain}.is-a.dev has been activated!`,
- );
- } else {
- await interaction.reply(
- `Dam something went wrong. The server responded with ${response.status} speak to andrew or Danny`,
- );
- }
- } catch (error) {
- console.error(
- "Error occurred while checking domain availability:",
- error,
- );
- await interaction.reply({
- content:
- "An error occurred while checking the domain activation. Please try again later.",
- ephemeral: true,
- });
- }
- },
-};
diff --git a/OLD/commands/check.js b/OLD/commands/check.js
deleted file mode 100644
index 0bf3d59..0000000
--- a/OLD/commands/check.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const fetch = require("node-fetch");
-const { SlashCommandBuilder } = require("discord.js");
-const { GuildID } = require("../services/guildId.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("check")
- .setDescription("Check if a domain is available.")
- .addStringOption((option) =>
- option
- .setName("subdomain")
- .setDescription("The subdomain to check.")
- .setRequired(true),
- ),
- async execute(interaction) {
- const subdomain = interaction.options
- .getString("subdomain")
- .toLowerCase();
- // get the guild id from the interaction
- const guildId = interaction.guildId;
- // get the guild object from the guild id
- const guild = GuildID(guildId);
- // if the guild object is false, then the guild is not registered
- if (!guild)
- return await interaction.reply({
- content:
- "This guild is not registered with Domain Register Bot. Please contact the guild owner to register.",
- ephemeral: true,
- });
-
- if (subdomain.length < 2 || subdomain.length > 64)
- return await interaction.reply(
- "The subdomain length must be between 2 and 64 characters.",
- );
-
- try {
- const response = await fetch(
- `https://api.github.com/repos/is-a-dev/register/contents/domains/${subdomain}.json`,
- {
- headers: {
- "User-Agent": "is-a-dev-bot",
- },
- },
- );
-
- if (response.status === 404) {
- await interaction.reply(
- `Congratulations, ${subdomain}.is-a.dev is available!`,
- );
- } else {
- await interaction.reply(
- `Sorry, ${subdomain}.is-a.dev is taken!`,
- );
- }
- } catch (error) {
- console.error(
- "Error occurred while checking domain availability:",
- error,
- );
- await interaction.reply({
- content:
- "An error occurred while checking the domain availability. Please try again later.",
- ephemeral: true,
- });
- }
- },
-};
diff --git a/OLD/commands/delete.js b/OLD/commands/delete.js
deleted file mode 100644
index e6deded..0000000
--- a/OLD/commands/delete.js
+++ /dev/null
@@ -1,64 +0,0 @@
-const {
- SlashCommandBuilder,
- StringSelectMenuBuilder,
- ActionRowBuilder,
- MessageSelectMenu,
-} = require("discord.js");
-
-const fetch = require("node-fetch");
-const User = require("../models/user.js");
-const Maintainers = require("../models/maintainers.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("delete")
- .setDescription("Delete a domain."),
- async execute(interaction) {
- const githubUser = await User.findOne({ userid: interaction.user.id });
-
- if (!githubUser) {
- await interaction.reply("You are not logged in!");
- return;
- }
-
- const username = githubUser.githubid;
-
- fetch("https://raw-api.is-a.dev")
- .then((response) => response.json())
- .then(async (data) => {
- let found = false;
- let results = [];
- for (let i = 0; i < data.length; i++) {
- if (
- data[i].owner.username.toLowerCase() ===
- username.toLowerCase()
- ) {
- results.push({
- label: data[i].domain,
- value: data[i].domain,
- });
- found = true;
- }
- }
- if (!found) {
- await interaction.reply("You don't own any domains");
- return;
- } else {
- // Create a select menu
- const select = new StringSelectMenuBuilder()
- .setCustomId("delete")
- .setPlaceholder("Choose a domain to delete!")
- .addOptions(results);
-
- const row = new ActionRowBuilder().addComponents(select);
-
- // Create the text input components
- await interaction.reply({
- content: "Choose the domian you want to delete",
- components: [row],
- ephemeral: true,
- });
- }
- });
- },
-};
diff --git a/OLD/commands/domains.js b/OLD/commands/domains.js
deleted file mode 100644
index 858e5cb..0000000
--- a/OLD/commands/domains.js
+++ /dev/null
@@ -1,119 +0,0 @@
-const {
- SlashCommandBuilder,
- EmbedBuilder,
- ButtonBuilder,
- ActionRowBuilder,
- ButtonStyle,
-} = require("discord.js");
-const fetch = require("node-fetch");
-const auth = require("../components/auth.js");
-const User = require("../models/user.js");
-const { GuildID } = require("../services/guildId.js");
-const Maintainers = require("../models/maintainers.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("domains")
- .setDescription("Lists all domains registered by you!"),
- async execute(interaction) {
- const guildId = interaction.guildId;
- // get the guild object from the guild id
- const guild = GuildID(guildId);
- console.log(guild);
- // if the guild object is false, then the guild is not registereds
- if (!guild)
- return await interaction.reply({
- content:
- "This guild is not registered with Domain Register Bot. Please contact the guild owner to register.",
- ephemeral: true,
- });
- const githubUser = await User.findOne({ userid: interaction.user.id });
- const maintainers = await Maintainers.findOne({
- userid: interaction.user.id,
- });
-
- const authUrl = auth.getAccessToken(interaction.user.id);
- const loginBtn = new ActionRowBuilder().addComponents(
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel("Login with GitHub")
- .setURL(authUrl),
- );
- // add text reply if user is not logged in. along with login button
- if (!githubUser)
- return await interaction.reply({
- content: `Please login first`,
- components: [loginBtn],
- ephemeral: true,
- });
- let found = false;
- let results = [];
- let staffresults = [];
- if (maintainers) {
- const maintainer = "is-a-dev";
-
- await fetch("https://raw-api.is-a.dev")
- .then((response) => response.json())
- .then(async (data) => {
- for (let i = 0; i < data.length; i++) {
- if (
- data[i].owner.username.toLowerCase() ===
- maintainer.toLowerCase()
- ) {
- staffresults.push(data[i].domain);
- }
- }
- });
- }
-
- const username = githubUser.githubid;
-
- fetch("https://raw-api.is-a.dev")
- .then((response) => response.json())
- .then(async (data) => {
- for (let i = 0; i < data.length; i++) {
- if (
- data[i].owner.username.toLowerCase() ===
- username.toLowerCase()
- ) {
- results.push(data[i].domain);
- found = true;
- }
- }
-
- if (found) {
- if (maintainers) {
- const embed = new EmbedBuilder()
- .setTitle("Your Domains")
- .setDescription(results.join("\n"))
- .addFields({
- name: "Staff Domains",
- value: staffresults.join("\n"),
- })
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- iconURL:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.reply({ embeds: [embed] });
- } else {
- const embed = new EmbedBuilder()
- .setTitle("Your Domains")
- .setDescription(results.join("\n"))
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- iconURL:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.reply({ embeds: [embed] });
- }
- } else {
- await interaction.reply("You don't own any domains.");
- }
- });
- },
-};
diff --git a/OLD/commands/edit.js b/OLD/commands/edit.js
deleted file mode 100644
index 196d536..0000000
--- a/OLD/commands/edit.js
+++ /dev/null
@@ -1,71 +0,0 @@
-const {
- SlashCommandBuilder,
- StringSelectMenuBuilder,
- ActionRowBuilder,
- MessageSelectMenu,
-} = require("discord.js");
-
-const fetch = require("node-fetch");
-const User = require("../models/user.js");
-const Maintainers = require("../models/maintainers.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("edit")
- .setDescription("Edit a domain."),
- async execute(interaction) {
- const githubUser = await User.findOne({ userid: interaction.user.id });
- const maintainers = await Maintainers.findOne({
- userid: interaction.user.id,
- });
- if (!maintainers) {
- await interaction.reply("You are not a maintainer!");
- return;
- }
-
- if (!githubUser) {
- await interaction.reply("You are not logged in!");
- return;
- }
-
- const username = githubUser.githubid;
-
- fetch("https://raw-api.is-a.dev")
- .then((response) => response.json())
- .then(async (data) => {
- let found = false;
- let results = [];
- for (let i = 0; i < data.length; i++) {
- if (
- data[i].owner.username.toLowerCase() ===
- username.toLowerCase()
- ) {
- results.push({
- label: data[i].domain,
- value: data[i].domain,
- });
- found = true;
- }
- }
- if (!found) {
- await interaction.reply("You don't own any domains");
- return;
- } else {
- // Create a select menu
- const select = new StringSelectMenuBuilder()
- .setCustomId("edit")
- .setPlaceholder("Choose a domain to edit!")
- .addOptions(results);
-
- const row = new ActionRowBuilder().addComponents(select);
-
- // Create the text input components
- await interaction.reply({
- content: "Choose the domian you want to edit",
- components: [row],
- ephemeral: true,
- });
- }
- });
- },
-};
diff --git a/OLD/commands/feedback.js b/OLD/commands/feedback.js
deleted file mode 100644
index e16c336..0000000
--- a/OLD/commands/feedback.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const {
- SlashCommandBuilder,
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
-} = require("discord.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("feedback")
- .setDescription("Give feedback and suggestions!"),
- async execute(interaction) {
- const modal = new ModalBuilder()
- .setCustomId("feedback")
- .setTitle("Bot Feedback");
-
- // Add components to modal
-
- // Create the text input components
- const improvements = new TextInputBuilder()
- .setCustomId("improve")
- // The label is the prompt the user sees for this input
- .setLabel("What's could be improved?")
- // Short means only a single line of text
- .setStyle(TextInputStyle.Short);
-
- const suggestions = new TextInputBuilder()
- .setCustomId("suggest")
- .setLabel("Do you have any suggestions?")
- // Paragraph means multiple lines of text.
- .setStyle(TextInputStyle.Paragraph);
-
- // An action row only holds one text input,
- // so you need one action row per text input.
- const firstActionRow = new ActionRowBuilder().addComponents(
- improvements,
- );
- const secondActionRow = new ActionRowBuilder().addComponents(
- suggestions,
- );
-
- // Add inputs to the modal
- modal.addComponents(firstActionRow, secondActionRow);
-
- // Show the modal to the user
- await interaction.showModal(modal);
- },
-};
diff --git a/OLD/commands/login.js b/OLD/commands/login.js
deleted file mode 100644
index 1795e6a..0000000
--- a/OLD/commands/login.js
+++ /dev/null
@@ -1,45 +0,0 @@
-const {
- SlashCommandBuilder,
- ButtonBuilder,
- ActionRowBuilder,
- ButtonStyle,
-} = require("discord.js");
-
-const auth = require("../components/auth.js");
-const User = require("../models/user.js");
-const { GuildID } = require("../services/guildId.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("login")
- .setDescription("Login with GitHub."),
- async execute(interaction) {
- const guildId = interaction.guildId;
- // get the guild object from the guild id
- const guild = GuildID(guildId);
- // if the guild object is false, then the guild is not registered
- if (!guild)
- return await interaction.reply({
- content:
- "This guild is not registered with Domain Register Bot. Please contact the guild owner to register.",
- ephemeral: true,
- });
- if (await User.findOne({ userid: interaction.user.id }))
- return await interaction.reply({
- content: "You are already logged in!",
- ephemeral: true,
- });
-
- const authUrl = auth.getAccessToken(interaction.user.id);
-
- // reply with login button using ButtonBuilder
- const loginBtn = new ActionRowBuilder().addComponents(
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel("Login with GitHub")
- .setURL(authUrl),
- );
-
- await interaction.reply({ components: [loginBtn], ephemeral: true });
- },
-};
diff --git a/OLD/commands/logout.js b/OLD/commands/logout.js
deleted file mode 100644
index 444bd71..0000000
--- a/OLD/commands/logout.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const {
- ActionRowBuilder,
- ButtonBuilder,
- ButtonStyle,
- SlashCommandBuilder,
-} = require("discord.js");
-const User = require("../models/user.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("logout")
- .setDescription("Logout from the bot."),
- async execute(interaction) {
- if (!(await User.findOne({ userid: interaction.user.id })))
- return await interaction.reply({
- content: "You are not logged in!",
- ephemeral: true,
- });
-
- const confirm = new ButtonBuilder()
- .setCustomId("confirm")
- .setLabel("Confirm Logout")
- .setStyle(ButtonStyle.Danger);
-
- const cancel = new ButtonBuilder()
- .setCustomId("cancel")
- .setLabel("Cancel")
- .setStyle(ButtonStyle.Secondary);
-
- const row = new ActionRowBuilder().addComponents(cancel, confirm);
-
- //await User.findOneAndDelete({ userid: interaction.user.id });
- const response = await interaction.reply({
- content: `Are you sure you want to logout?`,
- components: [row],
- ephemeral: true,
- });
-
- const collectorFilter = (i) => i.user.id === interaction.user.id;
-
- try {
- const confirmation = await response.awaitMessageComponent({
- filter: collectorFilter,
- time: 60000,
- });
- if (confirmation.customId === "confirm") {
- await User.findOneAndDelete({ userid: interaction.user.id });
- await confirmation.update({
- content: `Logged out.`,
- components: [],
- });
- } else if (confirmation.customId === "cancel") {
- await confirmation.update({
- content: "Action cancelled",
- components: [],
- });
- }
- } catch (e) {
- await interaction.editReply({
- content:
- "Confirmation not received within 1 minute, cancelling",
- components: [],
- });
- return;
- }
- },
-};
diff --git a/OLD/commands/ping.js b/OLD/commands/ping.js
deleted file mode 100644
index c2e330e..0000000
--- a/OLD/commands/ping.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const { SlashCommandBuilder } = require("discord.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("ping")
- .setDescription("Replies with Pong!"),
- async execute(interaction) {
- await interaction.reply("Pong!");
- },
-};
diff --git a/OLD/commands/register.js b/OLD/commands/register.js
deleted file mode 100644
index fdb2cf9..0000000
--- a/OLD/commands/register.js
+++ /dev/null
@@ -1,134 +0,0 @@
-const {
- SlashCommandBuilder,
- EmbedBuilder,
- ButtonBuilder,
- ActionRowBuilder,
- ButtonStyle,
-} = require("discord.js");
-const { fork } = require("../components/fork.js");
-const auth = require("../components/auth.js");
-const { CommitChanges } = require("../components/commit.js");
-const { OpenPR } = require("../components/pr.js");
-const User = require("../models/user.js");
-const { GuildID } = require("../services/guildId.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("register")
- .setDescription("Register an is-a.dev Subdomain!")
- .addStringOption((option) =>
- option
- .setName("subdomain")
- .setDescription("Enter the subdomain")
- .setRequired(true),
- )
- .addStringOption((option) =>
- option
- .setName("record_type")
- .setDescription("Select the record type")
- .setRequired(true)
- .addChoices(
- { name: "A", value: "A" },
- { name: "CNAME", value: "CNAME" },
- { name: "MX", value: "MX" },
- { name: "TXT", value: "TXT" },
- { name: "URL", value: "URL" },
- ),
- )
- .addStringOption((option) =>
- option
- .setName("content")
- .setDescription("Enter the record value(s)")
- .setRequired(true),
- ),
- async execute(interaction) {
- const subdomains = interaction.options.getString("subdomain");
- const recordType = interaction.options.getString("record_type");
- const recordString = interaction.options.getString("content");
- const guildId = interaction.guildId;
- // get the guild object from the guild id
- const guild = GuildID(guildId);
- // if the guild object is false, then the guild is not registered
- if (!guild)
- return await interaction.reply({
- content:
- "This guild is not registered with Domain Register Bot. Please contact the guild owner to register.",
- ephemeral: true,
- });
-
- const githubUser = await User.findOne({ userid: interaction.user.id });
- const username = githubUser.githubid;
-
- const authUrl = auth.getAccessToken(interaction.user.id);
- const loginBtn = new ActionRowBuilder().addComponents(
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel("Login with GitHub")
- .setURL(authUrl),
- );
- // add text reply if user is not logged in. along with login button
- if (!githubUser)
- return await interaction.reply({
- content: `Please login first`,
- components: [loginBtn],
- ephemeral: true,
- });
-
- let regexPattern;
-
- switch (recordType) {
- case "A":
- regexPattern = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/;
- break;
- case "CNAME":
- regexPattern = /^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/;
- break;
- case "MX":
- regexPattern = /^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/;
- break;
- case "TXT":
- regexPattern = /^.*$/;
- break;
- case "URL":
- regexPattern =
- /^(https?:\/\/)?(www\.)?([a-zA-Z0-9-]+\.){1,}[a-zA-Z]{2,}(\/[a-zA-Z0-9-_.~:/?#[\]@!$&'()*+,;=%]*)?$/;
- break;
- default:
- return await interaction.reply("Invalid record type.");
- }
-
- if (!regexPattern.test(recordString))
- return await interaction.reply("Invalid record string.");
-
- // Embed
- const subdomain = subdomains.replace(/\.is-a\.dev$/, "");
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.reply({ embeds: [embed] });
- const forked = await fork(interaction.user.id, interaction, subdomain);
-
- // add a 3 second delay to allow the fork to complete
- await new Promise((r) => setTimeout(r, 3000));
- const commit = await CommitChanges(
- interaction.user.id,
- subdomain,
- recordType,
- recordString,
- interaction,
- );
- if (commit === "fail") return;
- },
-};
diff --git a/OLD/commands/sendemail.js b/OLD/commands/sendemail.js
deleted file mode 100644
index e6a3e80..0000000
--- a/OLD/commands/sendemail.js
+++ /dev/null
@@ -1,82 +0,0 @@
-const {
- SlashCommandBuilder,
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
-} = require("discord.js");
-const Maintainers = require("../models/maintainers.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("send-email")
- .setDescription("Maintainers send emails!")
- .addStringOption((option) =>
- option
- .setName("email")
- .setDescription("Email to send to")
- .setRequired(false),
- )
- .addStringOption((option) =>
- option
- .setName("subject")
- .setDescription("Subject of email")
- .setRequired(false),
- ),
- async execute(interaction) {
- if (!(await Maintainers.findOne({ userid: interaction.user.id }))) {
- // make text appear in ephemeral message
- await interaction.reply({
- content: "Only maintainers can use this command!",
- ephemeral: true,
- });
- return;
- }
- const emailAddress = interaction.options.getString("email");
- const emailSubject = interaction.options.getString("subject");
- const modal = new ModalBuilder()
- .setCustomId("sendemail")
- .setTitle("Send Email");
-
- if (!emailAddress) {
- const emailAddress = "email";
- }
- if (!emailSubject) {
- const emailSubject = "subject";
- }
-
- // Create the text input components
- const email = new TextInputBuilder()
- .setCustomId("email")
- // The label is the prompt the user sees for this input
- .setLabel("To email?")
- .setValue(emailAddress)
- // Short means only a single line of text
- .setStyle(TextInputStyle.Short);
-
- const subject = new TextInputBuilder()
- .setCustomId("subject")
- .setLabel("What is the email subject?")
- .setValue(emailSubject)
- // Paragraph means multiple lines of text.
- .setStyle(TextInputStyle.Short);
-
- const message = new TextInputBuilder()
- .setCustomId("message")
- .setLabel("What's the message?")
- // Paragraph means multiple lines of text.
- .setStyle(TextInputStyle.Paragraph);
-
- // An action row only holds one text input,
- // so you need one action row per text input.
- const firstActionRow = new ActionRowBuilder().addComponents(email);
- const secondActionRow = new ActionRowBuilder().addComponents(subject);
- const thirdActionRow = new ActionRowBuilder().addComponents(message);
-
- // Add inputs to the modal
- modal.addComponents(firstActionRow, secondActionRow, thirdActionRow);
-
- // Show the modal to the user
- await interaction.showModal(modal);
- },
-};
diff --git a/OLD/commands/staff.js b/OLD/commands/staff.js
deleted file mode 100644
index aabf650..0000000
--- a/OLD/commands/staff.js
+++ /dev/null
@@ -1,43 +0,0 @@
-const { SlashCommandBuilder } = require("discord.js");
-const Maintainer = require("../models/maintainers.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("maintainer")
- .setDescription("Add staff controls.")
- .addBooleanOption((option) =>
- option
- .setName("add")
- .setDescription("Add or remove a maintainer.")
- .setRequired(true),
- )
- .addUserOption((option) =>
- option
- .setName("user")
- .setDescription("The user to add or remove.")
- .setRequired(true),
- ),
- async execute(interaction) {
- if (interaction.user.id !== "598245488977903688")
- return await interaction.reply(
- "Only the bot owner can use this command!",
- );
-
- const add = interaction.options.getBoolean("add");
- const user = interaction.options.getUser("user");
-
- if (add) {
- await Maintainer.create({
- userid: user.id,
- maintainer: true,
- });
-
- await interaction.reply(`Added ${user.username} as a maintainer.`);
- } else {
- await Maintainer.findOneAndDelete({ userid: user.id });
- await interaction.reply(
- `Removed ${user.username} as a maintainer.`,
- );
- }
- },
-};
diff --git a/OLD/commands/template.js b/OLD/commands/template.js
deleted file mode 100644
index b6221cd..0000000
--- a/OLD/commands/template.js
+++ /dev/null
@@ -1,89 +0,0 @@
-const {
- SlashCommandBuilder,
- ButtonBuilder,
- ActionRowBuilder,
- ButtonStyle,
-} = require("discord.js");
-const User = require("../models/user.js");
-const { ForwardMailModal } = require("../templates/forwardmail/modal.js");
-const { EmailGithub } = require("../templates/forwardmail-github/modal.js");
-const { Replit } = require("../templates/replit/modal.js");
-const { HashNode } = require("../templates/hashnode/modal.js");
-const auth = require("../components/auth.js");
-const { GuildID } = require("../services/guildId.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("template")
- .setDescription("Premade domain templates!")
- .addStringOption((option) =>
- option
- .setName("templates")
- .setDescription("Select a template")
- .setRequired(true)
- .addChoices(
- { name: "Email Forwarder", value: "email-forwarder" },
- {
- name: "GitHub Pages and Email Forwarder",
- value: "github-pages-email-forwarder",
- },
- {
- name: "Replit.com with is-a.dev subdomain [CNAME]",
- value: "replit",
- },
- {
- name: "HashNode with is-a.dev subdomain",
- value: "hashnode",
- },
- ),
- ),
- async execute(interaction) {
- const guildId = interaction.guildId;
- // get the guild object from the guild id
- const guild = GuildID(guildId);
- // if the guild object is false, then the guild is not registered
- if (!guild)
- return await interaction.reply({
- content:
- "This guild is not registered with Domain Register Bot. Please contact the guild owner to register.",
- ephemeral: true,
- });
-
- const githubUser = await User.findOne({ userid: interaction.user.id });
-
- const authUrl = auth.getAccessToken(interaction.user.id);
- const loginBtn = new ActionRowBuilder().addComponents(
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel("Login with GitHub")
- .setURL(authUrl),
- );
-
- // add text reply if user is not logged in. along with login button
- if (!githubUser)
- return await interaction.reply({
- content: `Please login first`,
- components: [loginBtn],
- ephemeral: true,
- });
-
- const template = interaction.options.getString("templates");
-
- switch (template) {
- case "email-forwarder":
- await ForwardMailModal(interaction);
- break;
- case "github-pages-email-forwarder":
- await EmailGithub(interaction);
- break;
- case "replit":
- await Replit(interaction);
- break;
- case "hashnode":
- await HashNode(interaction);
- break;
- default:
- return await interaction.reply("Invalid template.");
- }
- },
-};
diff --git a/OLD/commands/whois.js b/OLD/commands/whois.js
deleted file mode 100644
index 58481cb..0000000
--- a/OLD/commands/whois.js
+++ /dev/null
@@ -1,144 +0,0 @@
-const { SlashCommandBuilder } = require("discord.js");
-const fetch = require("node-fetch");
-const Maintainers = require("../models/maintainers.js");
-const { GuildID } = require("../services/guildId.js");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("whois")
- .setDescription("[MAINTAINER] Lookup a domain's information.")
- .addStringOption((option) =>
- option
- .setName("domain")
- .setDescription("The domain to lookup.")
- .setRequired(true),
- ),
-
- async execute(interaction) {
- const guildId = interaction.guildId;
- // get the guild object from the guild id
- const guild = GuildID(guildId);
- // if the guild object is false, then the guild is not registered
- if (!guild)
- return await interaction.reply({
- content:
- "This guild is not registered with Domain Register Bot. Please contact the guild owner to register.",
- ephemeral: true,
- });
-
- const domain = interaction.options
- .getString("domain")
- .toLowerCase()
- .replace(/\.is-a\.dev$/, "");
-
- if (!(await Maintainers.findOne({ userid: interaction.user.id }))) {
- // make text appear in ephemeral message
- await interaction.reply({
- content: "Only maintainers can use this command!",
- ephemeral: true,
- });
- return;
- }
-
- try {
- const response = await fetch(
- `https://raw.githubusercontent.com/is-a-dev/register/main/domains/${domain}.json`,
- {
- headers: {
- "User-Agent": "is-a-dev-bot",
- },
- },
- );
-
- if (response.status === 404) {
- await interaction.reply(
- `The domain ${domain}.is-a.dev is not registered!`,
- );
- } else {
- const data = await response.json();
-
- const fileURL = `https://github.com/is-a-dev/register/blob/main/domains/${domain}.json`;
-
- const records = [];
- const contact = [];
-
- Object.keys(data.owner).forEach((owner) => {
- if (owner === "username")
- return contact.push(
- `**${owner}** ${data.owner[owner]}`,
- );
- if (owner === "email")
- return contact.push(
- `**${owner}** ${data.owner[owner]}`,
- );
- if (owner === "discord")
- return contact.push(
- `**${owner}** ${data.owner[owner]}`,
- );
- if (owner === "twitter")
- return contact.push(
- `**${owner}** ${data.owner[owner]}`,
- );
- if (owner === "reddit")
- return contact.push(
- `**${owner}** ${data.owner[owner]}`,
- );
- if (owner === "note")
- return contact.push(
- `**${owner}** ${data.owner[owner]}`,
- );
- });
-
- Object.keys(data.record).forEach((record) => {
- if (record === "A" || record === "MX") {
- data.record[record].forEach((r) => {
- records.push(`**${record}** ${r}`);
- });
-
- return;
- }
-
- if (record === "URL")
- return records.push(
- `**${record}** ${data.record[record]}`,
- );
-
- records.push(`**${record}** ${data.record[record]}`);
- });
-
- const embed = {
- title: `Whois: ${domain}.is-a.dev`,
- url: fileURL,
- fields: [
- {
- name: "Contact",
- value: contact.join("\n"),
- inline: true,
- },
- {
- name: "Records",
- value: records.join("\n"),
- inline: true,
- },
- ],
- color: 0x00ffff,
- timestamp: new Date(),
- footer: {
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- },
- };
-
- await interaction.reply({ embeds: [embed] });
- }
- } catch (error) {
- console.error("Error performing whois lookup:", error);
- await interaction.reply({
- content:
- "An error occurred while performing the Whois lookup. Please try again later.",
- ephemeral: true,
- });
- }
- },
-};
diff --git a/OLD/components/DeleteFile.js b/OLD/components/DeleteFile.js
deleted file mode 100644
index ef5f81e..0000000
--- a/OLD/components/DeleteFile.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const { Octokit } = require("@octokit/rest");
-const User = require("../models/user");
-const { EmbedBuilder } = require("discord.js");
-async function DeleteFile(domains, interaction) {
- const id = interaction.user.id;
- const githubUser = await User.findOne({ userid: id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const octokit = new Octokit({ auth: token });
- const domain = domains.replace(/\.is-a\.dev$/, "");
- // get the file sha
- const file = await fetch(
- `https://api.github.com/repos/${username}/register/contents/domains/${domain}.json`,
- )
- .then((res) => res.json())
- .catch((err) => {
- console.log(err);
- });
- // get the sha var from the json
- console.log("DEBUG:");
- console.log(username);
- console.log(domain);
- console.log(file);
- const sha = file.sha;
- console.log(sha);
- const deletefile = await octokit.repos.deleteFile({
- owner: githubUser.githubid,
- repo: "register",
- path: `domains/${domain}.json`,
- message: `Delete ${domain}.is-a.dev`,
- sha: sha,
- });
- const embed = new EmbedBuilder()
- .setTitle(`Deleting ${domain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ
", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setDescription(`Please wait for a staff member to review your PR.`)
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
-}
-
-exports.DeleteFile = DeleteFile;
diff --git a/OLD/components/Edit/modal.js b/OLD/components/Edit/modal.js
deleted file mode 100644
index e9c044b..0000000
--- a/OLD/components/Edit/modal.js
+++ /dev/null
@@ -1,56 +0,0 @@
-const {
- SlashCommandBuilder,
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
- fetchRecommendedShardCount,
-} = require("discord.js");
-async function EditModal(interaction) {
- const domains = interaction.values[0];
- const domain = domains.replace(/\.is-a\.dev$/, "");
- const response = await fetch(
- `https://raw.githubusercontent.com/is-a-dev/register/main/domains/${domain}.json`,
- {
- headers: {
- "User-Agent": "is-a-dev-bot",
- },
- },
- );
- const data = await response.json();
- console.log(data);
- const records = [];
- Object.keys(data.record).forEach((record) => {
- if (record === "A" || record === "MX") {
- data.record[record].forEach((r) => {
- records.push(`**${record}** ${r}`);
- });
-
- return;
- }
-
- if (record === "URL")
- return records.push(`**${record}** ${data.record[record]}`);
-
- records.push(`${data.record[record]}`);
- });
- // make a modal that displays the current records
- let recordsTypes = [];
- if (data.record === "CNAME") {
- recordsTypes.push("CNAME");
- }
- if (data.record === "A") {
- recordsTypes.push("A");
- }
- if (data.record === "MX") {
- recordsTypes.push("MX");
- }
- if (data.record === "URL") {
- recordsTypes.push("URL");
- }
- if (data.record === "TXT") {
- recordsTypes.push("TXT");
- }
- console.log(recordsTypes);
-}
-exports.EditModal = EditModal;
diff --git a/OLD/components/adminSendEmails.js b/OLD/components/adminSendEmails.js
deleted file mode 100644
index 60ddf01..0000000
--- a/OLD/components/adminSendEmails.js
+++ /dev/null
@@ -1,36 +0,0 @@
-const sgMail = require("@sendgrid/mail");
-require("dotenv").config();
-sgMail.setApiKey(process.env.SENDGRID_API_KEY);
-const adminemail = process.env.ADMIN_EMAIL;
-function adminSendEmails(interaction) {
- const email = interaction.fields.getTextInputValue("email");
- const subject = interaction.fields.getTextInputValue("subject");
- const message = interaction.fields.getTextInputValue("message");
- const htmlmessage = `${message}
-
- This email was sent on behalf of Is-a.dev from ${interaction.member.user.username}
- `;
- const msg = {
- to: email, // Change to your recipient
- from: adminemail, // Change to your verified sender
- subject: subject,
- text: message,
- html: htmlmessage,
- headers: {
- "List-Unsubscribe": ``,
- },
- };
- sgMail
- .send(msg)
- .then(async (response) => {
- console.log(response[0].statusCode);
- console.log(response[0].headers);
- await interaction.reply({ content: "Email sent!" });
- })
- .catch(async (error) => {
- console.error(error);
- await interaction.reply({ content: "Email failed to send!" });
- });
-}
-
-exports.adminSendEmails = adminSendEmails;
diff --git a/OLD/components/auth.js b/OLD/components/auth.js
deleted file mode 100644
index d4f6433..0000000
--- a/OLD/components/auth.js
+++ /dev/null
@@ -1,11 +0,0 @@
-require("dotenv").config();
-
-const GITHUB_ID = process.env.GITHUB_ID;
-const SERVER_URL = process.env.SERVER_URL;
-
-function getAccessToken(DiscordID) {
- const authUrl = `https://github.com/login/oauth/authorize?client_id=${GITHUB_ID}&scope=public_repo%20user:email&redirect_uri=https://${SERVER_URL}/auth/handler?discordId=${DiscordID}`;
- return authUrl;
-}
-
-exports.getAccessToken = getAccessToken;
diff --git a/OLD/components/commit.js b/OLD/components/commit.js
deleted file mode 100644
index 8d7aeb0..0000000
--- a/OLD/components/commit.js
+++ /dev/null
@@ -1,112 +0,0 @@
-const User = require("../models/user");
-const { Octokit } = require("@octokit/rest");
-const { OpenPR } = require("../components/pr.js");
-
-require("dotenv").config();
-
-const { EmbedBuilder } = require("discord.js");
-
-async function CommitChanges(id, subdomain, type, data, interaction) {
- let pass = "fail";
- const githubUser = await User.findOne({ userid: id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const email = githubUser.email;
-
- if (process.env.DEBUG) {
- console.log("COMMIT FUNCTION.");
- console.log("id: " + id);
- console.log("token: " + token);
- console.log("username: " + username);
- console.log("email: " + email);
- }
-
- const octokit = new Octokit({ auth: token });
-
- if (type === "A" || type === "MX") {
- data = JSON.stringify(data.split(",").map((s) => s.trim()));
- } else {
- data = `"${data.trim()}"`;
- }
-
- const ifexistsurl = `https://raw.githubusercontent.com/${username}/register/main/domains/${subdomain}.json`;
- const ifexists = await fetch(ifexistsurl);
- //console.log(ifexistsurl);
- //console.log(ifexists.status);
-
- if (ifexists.status === 200) {
- const ErrorEmbed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .setURL(ifexistsurl)
- .setDescription(`This domain already exists!`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#FF0000")
- .setFooter({
- text: "is-a.dev",
- iconURL:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [ErrorEmbed] });
- return;
- }
-
- content = `{
- "owner": {
- "username": "${username}",
- "email": "${email}",
- "discord": "${id}"
- },
-
- "record": {
- "${type}": ${data.toLowerCase()}
- }
-}
-`;
-
- const record = Buffer.from(content).toString("base64");
-
- const commit = await octokit.repos.createOrUpdateFileContents({
- owner: username,
- repo: "register",
- path: "domains/" + subdomain.toLowerCase() + ".json",
- message: `feat(domain): ${subdomain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev`,
- content: record,
- committer: {
- name: username,
- email: email,
- },
- author: {
- name: username,
- email: email,
- },
- });
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ
", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setDescription(`Pushing Domain.`)
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
- pass = "true";
- await OpenPR(interaction.user.id, subdomain, interaction);
- return pass;
-}
-
-exports.CommitChanges = CommitChanges;
diff --git a/OLD/components/delete.js b/OLD/components/delete.js
deleted file mode 100644
index 218b71c..0000000
--- a/OLD/components/delete.js
+++ /dev/null
@@ -1,70 +0,0 @@
-const {
- SlashCommandBuilder,
- StringSelectMenuBuilder,
- ActionRowBuilder,
- ButtonBuilder,
- ButtonStyle,
-} = require("discord.js");
-
-const { fork } = require("./delfork.js");
-const { DeleteFile } = require("./DeleteFile.js");
-const { DeletePR } = require("./deletePr.js");
-
-async function DeleteDomain(interaction) {
- console.log(interaction.values);
- const domain = interaction.values[0];
-
- console.log(domain);
- console.log(interaction.user);
-
- const username = interaction.user.username;
- const confirm = new ButtonBuilder()
- .setCustomId("confirm")
- .setLabel("Confirm Delete")
- .setStyle(ButtonStyle.Danger);
-
- const cancel = new ButtonBuilder()
- .setCustomId("cancel")
- .setLabel("Cancel")
- .setStyle(ButtonStyle.Secondary);
-
- const row = new ActionRowBuilder().addComponents(cancel, confirm);
-
- const response = await interaction.reply({
- content: `Are you sure you want to delete ${domain}?`,
- components: [row],
- ephemeral: true,
- });
-
- const collectorFilter = (i) => i.user.id === interaction.user.id;
-
- try {
- const confirmation = await response.awaitMessageComponent({
- filter: collectorFilter,
- time: 60000,
- });
-
- if (confirmation.customId === "confirm") {
- await confirmation.update({ content: `Delete.`, components: [] });
- await fork(interaction.user.id, interaction, domain);
- await new Promise((r) => setTimeout(r, 3000));
- await DeleteFile(domain, interaction);
- await new Promise((r) => setTimeout(r, 3000));
- await DeletePR(interaction, domain);
- } else if (confirmation.customId === "cancel") {
- await confirmation.update({
- content: "Action cancelled",
- components: [],
- });
- }
- } catch (e) {
- await interaction.editReply({
- content: "Confirmation not received within 1 minute, cancelling",
- components: [],
- });
-
- return;
- }
-}
-
-exports.DeleteDomain = DeleteDomain;
diff --git a/OLD/components/deletePr.js b/OLD/components/deletePr.js
deleted file mode 100644
index 4e9c3bd..0000000
--- a/OLD/components/deletePr.js
+++ /dev/null
@@ -1,53 +0,0 @@
-const User = require("../models/user");
-const { Octokit } = require("@octokit/rest");
-
-require("dotenv").config();
-
-const {
- EmbedBuilder,
- ActionRowBuilder,
- ButtonBuilder,
- ButtonStyle,
-} = require("discord.js");
-async function DeletePR(interaction, subdomain) {
- const id = interaction.user.id;
- const githubUser = await User.findOne({ userid: id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const email = githubUser.email;
- const octokit = new Octokit({ auth: token });
- const pr = await octokit.pulls.create({
- owner: "is-a-dev",
- repo: "register",
- title: `BETA: Delete ${subdomain}`,
- head: `${username}:main`,
- base: "main",
- body: `Delete ${subdomain} using the Discord bot.`,
- });
- const PrUrl = pr.data.html_url;
-
- const embed = new EmbedBuilder()
- .setTitle(`Deleteing ${subdomain}`)
- .addFields(
- { name: "Forked ", value: "โ
", inline: true },
- { name: "Commited ", value: "โ
", inline: true },
- { name: "PR Opened ", value: "โ
", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
- const PrBtn = new ActionRowBuilder().addComponents(
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel("Pull Request")
- .setURL(PrUrl),
- );
- await interaction.editReply({ components: [PrBtn] });
-}
-
-module.exports = { DeletePR };
diff --git a/OLD/components/delfork.js b/OLD/components/delfork.js
deleted file mode 100644
index fc53a6e..0000000
--- a/OLD/components/delfork.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const User = require("../models/user");
-const { EmbedBuilder } = require("discord.js");
-const { Octokit } = require("@octokit/core");
-require("dotenv").config();
-const Sentry = require("@sentry/node");
-const { GuildID } = require("../services/guildId.js");
-
-const forkRepo = async (token, guild) => {
- try {
- // Fork the repository
- const username = guild.github;
- const respository = guild.repository;
- const logo = guild.logo;
- const octokit = new Octokit({
- auth: token,
- });
-
- const forked = await octokit.request(
- "POST /repos/{owner}/{repo}/forks",
- {
- owner: username,
- repo: respository,
- name: "register",
- default_branch_only: true,
- headers: {
- "X-GitHub-Api-Version": "2022-11-28",
- },
- },
- );
- const cloneResponse = forked.data.clone_url;
- if (process.env.DEBUG) {
- console.log("FORKED REPO: " + cloneResponse);
- }
- return cloneResponse;
- } catch (error) {
- console.log(error);
- }
-};
-
-async function fork(id, interaction, subdomain) {
- const usersguild = interaction.guildId;
- const guild = await GuildID(usersguild);
- const githubUser = await User.findOne({ userid: id });
- const token = githubUser.gittoken;
- Sentry.setUser({ Discord: id });
- if (process.env.DEBUG) {
- console.log("FORK FUNCTION.");
- console.log("id: " + id);
- console.log("token: " + token);
- }
- const responce = await forkRepo(token, guild);
- const embed = new EmbedBuilder()
- .setTitle(`Deleteing ${subdomain}`)
- .addFields(
- { name: "Forked ", value: "โ
", inline: true },
- { name: "Commited ", value: "โ", inline: true },
- { name: "PR Opened ", value: "โ", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url: guild.logo,
- });
- await interaction.editReply({ embeds: [embed] });
- return responce;
-}
-exports.fork = fork;
diff --git a/OLD/components/fork.js b/OLD/components/fork.js
deleted file mode 100644
index 2429700..0000000
--- a/OLD/components/fork.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const User = require("../models/user");
-const { EmbedBuilder } = require("discord.js");
-const { Octokit } = require("@octokit/core");
-require("dotenv").config();
-const Sentry = require("@sentry/node");
-const { GuildID } = require("../services/guildId.js");
-
-const forkRepo = async (token, guild) => {
- try {
- // Fork the repository
- const username = guild.github;
- const respository = guild.repository;
- const logo = guild.logo;
- const octokit = new Octokit({
- auth: token,
- });
-
- const forked = await octokit.request(
- "POST /repos/{owner}/{repo}/forks",
- {
- owner: username,
- repo: respository,
- name: "register",
- default_branch_only: true,
- headers: {
- "X-GitHub-Api-Version": "2022-11-28",
- },
- },
- );
- const cloneResponse = forked.data.clone_url;
- if (process.env.DEBUG) {
- console.log("FORKED REPO: " + cloneResponse);
- }
- return cloneResponse;
- } catch (error) {
- console.log(error);
- }
-};
-
-async function fork(id, interaction, subdomain) {
- const usersguild = interaction.guildId;
- const guild = await GuildID(usersguild);
- const githubUser = await User.findOne({ userid: id });
- const token = githubUser.gittoken;
- Sentry.setUser({ Discord: id });
- if (process.env.DEBUG) {
- console.log("FORK FUNCTION.");
- console.log("id: " + id);
- console.log("token: " + token);
- }
- const responce = await forkRepo(token, guild);
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked ", value: "โ
", inline: true },
- { name: "Commited ", value: "โ", inline: true },
- { name: "PR Opened ", value: "โ", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url: guild.logo,
- });
- await interaction.editReply({ embeds: [embed] });
- return responce;
-}
-exports.fork = fork;
diff --git a/OLD/components/pr.js b/OLD/components/pr.js
deleted file mode 100644
index abf1766..0000000
--- a/OLD/components/pr.js
+++ /dev/null
@@ -1,116 +0,0 @@
-const User = require("../models/user");
-const { Octokit } = require("@octokit/rest");
-
-require("dotenv").config();
-
-const {
- EmbedBuilder,
- ActionRowBuilder,
- ButtonBuilder,
- ButtonStyle,
-} = require("discord.js");
-
-async function OpenPR(id, subdomain, interaction, extra) {
- const githubUser = await User.findOne({ userid: id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const email = githubUser.email;
-
- if (process.env.DEBUG) {
- console.log("PR FUNCTION.");
- console.log("id: " + id);
- console.log("token: " + token);
- console.log("username: " + username);
- console.log("email: " + email);
- }
-
- const octokit = new Octokit({ auth: token });
- let existingPullRequests = await octokit.pulls.list({
- owner: "is-a-dev",
- repo: "register",
- state: "open",
- head: `${username}:main`,
- base: "main",
- });
-
- if (existingPullRequests.data.length > 0) {
- // Pull request already exists, return an error or handle it accordingly
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked ", value: "โ
", inline: true },
- { name: "Commited ", value: "โ
", inline: true },
- { name: "PR Opened ", value: "โ", inline: true },
- )
- .setColor("#FF0000")
- .setDescription("A pull request already exists")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
- return;
- }
-
- const pr = await octokit.pulls.create({
- owner: "is-a-dev",
- repo: "register",
- title: `BETA: Register ${subdomain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev`,
- head: `${username}:main`,
- base: "main",
- body: `Added \`${subdomain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev\` using the Discord bot.`,
- });
-
- const PrUrl = pr.data.html_url;
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked ", value: "โ
", inline: true },
- { name: "Commited ", value: "โ
", inline: true },
- { name: "PR Opened ", value: "โ
", inline: true },
- )
- .setColor("#00b0f4")
- .setDescription(
- "Your domain has been generated! Please wait for a staff member to review your PR.",
- )
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
-
- if (extra) {
- const PrBtn = new ActionRowBuilder().addComponents(
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel("Pull Request")
- .setURL(PrUrl),
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel(extra.label)
- .setURL(extra.url),
- );
- await interaction.editReply({ components: [PrBtn] });
- } else {
- const PrBtn = new ActionRowBuilder().addComponents(
- new ButtonBuilder()
- .setStyle(ButtonStyle.Link)
- .setLabel("Pull Request")
- .setURL(PrUrl),
- );
- await interaction.editReply({ components: [PrBtn] });
- }
- return pr;
-}
-
-exports.OpenPR = OpenPR;
diff --git a/OLD/components/web/CheckDomain.js b/OLD/components/web/CheckDomain.js
deleted file mode 100644
index d3b99f7..0000000
--- a/OLD/components/web/CheckDomain.js
+++ /dev/null
@@ -1,18 +0,0 @@
-async function CheckDomain(subdomain) {
- // check if domain is available
- let result = false;
- await fetch("https://raw-api.is-a.dev")
- .then((response) => response.json())
- .then(async (data) => {
- result = data.some((item) => item.domain === subdomain);
- if (result) {
- const da = { domain: subdomain, available: false };
- return da;
- } else {
- const db = { domain: subdomain, available: true };
- return db;
- }
- });
-}
-
-exports.CheckDomain = CheckDomain;
diff --git a/OLD/components/web/Count.js b/OLD/components/web/Count.js
deleted file mode 100644
index c2c0b7a..0000000
--- a/OLD/components/web/Count.js
+++ /dev/null
@@ -1,32 +0,0 @@
-async function CountDomains() {
- try {
- const response = await fetch("https://raw-api.is-a.dev");
- const data = await response.json();
- const results = countDomainsAndOwners(data);
- return results;
- } catch (error) {
- console.error("Error:", error);
- return null;
- }
-}
-
-function countDomainsAndOwners(jsonData) {
- const parsedData = jsonData;
- const subdomains = parsedData.length;
- const owners = new Set();
-
- parsedData.forEach((entry) => {
- if (entry.owner) {
- owners.add(JSON.stringify(entry.owner));
- }
- });
-
- const individualOwners = owners.size;
-
- return {
- subdomains,
- individualOwners,
- };
-}
-
-exports.CountDomains = CountDomains;
diff --git a/OLD/components/web/DeleteDomain.js b/OLD/components/web/DeleteDomain.js
deleted file mode 100644
index 8c94549..0000000
--- a/OLD/components/web/DeleteDomain.js
+++ /dev/null
@@ -1,70 +0,0 @@
-const { Octokit } = require("@octokit/rest");
-async function DeleteDomain(apikey, username, email, domain) {
- let sha;
- let file;
- try {
- file = await fetch(
- `https://api.github.com/repos/${username}/register/contents/domains/${domain}.json`,
- )
- .then((res) => res.json())
- .catch((err) => {
- console.log(err);
- });
- sha = file.sha;
- } catch (e) {
- console.log(e);
- return { error: "Can't locate file." };
- }
- let octokit = new Octokit({
- auth: apikey,
- });
- try {
- let commit = await octokit.repos.deleteFile({
- owner: username,
- repo: "register",
- path: "domains/" + domain + ".json",
- message: `Delete ${domain}.is-a.dev`,
- sha: sha,
- committer: {
- name: username,
- email: email,
- },
- });
- } catch (e) {
- console.log(e);
- return { error: "Error deleting domain" };
- }
- try {
- let existingPullRequests = await octokit.pulls.list({
- owner: "is-a-dev",
- repo: "register",
- state: "open",
- head: `${username}:main`,
- base: "main",
- });
-
- if (existingPullRequests.data.length > 0) {
- // Pull request already exists, return an error or handle it accordingly
- return { error: "A pull request already exists." };
- }
- let pr = await octokit.pulls.create({
- owner: "is-a-dev",
- repo: "register",
- title: `BETA: Delete ${domain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev`,
- head: `${username}:main`,
- base: "main",
- body: `Deleted \`${domain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev\` using the site.`,
- });
- let PrUrl = pr.data.html_url;
- return { prurl: PrUrl };
- } catch (e) {
- console.log(e);
- return { error: "Error creating pull request." };
- }
-}
-
-exports.DeleteDomain = DeleteDomain;
diff --git a/OLD/components/web/DomainInfo.js b/OLD/components/web/DomainInfo.js
deleted file mode 100644
index 01aff4b..0000000
--- a/OLD/components/web/DomainInfo.js
+++ /dev/null
@@ -1,31 +0,0 @@
-async function DomainInfo(domain) {
- const domains = domain;
- const response = await fetch(
- `https://raw.githubusercontent.com/is-a-dev/register/main/domains/${domains}.json`,
- {
- headers: {
- "User-Agent": "is-a-dev-bot",
- },
- },
- );
- console.log(response);
- if (response.status === 404) {
- return { error: "Domain not found" };
- } else {
- const data = await response.json();
- const record = data.record;
- const records = Object.entries(record).map(([type, value]) => ({
- type,
- value,
- }));
- const owner = data.owner;
- const json = {
- domain: domain,
- record: records,
- owner: owner,
- };
- return json;
- }
-}
-
-exports.DomainInfo = DomainInfo;
diff --git a/OLD/components/web/Edit.js b/OLD/components/web/Edit.js
deleted file mode 100644
index e890a37..0000000
--- a/OLD/components/web/Edit.js
+++ /dev/null
@@ -1,96 +0,0 @@
-const { Octokit } = require("@octokit/rest");
-async function EditDomain(subdomain, username, email, apikey, records) {
- let file = await fetch(
- `https://api.github.com/repos/${username}/register/contents/domains/${subdomain}.json`,
- )
- .then((res) => res.json())
- .catch((err) => {
- console.log(err);
- });
- let sha = file.sha;
- let octokit = new Octokit({
- auth: apikey,
- });
- let data = records;
- const parsedArray = JSON.parse(data);
- let content = "";
- let value = "";
-
- for (let i = 0; i < parsedArray.length; i++) {
- const obj = parsedArray[i];
- type = obj.type;
- value = obj.value;
-
- console.log("Type:", type);
- console.log("Value:", value);
- }
-
- content = `{
- "owner": {
- "username": "${username}",
- "email": "${email}"
- },
- "record": {
- "${type}": "${value}"
- }
- }
- `;
-
- let record = Buffer.from(content).toString("base64");
-
- try {
- let commit = await octokit.repos.createOrUpdateFileContents({
- owner: username,
- repo: "register",
- path: "domains/" + subdomain + ".json",
- message: `feat(domain): ${subdomain}.is-a.dev`,
- content: record,
- sha: sha,
- committer: {
- name: username,
- email: email,
- },
- author: {
- name: username,
- email: email,
- },
- });
- } catch (e) {
- console.log(e);
- return { error: "Error creating domain file." };
- }
-
- try {
- let existingPullRequests = await octokit.pulls.list({
- owner: "is-a-dev",
- repo: "register",
- state: "open",
- head: `${username}:main`,
- base: "main",
- });
-
- if (existingPullRequests.data.length > 0) {
- // Pull request already exists, return an error or handle it accordingly
- return { error: "A pull request for this domain already exists." };
- }
- let pr = await octokit.pulls.create({
- owner: "is-a-dev",
- repo: "register",
- title: `BETA: Update ${subdomain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev`,
- head: `${username}:main`,
- base: "main",
- body: `Updated \`${subdomain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev\` using the site.`,
- });
- let PrUrl = pr.data.html_url;
- return { prurl: PrUrl };
- } catch (e) {
- console.log(e);
- return { error: "Error creating pull request." };
- }
-}
-
-exports.EditDomain = EditDomain;
diff --git a/OLD/components/web/Register.js b/OLD/components/web/Register.js
deleted file mode 100644
index 21cf43c..0000000
--- a/OLD/components/web/Register.js
+++ /dev/null
@@ -1,108 +0,0 @@
-const { Octokit } = require("@octokit/rest");
-async function RegisterDomain(
- subdomain,
- type,
- username,
- email,
- apikey,
- recordString,
-) {
- switch (type) {
- case "A":
- regexPattern = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/;
- break;
- case "CNAME":
- regexPattern = /^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/;
- break;
- case "MX":
- regexPattern = /^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$/;
- break;
- case "TXT":
- regexPattern = /^.*$/;
- break;
- case "URL":
- regexPattern =
- /^(https?:\/\/)?(www\.)?([a-zA-Z0-9-]+\.){1,}[a-zA-Z]{2,}(\/[a-zA-Z0-9-_.~:/?#[\]@!$&'()*+,;=%]*)?$/;
- break;
- default:
- return { error: "Invalid record type." };
- }
- if (!regexPattern.test(recordString))
- return { error: "Invalid record string." };
- let octokit = new Octokit({
- auth: apikey,
- });
- let data = recordString;
- if (type === "A" || type === "MX") {
- data = JSON.stringify(data.split(",").map((s) => s.trim()));
- } else {
- data = `"${data.trim()}"`;
- }
- content = `{
- "owner": {
- "username": "${username}",
- "email": "${email}"
- },
- "record": {
- "${type}": ${data.toLowerCase()}
- }
- }
- `;
-
- let record = Buffer.from(content).toString("base64");
-
- try {
- let commit = await octokit.repos.createOrUpdateFileContents({
- owner: username,
- repo: "register",
- path: "domains/" + subdomain + ".json",
- message: `feat(domain): ${subdomain}.is-a.dev`,
- content: record,
- committer: {
- name: username,
- email: email,
- },
- author: {
- name: username,
- email: email,
- },
- });
- } catch (e) {
- console.log(e);
- return { error: "Error creating domain file." };
- }
-
- try {
- let existingPullRequests = await octokit.pulls.list({
- owner: "is-a-dev",
- repo: "register",
- state: "open",
- head: `${username}:main`,
- base: "main",
- });
-
- if (existingPullRequests.data.length > 0) {
- // Pull request already exists, return an error or handle it accordingly
- return { error: "A pull request for this domain already exists." };
- }
- let pr = await octokit.pulls.create({
- owner: "is-a-dev",
- repo: "register",
- title: `BETA: Register ${subdomain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev`,
- head: `${username}:main`,
- base: "main",
- body: `Added \`${subdomain
- .toLowerCase()
- .replace(/\.[^/.]+$/, "")}.is-a.dev\` using the site.`,
- });
- let PrUrl = pr.data.html_url;
- return { prurl: PrUrl };
- } catch (e) {
- console.log(e);
- return { error: "Error creating pull request." };
- }
-}
-
-exports.RegisterDomain = RegisterDomain;
diff --git a/OLD/components/web/fork.js b/OLD/components/web/fork.js
deleted file mode 100644
index e20bf53..0000000
--- a/OLD/components/web/fork.js
+++ /dev/null
@@ -1,38 +0,0 @@
-const { Octokit } = require("@octokit/core");
-require("dotenv").config();
-const Sentry = require("@sentry/node");
-
-const forkRepo = async (token) => {
- let forked;
- try {
- // Fork the repository
- const respository = "is-a-dev";
- const octokit = new Octokit({
- auth: token,
- });
-
- forked = await octokit.request("POST /repos/{owner}/{repo}/forks", {
- owner: "is-a-dev",
- repo: "register",
- name: "register",
- default_branch_only: true,
- headers: {
- "X-GitHub-Api-Version": "2022-11-28",
- },
- });
- const cloneResponse = forked.data.html_url;
- if (process.env.DEBUG) {
- console.log("FORKED REPO: " + cloneResponse);
- }
- return cloneResponse;
- } catch (error) {
- console.log("ERROR: " + error);
- return error;
- }
-};
-
-async function WebFork(apikey) {
- const responce = await forkRepo(apikey);
- return responce;
-}
-exports.WebFork = WebFork;
diff --git a/OLD/components/web/listDomains.js b/OLD/components/web/listDomains.js
deleted file mode 100644
index 9b23148..0000000
--- a/OLD/components/web/listDomains.js
+++ /dev/null
@@ -1,39 +0,0 @@
-async function ListDomains(username) {
- let results = [];
-
- // Assuming 'username' is defined and assigned a value
-
- // Assuming 'fetch' is a valid function that retrieves data from a given URL
- await fetch("https://raw-api.is-a.dev")
- .then((response) => response.json())
- .then(async (data) => {
- // Code inside the fetch promise handler
- // It receives the response and parses it as JSON data
-
- for (let i = 0; i < data.length; i++) {
- // Iterates over each element in the data array
-
- if (data[i].owner.username === username) {
- // Checks if the username (case-insensitive) matches the current data record's owner
-
- const record = data[i].record;
- const arr = Object.entries(record).map(([type, value]) => ({
- type,
- value,
- }));
- // Extracts the record property from the current data record
- // Converts the record object to an array of objects with 'type' and 'value' keys
-
- results.push({ domain: data[i].domain, record: arr });
- // Adds a new object to the results array
- // The object contains the domain and the converted record array
-
- found = true;
- // Sets a variable 'found' to true
- }
- }
- });
-
- return results;
-}
-exports.ListDomains = ListDomains;
diff --git a/OLD/components/webserver.js b/OLD/components/webserver.js
deleted file mode 100644
index 756da25..0000000
--- a/OLD/components/webserver.js
+++ /dev/null
@@ -1,368 +0,0 @@
-const express = require("express");
-var cors = require("cors");
-const multer = require("multer");
-const fetch = require("node-fetch");
-const { Octokit } = require("@octokit/rest");
-const User = require("../models/user.js");
-const Prdata = require("../models/prdata.js");
-const Activation = require("../models/activation.js");
-const prdata = require("../models/prdata.js");
-const { ListDomains } = require("./web/listDomains.js");
-const { CheckDomain } = require("./web/CheckDomain.js");
-const { CountDomains } = require("./web/Count.js");
-const { DomainInfo } = require("./web/DomainInfo.js");
-const { WebFork } = require("./web/fork.js");
-const { RegisterDomain } = require("./web/Register.js");
-const { EditDomain } = require("./web/Edit.js");
-const { DeleteDomain } = require("./web/DeleteDomain.js");
-require("dotenv").config();
-const controller = require("../models/control.js");
-
-const GITHUB_ID = process.env.GITHUB_ID;
-const GITHUB_SECRET = process.env.GITHUB_SECRET;
-
-const upload = multer();
-const server = express();
-server.set("view engine", "ejs");
-server.use(cors());
-
-server.get("/auth/handler", async (req, res) => {
- const code = req.query.code;
- const discordId = req.query.discordId;
-
- const response = await fetch(
- `https://github.com/login/oauth/access_token?client_id=${GITHUB_ID}&client_secret=${GITHUB_SECRET}&code=${code}`,
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Accept: "application/json",
- },
- },
- );
-
- const data = await response.json();
-
- const accessToken = data.access_token;
-
- // get user info
- const userResponse = await fetch("https://api.github.com/user", {
- headers: {
- Accept: "application/json",
- Authorization: `Bearer ${accessToken}`,
- },
- });
-
- const userData = await userResponse.json();
- const username = userData.login;
-
- // get user email
- const emailResponse = await fetch("https://api.github.com/user/emails", {
- headers: {
- Accept: "application/json",
- Authorization: `Bearer ${accessToken}`,
- },
- });
-
- const emailData = await emailResponse.json();
- const email = emailData[0].email;
-
- if (await User.findOne({ userid: discordId })) {
- await User.replaceOne({ userid: discordId }, { gittoken: accessToken });
-
- res.send("You are already logged in!");
- return;
- }
-
- await User.create({
- userid: discordId,
- githubid: username,
- email: email,
- gittoken: accessToken,
- });
-
- res.render("logged-in", { username });
-});
-
-server.get("/guides/forwarder", (req, res) => {
- // get query params from url and store in variables
- const email = req.query.email;
- const subdomain = req.query.domain;
- res.render("email-forwarder", { email, subdomain });
-});
-
-server.get("/guides/replit", (req, res) => {
- // get query param
- const replurl = req.query.repl;
- const subdomain = req.query.domain;
- res.render("replit", { replurl, subdomain });
-});
-
-server.get("/api/domains", async (req, res) => {
- const domain = req.query.domain;
- const username = req.query.username;
- if (!domain && !username) {
- res.send("No domain or username provided.");
- return;
- }
- if (domain) {
- let domains = await DomainInfo(domain);
- if (domains.error) {
- res.status(404).send(domains);
- return;
- } else {
- res.send(domains);
- return;
- }
- }
- if (username) {
- const domains = await ListDomains(username);
- res.send(domains);
- return;
- }
- const domains = await ListDomains(username);
- res.send(domains);
-});
-
-server.get("/api/check-domain", async (req, res) => {
- const domain = req.query.domain;
- const result = await CheckDomain(domain);
- res.send(result);
-});
-
-server.get("/api/count-domains", async (req, res) => {
- const result = await CountDomains();
- res.json(result);
-});
-
-server.post("/api/email", upload.none(), (req, res) => {
- const body = req.body;
-
- console.log(`From: ${body.from}`);
- console.log(`To: ${body.to}`);
- console.log(`Subject: ${body.subject}`);
- console.log(`Text: ${body.text}`);
- const text = body.from;
- const emailRegex = /<([^>]+)>/;
- const match = text.match(emailRegex);
- let emailAddress;
-
- if (match && match[1]) {
- emailAddress = match[1];
- console.log(emailAddress);
- } else {
- console.log("No email address found.");
- }
- // send to discord webhook
- // send to discord channel #email without webhook (for now)
- const channel = client.channels.cache.get("1134982019345035354");
- channel.send(
- `**From:** ${body.from}\n**To:** ${body.to}\n**Subject:** ${body.subject}\n**Text:** ${body.text}`,
- );
-
- return res.status(200).send();
-});
-
-server.get("/api/fork", async (req, res) => {
- //const DisableFork = await controller.findOne({ name: "DisableFork" });
- //if (DisableFork.status === "true") {
- // res.status(500).json({ "ERROR": "This endpoint is currently disabled." });
- // return;
- //}
- const apikey = req.query.apikey;
- if (!apikey) {
- res.json({ Error: "No Apikey provided" });
- return;
- }
- const result = await WebFork(apikey);
- res.send(result);
-});
-
-server.get("/api/register", upload.none(), async (req, res) => {
- //if (DisableRegister.status === "true") {
- // res.status(500).json({ "ERROR": "This endpoint is currently disabled." });
- // return;
- //}
- console.log("Got query:", req.query);
- if (!req.query.username || !req.query.apikey || !req.query.subdomain) {
- res.send("No username, apikey, or subdomain provided.");
- return;
- }
- const type = req.query.type;
- const content = req.query.content;
- const username = req.query.username;
- const apikey = req.query.apikey;
- const email = req.query.email;
- const subdomain = req.query.subdomain;
-
- //res.status(500).send({"ERROR": "This endpoint is currently disabled."});
- //return;
-
- const result = await RegisterDomain(
- subdomain,
- type,
- username,
- email,
- apikey,
- content,
- );
- // if result json contains ERROR, send error
- if (result.error) {
- res.status(500).send(result);
- return;
- } else {
- res.status(202).send(result);
- return;
- }
- //send response and status code
- //
- //res.send("body: " + JSON.stringify(body) + "\nusername: " + username + "\napikey: " + apikey + "\nemail: " + email + "\nsubdomain: " + subdomain);
-});
-
-server.get("/api/edit", upload.none(), async (req, res) => {
- //if (DisableRegister.status === "true") {
- // res.status(500).json({ "ERROR": "This endpoint is currently disabled." });
- // return;
- //}
- console.log("Got query:", req.query);
- if (!req.query.username || !req.query.apikey || !req.query.subdomain) {
- res.send("No username, apikey, or subdomain provided.");
- return;
- }
- let records = req.query.records;
- let username = req.query.username;
- let apikey = req.query.apikey;
- let email = req.query.email;
- let subdomain = req.query.subdomain;
-
- //res.status(500).send({"ERROR": "This endpoint is currently disabled."});
- //return;
-
- const result = await EditDomain(
- subdomain,
- username,
- email,
- apikey,
- records,
- );
- // if result json contains ERROR, send error
- if (result.error) {
- res.status(500).send(result);
- return;
- } else {
- res.status(202).send(result);
- return;
- }
- //send response and status code
- //
- //res.send("body: " + JSON.stringify(body) + "\nusername: " + username + "\napikey: " + apikey + "\nemail: " + email + "\nsubdomain: " + subdomain);
-});
-
-server.get("/api/delete", upload.none(), async (req, res) => {
- //if (DisableRegister.status === "true") {
- // res.status(500).json({ "ERROR": "This endpoint is currently disabled." });
- // return;
- //}
- console.log("Got query:", req.query);
- if (!req.query.username || !req.query.apikey || !req.query.subdomain) {
- res.send("No username, apikey, or subdomain provided.");
- return;
- }
- let username = req.query.username;
- let apikey = req.query.apikey;
- let email = req.query.email;
- let subdomain = req.query.subdomain;
-
- let result = await DeleteDomain(apikey, username, email, subdomain);
- // if result json contains ERROR, send error
- if (result.error) {
- res.status(500).send(result);
- return;
- } else {
- res.status(202).send(result);
- return;
- }
-});
-
-server.get("/api/preregister", async function (req, res) {
- let pr = req.query.pr;
- let domain = req.query.domain;
- let activation_code = req.query.activation_code;
- let token = req.query.token;
- if (!pr || !domain || !activation_code || !token) {
- res.send("No pr, domain, activation_code, or token provided.");
- return;
- }
- if (token !== process.env.WEBHOST_TOKEN) {
- res.send("Invalid token.");
- return;
- }
- await Activation.create({
- prid: pr,
- domain: domain,
- activation_code: activation_code,
- });
- res.send("OK");
-});
-
-// Notify API
-server.get("/pr/merged/:pr", async function (req, res) {
- var pr = req.params.pr;
-
- const BOT_TOKEN = process.env.BOT_TOKEN;
-
- const octokit = new Octokit({
- auth: BOT_TOKEN,
- });
-
- const PRDATA = await Prdata.findOne({ prid: pr });
- const Activate = await Activation.findOne({ prid: pr });
-
- if (!PRDATA) {
- await fetch(
- "https://raw.githubusercontent.com/is-a-dev/team-docs/main/pr-merged.md",
- )
- .then((response) => response.text())
- .then((data) => {
- // Do something with your data
- console.log(data);
- octokit.request(
- "POST /repos/{owner}/{repo}/issues/{issue_number}/comments",
- {
- owner: "is-a-dev",
- repo: "register",
- issue_number: pr,
- body: data,
- },
- );
- });
- if (Activate) {
- let activation_code = Activate.activation_code;
- let domain = Activate.domain;
- await fetch(
- `https://hosts.is-a.dev/api/activate?domain=${domain}&activation_code=${activation_code}&NOTIFY_TOKEN=${process.env.WEBHOST_TOKEN}`,
- );
- }
-
- await prdata.create({
- prid: pr,
- merged: true,
- });
-
- res.send("PR Not Found, Created PR Data");
- } else {
- res.send("PR Found, Checking Status");
- }
-});
-
-server.all("*", (req, res) => {
- res.redirect("https://manage.is-a.dev/");
-});
-
-function keepAlive(client) {
- server.listen(3000, () => {
- console.log("Server is ready.");
- });
-}
-
-module.exports = keepAlive;
diff --git a/OLD/index.js b/OLD/index.js
deleted file mode 100644
index c868eda..0000000
--- a/OLD/index.js
+++ /dev/null
@@ -1,178 +0,0 @@
-const fs = require("node:fs");
-const path = require("node:path");
-
-const {
- Client,
- Collection,
- Events,
- GatewayIntentBits,
- EmbedBuilder,
- ActivityType,
-} = require("discord.js");
-const mongoose = require("mongoose");
-const Sentry = require("@sentry/node");
-const keepAlive = require("./components/webserver.js");
-const { ForwardMailGen } = require("./templates/forwardmail/gen.js");
-const { EmailGithubGen } = require("./templates/forwardmail-github/gen.js");
-const { ReplitGen } = require("./templates/replit/gen.js");
-const { HashnodeGen } = require("./templates/hashnode/gen.js");
-const { adminSendEmails } = require("./components/adminSendEmails.js");
-const { DeleteDomain } = require("./components/delete.js");
-const { EditModal } = require("./components/Edit/modal.js");
-
-require("dotenv").config();
-
-// Sentry
-Sentry.init({
- dsn: "https://2854c55af6ab42ffb6f840091e3b235c@o575799.ingest.sentry.io/4505311662309376",
-
- // Set tracesSampleRate to 1.0 to capture 100%
- // of transactions for performance monitoring.
- // We recommend adjusting this value in production
- tracesSampleRate: 1.0,
-});
-
-const mongoDB = process.env.MONGO_DB;
-
-const token = process.env.DISCORD_TOKEN;
-// Create a new client instance
-const client = new Client({ intents: [GatewayIntentBits.Guilds] });
-
-client.commands = new Collection();
-
-const commandsPath = path.join(__dirname, "commands");
-const commandFiles = fs
- .readdirSync(commandsPath)
- .filter((file) => file.endsWith(".js"));
-
-for (const file of commandFiles) {
- const filePath = path.join(commandsPath, file);
- const command = require(filePath);
-
- // Set a new item in the Collection with the key as the command name and the value as the exported module
- if ("data" in command && "execute" in command) {
- client.commands.set(command.data.name, command);
- } else {
- console.log(
- `[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`,
- );
- }
-}
-
-client.on(Events.InteractionCreate, async (interaction) => {
- //if (!interaction.isChatInputCommand()) return;
- if (interaction.customId === "feedback") {
- // Get the values from the interaction
- const improve = interaction.fields.getTextInputValue("improve");
- const suggest = interaction.fields.getTextInputValue("suggest");
- const username = interaction.user.username;
-
- // Send the values to the channel #feedback
- const channel = interaction.guild.channels.cache.find(
- (channel) => channel.name === "bot-feedback",
- );
- const embed = new EmbedBuilder()
- .setTitle("Feedback")
- .setDescription(`Improvements: ${improve}\nSuggestions: ${suggest}`)
- .setColor("#00FF00")
- .setFooter({ text: `Feedback from ${username}` })
- .setTimestamp();
- channel.send({ embeds: [embed] });
- // Send a reply to the user
- await interaction.reply({
- content: "Your submission was received successfully!",
- });
- }
-
- if (interaction.customId === "emailforward") {
- ForwardMailGen(interaction);
- }
- if (interaction.customId === "EmailGithub") {
- EmailGithubGen(interaction);
- }
- if (interaction.customId === "Replit") {
- ReplitGen(interaction);
- }
- if (interaction.customId === "hashnode") {
- HashnodeGen(interaction);
- }
- if (interaction.customId === "sendemail") {
- adminSendEmails(interaction);
- }
- if (
- interaction.user.id !== "598245488977903688" &&
- interaction.user.id !== "853158265466257448"
- ) {
- await interaction.reply({
- content: "You are not authorized to use this command!",
- ephemeral: true,
- });
- return;
- }
-
- if (interaction.customId === "delete") {
- DeleteDomain(interaction);
- }
- if (interaction.customId === "edit") {
- EditModal(interaction);
- }
-
- const command = interaction.client.commands.get(interaction.commandName);
- console.log(interaction.commandName);
-
- if (!command) {
- console.error(
- `No command matching ${interaction.commandName} was found.`,
- );
- return;
- }
-
- try {
- await command.execute(interaction);
- } catch (error) {
- console.error(error);
- if (interaction.replied || interaction.deferred) {
- await interaction.followUp({
- content: "There was an error while executing this command!",
- ephemeral: true,
- });
- } else {
- await interaction.reply({
- content: "There was an error while executing this command!",
- ephemeral: true,
- });
- }
- }
-});
-
-// When the client is ready, run this code (only once)
-// We use 'c' for the event parameter to keep it separate from the already defined 'client'
-client.once(Events.ClientReady, (c) => {
- client.user.setPresence({
- activities: [
- { name: `Registering Subdomains`, type: ActivityType.Watching },
- ],
- status: "online",
- });
-
- console.log(`Ready! Logged in as ${c.user.tag}`);
-});
-
-mongoose
- .connect(mongoDB, {
- useNewUrlParser: true,
- useUnifiedTopology: true,
- dbName: "is-a-dev",
- })
- .then(() => {
- console.log("Connected to the database");
- })
- .catch((error) => {
- console.error("Error connecting to the database:", error);
- });
-
-//SMTP(); off for now
-keepAlive(client);
-
-// Log in to Discord with your client's token
-client.login(token);
diff --git a/OLD/models/activation.js b/OLD/models/activation.js
deleted file mode 100644
index 5200824..0000000
--- a/OLD/models/activation.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const mongoose = require("mongoose");
-
-const userSchema = new mongoose.Schema(
- {
- prid: String,
- activation_code: String,
- domain: String,
- },
- { collection: "activation" },
-);
-
-module.exports = mongoose.model("activation", userSchema);
diff --git a/OLD/models/control.js b/OLD/models/control.js
deleted file mode 100644
index 1ba2fa4..0000000
--- a/OLD/models/control.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const mongoose = require("mongoose");
-
-// William Keep out of this file, you don't need to touch it.
-
-const userSchema = new mongoose.Schema(
- {
- DisableRegister: Boolean,
- fork: Boolean,
- },
- { collection: "controller" },
-);
-
-module.exports = mongoose.model("controller", userSchema);
diff --git a/OLD/models/maintainers.js b/OLD/models/maintainers.js
deleted file mode 100644
index 59036b4..0000000
--- a/OLD/models/maintainers.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const mongoose = require("mongoose");
-
-const userSchema = new mongoose.Schema(
- {
- userid: String,
- maintainer: Boolean,
- },
- { collection: "maintainer" },
-);
-
-module.exports = mongoose.model("maintainer", userSchema);
diff --git a/OLD/models/prdata.js b/OLD/models/prdata.js
deleted file mode 100644
index e49ce6b..0000000
--- a/OLD/models/prdata.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const mongoose = require("mongoose");
-
-const userSchema = new mongoose.Schema(
- {
- prid: String,
- merged: Boolean,
- },
- { collection: "prdata" },
-);
-
-module.exports = mongoose.model("prdata", userSchema);
diff --git a/OLD/models/user.js b/OLD/models/user.js
deleted file mode 100644
index 07632e9..0000000
--- a/OLD/models/user.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const mongoose = require("mongoose");
-
-const userSchema = new mongoose.Schema(
- {
- userid: String,
- githubid: String,
- email: String,
- gittoken: String,
- betatester: Boolean,
- maintainer: Boolean,
- },
- { collection: "userdata" },
-);
-
-module.exports = mongoose.model("userdata", userSchema);
diff --git a/OLD/package-lock.json b/OLD/package-lock.json
deleted file mode 100644
index f0a063a..0000000
--- a/OLD/package-lock.json
+++ /dev/null
@@ -1,2028 +0,0 @@
-{
- "name": "is-a-dev-discord",
- "version": "2.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "is-a-dev-discord",
- "version": "2.1.0",
- "license": "MIT",
- "dependencies": {
- "@octokit/core": "^4.2.1",
- "@octokit/rest": "^19.0.11",
- "@sendgrid/mail": "^7.7.0",
- "@sentry/node": "^7.54.0",
- "cors": "^2.8.5",
- "discord.js": "^14.11.0",
- "dotenv": "^16.0.3",
- "ejs": "^3.1.9",
- "express": "^4.18.2",
- "mongoose": "^7.2.1",
- "multer": "^1.4.5-lts.1",
- "node-fetch": "^2.6.7",
- "pretty-ms": "^7.0.1",
- "smtp-server": "^3.12.0"
- }
- },
- "node_modules/@discordjs/builders": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz",
- "integrity": "sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw==",
- "dependencies": {
- "@discordjs/formatters": "^0.3.1",
- "@discordjs/util": "^0.3.1",
- "@sapphire/shapeshift": "^3.8.2",
- "discord-api-types": "^0.37.41",
- "fast-deep-equal": "^3.1.3",
- "ts-mixer": "^6.0.3",
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/collection": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz",
- "integrity": "sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA==",
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/formatters": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz",
- "integrity": "sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA==",
- "dependencies": {
- "discord-api-types": "^0.37.41"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/rest": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz",
- "integrity": "sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ==",
- "dependencies": {
- "@discordjs/collection": "^1.5.1",
- "@discordjs/util": "^0.3.0",
- "@sapphire/async-queue": "^1.5.0",
- "@sapphire/snowflake": "^3.4.2",
- "discord-api-types": "^0.37.41",
- "file-type": "^18.3.0",
- "tslib": "^2.5.0",
- "undici": "^5.22.0"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/util": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz",
- "integrity": "sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA==",
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/ws": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz",
- "integrity": "sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g==",
- "dependencies": {
- "@discordjs/collection": "^1.5.1",
- "@discordjs/rest": "^1.7.1",
- "@discordjs/util": "^0.3.1",
- "@sapphire/async-queue": "^1.5.0",
- "@types/ws": "^8.5.4",
- "@vladfrangu/async_event_emitter": "^2.2.1",
- "discord-api-types": "^0.37.41",
- "tslib": "^2.5.0",
- "ws": "^8.13.0"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@octokit/auth-token": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz",
- "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==",
- "dependencies": {
- "@octokit/types": "^9.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@octokit/core": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz",
- "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==",
- "dependencies": {
- "@octokit/auth-token": "^3.0.0",
- "@octokit/graphql": "^5.0.0",
- "@octokit/request": "^6.0.0",
- "@octokit/request-error": "^3.0.0",
- "@octokit/types": "^9.0.0",
- "before-after-hook": "^2.2.0",
- "universal-user-agent": "^6.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@octokit/endpoint": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz",
- "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==",
- "dependencies": {
- "@octokit/types": "^9.0.0",
- "is-plain-object": "^5.0.0",
- "universal-user-agent": "^6.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@octokit/graphql": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz",
- "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==",
- "dependencies": {
- "@octokit/request": "^6.0.0",
- "@octokit/types": "^9.0.0",
- "universal-user-agent": "^6.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@octokit/openapi-types": {
- "version": "17.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.2.0.tgz",
- "integrity": "sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ=="
- },
- "node_modules/@octokit/plugin-paginate-rest": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz",
- "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==",
- "dependencies": {
- "@octokit/tsconfig": "^1.0.2",
- "@octokit/types": "^9.2.3"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "@octokit/core": ">=4"
- }
- },
- "node_modules/@octokit/plugin-request-log": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
- "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
- "peerDependencies": {
- "@octokit/core": ">=3"
- }
- },
- "node_modules/@octokit/plugin-rest-endpoint-methods": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.2.tgz",
- "integrity": "sha512-R0oJ7j6f/AdqPLtB9qRXLO+wjI9pctUn8Ka8UGfGaFCcCv3Otx14CshQ89K4E88pmyYZS8p0rNTiprML/81jig==",
- "dependencies": {
- "@octokit/types": "^9.2.3",
- "deprecation": "^2.3.1"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "@octokit/core": ">=3"
- }
- },
- "node_modules/@octokit/request": {
- "version": "6.2.5",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz",
- "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==",
- "dependencies": {
- "@octokit/endpoint": "^7.0.0",
- "@octokit/request-error": "^3.0.0",
- "@octokit/types": "^9.0.0",
- "is-plain-object": "^5.0.0",
- "node-fetch": "^2.6.7",
- "universal-user-agent": "^6.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@octokit/request-error": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz",
- "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==",
- "dependencies": {
- "@octokit/types": "^9.0.0",
- "deprecation": "^2.0.0",
- "once": "^1.4.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@octokit/rest": {
- "version": "19.0.11",
- "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz",
- "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==",
- "dependencies": {
- "@octokit/core": "^4.2.1",
- "@octokit/plugin-paginate-rest": "^6.1.2",
- "@octokit/plugin-request-log": "^1.0.4",
- "@octokit/plugin-rest-endpoint-methods": "^7.1.2"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@octokit/tsconfig": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz",
- "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA=="
- },
- "node_modules/@octokit/types": {
- "version": "9.2.3",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.3.tgz",
- "integrity": "sha512-MMeLdHyFIALioycq+LFcA71v0S2xpQUX2cw6pPbHQjaibcHYwLnmK/kMZaWuGfGfjBJZ3wRUq+dOaWsvrPJVvA==",
- "dependencies": {
- "@octokit/openapi-types": "^17.2.0"
- }
- },
- "node_modules/@sapphire/async-queue": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz",
- "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==",
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/@sapphire/shapeshift": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.0.tgz",
- "integrity": "sha512-iJpHmjAdwX9aSL6MvFpVyo+tkokDtInmSjoJHbz/k4VJfnim3DjvG0hgGEKWtWZgCu45RaLgcoNgR1fCPdIz3w==",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "lodash": "^4.17.21"
- },
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/@sapphire/snowflake": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz",
- "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==",
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/@sendgrid/client": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.7.0.tgz",
- "integrity": "sha512-SxH+y8jeAQSnDavrTD0uGDXYIIkFylCo+eDofVmZLQ0f862nnqbC3Vd1ej6b7Le7lboyzQF6F7Fodv02rYspuA==",
- "dependencies": {
- "@sendgrid/helpers": "^7.7.0",
- "axios": "^0.26.0"
- },
- "engines": {
- "node": "6.* || 8.* || >=10.*"
- }
- },
- "node_modules/@sendgrid/helpers": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.7.0.tgz",
- "integrity": "sha512-3AsAxfN3GDBcXoZ/y1mzAAbKzTtUZ5+ZrHOmWQ279AuaFXUNCh9bPnRpN504bgveTqoW+11IzPg3I0WVgDINpw==",
- "dependencies": {
- "deepmerge": "^4.2.2"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/@sendgrid/mail": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.7.0.tgz",
- "integrity": "sha512-5+nApPE9wINBvHSUxwOxkkQqM/IAAaBYoP9hw7WwgDNQPxraruVqHizeTitVtKGiqWCKm2mnjh4XGN3fvFLqaw==",
- "dependencies": {
- "@sendgrid/client": "^7.7.0",
- "@sendgrid/helpers": "^7.7.0"
- },
- "engines": {
- "node": "6.* || 8.* || >=10.*"
- }
- },
- "node_modules/@sentry-internal/tracing": {
- "version": "7.54.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.54.0.tgz",
- "integrity": "sha512-JsyhZ0wWZ+VqbHJg+azqRGdYJDkcI5R9+pnkO6SzbzxrRewqMAIwzkpPee3oI7vG99uhMEkOkMjHu0nQGwkOQw==",
- "dependencies": {
- "@sentry/core": "7.54.0",
- "@sentry/types": "7.54.0",
- "@sentry/utils": "7.54.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry-internal/tracing/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "node_modules/@sentry/core": {
- "version": "7.54.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.54.0.tgz",
- "integrity": "sha512-MAn0E2EwgNn1pFQn4qxhU+1kz6edullWg6VE5wCmtpXWOVw6sILBUsQpeIG5djBKMcneJCdOlz5jeqcKPrLvZQ==",
- "dependencies": {
- "@sentry/types": "7.54.0",
- "@sentry/utils": "7.54.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/core/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "node_modules/@sentry/node": {
- "version": "7.54.0",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.54.0.tgz",
- "integrity": "sha512-k8P7WD6lra3JF3H/y9GO+twBV8qQilj3X3d8PpaVPBHHwOA9AfdBVF18qgrdlZKghKtgALapZzrQQVnTOm34rw==",
- "dependencies": {
- "@sentry-internal/tracing": "7.54.0",
- "@sentry/core": "7.54.0",
- "@sentry/types": "7.54.0",
- "@sentry/utils": "7.54.0",
- "cookie": "^0.4.1",
- "https-proxy-agent": "^5.0.0",
- "lru_map": "^0.3.3",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/node/node_modules/cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/@sentry/node/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "node_modules/@sentry/types": {
- "version": "7.54.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.54.0.tgz",
- "integrity": "sha512-D+i9xogBeawvQi2r0NOrM7zYcUaPuijeME4O9eOTrDF20tj71hWtJLilK+KTGLYFtpGg1h+9bPaz7OHEIyVopg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/utils": {
- "version": "7.54.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.54.0.tgz",
- "integrity": "sha512-3Yf5KlKjIcYLddOexSt2ovu2TWlR4Fi7M+aCK8yUTzwNzf/xwFSWOstHlD/WiDy9HvfhWAOB/ukNTuAeJmtasw==",
- "dependencies": {
- "@sentry/types": "7.54.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@sentry/utils/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "node_modules/@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
- "node_modules/@types/node": {
- "version": "20.2.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz",
- "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ=="
- },
- "node_modules/@types/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog=="
- },
- "node_modules/@types/whatwg-url": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
- "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
- "dependencies": {
- "@types/node": "*",
- "@types/webidl-conversions": "*"
- }
- },
- "node_modules/@types/ws": {
- "version": "8.5.4",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz",
- "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@vladfrangu/async_event_emitter": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz",
- "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==",
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agent-base/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/agent-base/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/append-field": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
- "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
- },
- "node_modules/async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
- },
- "node_modules/axios": {
- "version": "0.26.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
- "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
- "dependencies": {
- "follow-redirects": "^1.14.8"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/base32.js": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz",
- "integrity": "sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/before-after-hook": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
- "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
- },
- "node_modules/body-parser": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
- "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
- "dependencies": {
- "bytes": "3.1.2",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.1",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/bson": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz",
- "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==",
- "engines": {
- "node": ">=14.20.1"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
- },
- "node_modules/concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "engines": [
- "node >= 0.8"
- ],
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
- },
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/discord-api-types": {
- "version": "0.37.42",
- "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.42.tgz",
- "integrity": "sha512-1Huaj9cQ1W7/uryS8MZs/tZemnoKB94thM1cE40lep3rpU3q7WHqkdjN/veX0prTkYlPhcyLd/DeF/pBO8X8oQ=="
- },
- "node_modules/discord.js": {
- "version": "14.11.0",
- "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz",
- "integrity": "sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ==",
- "dependencies": {
- "@discordjs/builders": "^1.6.3",
- "@discordjs/collection": "^1.5.1",
- "@discordjs/formatters": "^0.3.1",
- "@discordjs/rest": "^1.7.1",
- "@discordjs/util": "^0.3.1",
- "@discordjs/ws": "^0.8.3",
- "@sapphire/snowflake": "^3.4.2",
- "@types/ws": "^8.5.4",
- "discord-api-types": "^0.37.41",
- "fast-deep-equal": "^3.1.3",
- "lodash.snakecase": "^4.1.1",
- "tslib": "^2.5.0",
- "undici": "^5.22.0",
- "ws": "^8.13.0"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/dotenv": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
- "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
- },
- "node_modules/ejs": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
- "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
- "dependencies": {
- "jake": "^10.8.5"
- },
- "bin": {
- "ejs": "bin/cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express": {
- "version": "4.18.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
- "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.1",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.5.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/file-type": {
- "version": "18.4.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.4.0.tgz",
- "integrity": "sha512-o6MQrZKTAK6WpvmQk3jqTVUmqxYBxW5bloUfrdH1ZnRFDvvAPNr+l+rgOxM3nkqWT+3khaj3FRMDydWe0xhu+w==",
- "dependencies": {
- "readable-web-to-node-stream": "^3.0.2",
- "strtok3": "^7.0.0",
- "token-types": "^5.0.1"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
- }
- },
- "node_modules/filelist": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
- "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
- "dependencies": {
- "minimatch": "^5.0.1"
- }
- },
- "node_modules/filelist/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/filelist/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/follow-redirects": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
- "dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/https-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/ipv6-normalize": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz",
- "integrity": "sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA=="
- },
- "node_modules/is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
- },
- "node_modules/jake": {
- "version": "10.8.7",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
- "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
- "dependencies": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
- "filelist": "^1.0.4",
- "minimatch": "^3.1.2"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/kareem": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
- "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/lodash.snakecase": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
- "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="
- },
- "node_modules/lru_map": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
- "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ=="
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/memory-pager": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
- "optional": true
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/mongodb": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.5.0.tgz",
- "integrity": "sha512-XgrkUgAAdfnZKQfk5AsYL8j7O99WHd4YXPxYxnh8dZxD+ekYWFRA3JktUsBnfg+455Smf75/+asoU/YLwNGoQQ==",
- "dependencies": {
- "bson": "^5.3.0",
- "mongodb-connection-string-url": "^2.6.0",
- "socks": "^2.7.1"
- },
- "engines": {
- "node": ">=14.20.1"
- },
- "optionalDependencies": {
- "saslprep": "^1.0.3"
- },
- "peerDependencies": {
- "@aws-sdk/credential-providers": "^3.201.0",
- "mongodb-client-encryption": ">=2.3.0 <3",
- "snappy": "^7.2.2"
- },
- "peerDependenciesMeta": {
- "@aws-sdk/credential-providers": {
- "optional": true
- },
- "mongodb-client-encryption": {
- "optional": true
- },
- "snappy": {
- "optional": true
- }
- }
- },
- "node_modules/mongodb-connection-string-url": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
- "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
- "dependencies": {
- "@types/whatwg-url": "^8.2.1",
- "whatwg-url": "^11.0.0"
- }
- },
- "node_modules/mongoose": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.2.1.tgz",
- "integrity": "sha512-c2OOl+ch9NlmPeJw7UjSb2jHNjoOw1XXHyzwygIf4z1GmaBx1OYb8OYqHkYPivvEmfY/vUWZFCgePsDqZgFn2w==",
- "dependencies": {
- "bson": "^5.3.0",
- "kareem": "2.5.1",
- "mongodb": "5.5.0",
- "mpath": "0.9.0",
- "mquery": "5.0.0",
- "ms": "2.1.3",
- "sift": "16.0.1"
- },
- "engines": {
- "node": ">=14.20.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mongoose"
- }
- },
- "node_modules/mongoose/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/mpath": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
- "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/mquery": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
- "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
- "dependencies": {
- "debug": "4.x"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/mquery/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/mquery/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/multer": {
- "version": "1.4.5-lts.1",
- "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz",
- "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==",
- "dependencies": {
- "append-field": "^1.0.0",
- "busboy": "^1.0.0",
- "concat-stream": "^1.5.2",
- "mkdirp": "^0.5.4",
- "object-assign": "^4.1.1",
- "type-is": "^1.6.4",
- "xtend": "^4.0.0"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
- "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-fetch/node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
- },
- "node_modules/node-fetch/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
- },
- "node_modules/node-fetch/node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/nodemailer": {
- "version": "6.9.2",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.2.tgz",
- "integrity": "sha512-4+TYaa/e1nIxQfyw/WzNPYTEZ5OvHIDEnmjs4LPmIfccPQN+2CYKmGHjWixn/chzD3bmUTu5FMfpltizMxqzdg==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.12.3",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
- "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/parse-ms": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
- "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
- },
- "node_modules/peek-readable": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
- "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/pretty-ms": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz",
- "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==",
- "dependencies": {
- "parse-ms": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
- "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
- "dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/readable-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/readable-web-to-node-stream/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/saslprep": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
- "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
- "optional": true,
- "dependencies": {
- "sparse-bitfield": "^3.0.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.18.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/sift": {
- "version": "16.0.1",
- "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
- "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
- },
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/smtp-server": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/smtp-server/-/smtp-server-3.12.0.tgz",
- "integrity": "sha512-y8gxURoUv2BrnEsVRbJ9tqbDxp1hLd2l7e5tXp/XscC0EueFjvSQLrpayedYa1mMQgnlhQuGtS1fj9ULfefAkw==",
- "dependencies": {
- "base32.js": "0.1.0",
- "ipv6-normalize": "1.0.1",
- "nodemailer": "6.9.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
- "dependencies": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
- },
- "engines": {
- "node": ">= 10.13.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/sparse-bitfield": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
- "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
- "optional": true,
- "dependencies": {
- "memory-pager": "^1.0.2"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/strtok3": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz",
- "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^5.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/token-types": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz",
- "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/ts-mixer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz",
- "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ=="
- },
- "node_modules/tslib": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz",
- "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA=="
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
- },
- "node_modules/undici": {
- "version": "5.22.1",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz",
- "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==",
- "dependencies": {
- "busboy": "^1.6.0"
- },
- "engines": {
- "node": ">=14.0"
- }
- },
- "node_modules/universal-user-agent": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
- },
- "node_modules/ws": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
- "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- }
- }
-}
diff --git a/OLD/package.json b/OLD/package.json
deleted file mode 100644
index e2f4e8d..0000000
--- a/OLD/package.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "is-a-dev-discord",
- "version": "2.1.0",
- "description": "Discord bot to manage the creation of is-a-dev records",
- "main": "index.js",
- "scripts": {
- "register": "node registerCommands.js",
- "start": "node registerCommands.js && node index.js"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/andrewstech/is-a-dev-discord.git"
- },
- "keywords": [
- "Discord"
- ],
- "author": "andrewstech",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/andrewstech/is-a-dev-discord/issues"
- },
- "homepage": "https://github.com/andrewstech/is-a-dev-discord#readme",
- "dependencies": {
- "@octokit/core": "^4.2.1",
- "@octokit/rest": "^19.0.11",
- "@sendgrid/mail": "^7.7.0",
- "@sentry/node": "^7.54.0",
- "cors": "^2.8.5",
- "discord.js": "^14.11.0",
- "dotenv": "^16.0.3",
- "ejs": "^3.1.9",
- "express": "^4.18.2",
- "mongoose": "^7.2.1",
- "multer": "^1.4.5-lts.1",
- "node-fetch": "^2.6.7",
- "pretty-ms": "^7.0.1",
- "smtp-server": "^3.12.0"
- }
-}
diff --git a/OLD/private-commands/# b/OLD/private-commands/#
deleted file mode 100644
index e69de29..0000000
diff --git a/OLD/private-commands/about.js b/OLD/private-commands/about.js
deleted file mode 100644
index ac6ad6f..0000000
--- a/OLD/private-commands/about.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const { SlashCommandBuilder, EmbedBuilder } = require("discord.js");
-const prettyMilliseconds = require("pretty-ms");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("about")
- .setDescription("About the bot!"),
- async execute(interaction) {
- const uptime = prettyMilliseconds(interaction.client.uptime, {
- verbose: true,
- secondsDecimalDigits: 0,
- });
- // Create embed
- const embed = `{
- "id": 538289175,
- "fields": [
- {
- "id": 449247638,
- "name": "Uptime",
- "value": "${uptime}",
- "inline": false
- }
- ],
- "author": {
- "name": "Domain Registration Bot"
- },
- "title": "About",
- "footer": {
- "text": "ยฉPixelsLTD"
- },
- "color": 16762624
- }`;
- await interaction.reply({ embeds: [embed] });
- },
-};
diff --git a/OLD/registerCommands.js b/OLD/registerCommands.js
deleted file mode 100644
index ea34f93..0000000
--- a/OLD/registerCommands.js
+++ /dev/null
@@ -1,61 +0,0 @@
-const { REST, Routes } = require("discord.js");
-const fs = require("node:fs");
-const path = require("node:path");
-require("dotenv").config();
-
-const token = process.env.DISCORD_TOKEN;
-const clientId = process.env.DISCORD_CLIENT_ID;
-const guildId = process.env.DISCORD_GUILD_ID;
-
-const commands = [];
-const GuildCommands = [];
-
-// Grab all the command folders from the commands directory you created earlier
-const commandsPath = path.join(__dirname, "commands");
-const commandFiles = fs
- .readdirSync(commandsPath)
- .filter((file) => file.endsWith(".js"));
-
-for (const file of commandFiles) {
- const filePath = path.join(commandsPath, file);
- const command = require(filePath);
-
- if ("data" in command && "execute" in command) {
- commands.push(command.data.toJSON());
- } else {
- console.log(
- `[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.`,
- );
- }
-}
-
-// Construct and prepare an instance of the REST module
-const rest = new REST().setToken(token);
-
-// and deploy your commands!
-(async () => {
- try {
- console.log(
- `Started refreshing ${commands.length} application (/) commands.`,
- );
-
- // The put method is used to fully refresh all commands
- const guilddata = await rest.put(
- Routes.applicationGuildCommands(clientId, guildId),
- { body: GuildCommands },
- );
- const data = await rest.put(Routes.applicationCommands(clientId), {
- body: commands,
- });
-
- console.log(
- `Successfully reloaded Guild ${guilddata.length} application (/) commands.`,
- );
- console.log(
- `Successfully reloaded ${data.length} application (/) commands.`,
- );
- } catch (error) {
- // And of course, make sure you catch and log any errors!
- console.error(error);
- }
-})();
diff --git a/OLD/services/guildId.js b/OLD/services/guildId.js
deleted file mode 100644
index da98762..0000000
--- a/OLD/services/guildId.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const { isADev } = require("./is-a-dev.js");
-function GuildID(id) {
- if (isADev.guildID === id) {
- return isADev;
- } else {
- return false;
- }
-}
-module.exports = { GuildID };
diff --git a/OLD/services/is-a-dev.js b/OLD/services/is-a-dev.js
deleted file mode 100644
index 26b502e..0000000
--- a/OLD/services/is-a-dev.js
+++ /dev/null
@@ -1,22 +0,0 @@
-const isADev = {
- domains: ["is-a.dev"],
- name: "is-a.dev",
- github: "is-a-dev",
- repository: "register",
- logo: "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- description: "A free domain registration service for developers.",
- guildID: "830872854677422150",
- record: {
- owner: {
- username: "${username}",
- email: "${email}",
- },
-
- record: {
- "${type}": "${data.toLowerCase()}",
- },
- },
- recordtypes: ["A", "CNAME", "MX", "TXT"],
-};
-
-module.exports = { isADev };
diff --git a/OLD/services/test.js b/OLD/services/test.js
deleted file mode 100644
index 9cba3c4..0000000
--- a/OLD/services/test.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const { GuildID } = require("./guildId.js");
-
-const guild = GuildID("830872854677422150");
-console.log(guild);
diff --git a/OLD/templates/forwardmail-github/gen.js b/OLD/templates/forwardmail-github/gen.js
deleted file mode 100644
index 77dfa9f..0000000
--- a/OLD/templates/forwardmail-github/gen.js
+++ /dev/null
@@ -1,125 +0,0 @@
-const User = require("../../models/user.js");
-const { fork } = require("../../components/fork.js");
-const { OpenPR } = require("../../components/pr.js");
-const { Octokit } = require("@octokit/rest");
-const { EmbedBuilder } = require("discord.js");
-
-async function EmailGithubGen(interaction) {
- const ForwardEmail = interaction.fields.getTextInputValue("emailaddress");
- const subdomain = interaction.fields.getTextInputValue("subdomain");
-
- const embeds = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.reply({ embeds: [embeds] });
- await fork(interaction.user.id, interaction, subdomain);
- const githubUser = await User.findOne({ userid: interaction.user.id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const email = githubUser.email;
- const id = interaction.user.id;
- const octokit = new Octokit({ auth: token });
- content = `{
- "owner": {
- "username": "${username}",
- "email": "${email}",
- "note": "This record was created by is-a.dev Discord bot via discord id: ${id}"
- },
-
- "record": {
- "A": [
- "185.199.108.153",
- "185.199.109.153",
- "185.199.110.153",
- "185.199.111.153"
- ],
-
- "MX": ["mx1.forwardemail.net", "mx2.forwardemail.net"],
-
- "TXT": "forward-email=${ForwardEmail}"
- }
-}
-`;
-
- // add a 3 second delay to allow the fork to complete
- await new Promise((r) => setTimeout(r, 3000));
-
- const ifexistsurl = `https://raw.githubusercontent.com/${username}/register/main/domains/${subdomain}.json`;
- const ifexists = await fetch(ifexistsurl);
-
- if (ifexists.status === 200) {
- const ErrorEmbed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .setURL(ifexistsurl)
- .setDescription(`This domain already exists!`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#FF0000")
- .setFooter({
- text: "is-a.dev",
- iconURL:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [ErrorEmbed] });
- return;
- }
-
- const record = Buffer.from(content).toString("base64");
-
- const commit = await octokit.repos.createOrUpdateFileContents({
- owner: username,
- repo: "register",
- path: `domains/${subdomain.toLowerCase()}.json`,
- message: `feat(domain): ${subdomain}.is-a.dev`,
- content: record,
- committer: {
- name: username,
- email: email,
- },
- author: {
- name: username,
- email: email,
- },
- });
-
- if (process.env.DEBUG) {
- console.log(commit);
- }
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ
", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setDescription(
- `Your domain has been generated! Please wait for a staff member to review your PR.`,
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
- await OpenPR(interaction.user.id, subdomain, interaction);
-}
-
-exports.EmailGithubGen = EmailGithubGen;
diff --git a/OLD/templates/forwardmail-github/modal.js b/OLD/templates/forwardmail-github/modal.js
deleted file mode 100644
index c4df8e3..0000000
--- a/OLD/templates/forwardmail-github/modal.js
+++ /dev/null
@@ -1,40 +0,0 @@
-const {
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
-} = require("discord.js");
-
-async function EmailGithub(interaction) {
- const modal = new ModalBuilder()
- .setCustomId("EmailGithub")
- .setTitle("Email Forwarder and Github Pages");
-
- // Add components to modal
- const subdomain = new TextInputBuilder()
- .setCustomId("subdomain")
- .setLabel("What subdomain do you want?")
- .setPlaceholder("subdomain")
- .setMinLength(3)
- .setMaxLength(20)
- .setRequired(true)
- .setStyle(TextInputStyle.Short);
-
- // Create the text input components
- const email = new TextInputBuilder()
- .setCustomId("emailaddress")
- // The label is the prompt the user sees for this input
- .setLabel("What's the email to forward to?")
- // Short means only a single line of text
- .setStyle(TextInputStyle.Short);
-
- const firstActionRow = new ActionRowBuilder().addComponents(email);
- const secondActionRow = new ActionRowBuilder().addComponents(subdomain);
-
- modal.addComponents(firstActionRow, secondActionRow);
-
- // Show the modal to the user
- await interaction.showModal(modal);
-}
-
-exports.EmailGithub = EmailGithub;
diff --git a/OLD/templates/forwardmail/gen.js b/OLD/templates/forwardmail/gen.js
deleted file mode 100644
index 781c53f..0000000
--- a/OLD/templates/forwardmail/gen.js
+++ /dev/null
@@ -1,123 +0,0 @@
-const User = require("../../models/user.js");
-const { fork } = require("../../components/fork.js");
-const { OpenPR } = require("../../components/pr.js");
-const { Octokit } = require("@octokit/rest");
-const { EmbedBuilder } = require("discord.js");
-
-async function ForwardMailGen(interaction) {
- const ForwardEmail = interaction.fields.getTextInputValue("emailaddress");
- const subdomain = interaction.fields.getTextInputValue("subdomain");
-
- const embeds = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.reply({ embeds: [embeds] });
- await fork(interaction.user.id, interaction, subdomain);
-
- const githubUser = await User.findOne({ userid: interaction.user.id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const email = githubUser.email;
- const id = interaction.user.id;
- const octokit = new Octokit({ auth: token });
-
- content = `{
- "owner": {
- "username": "${username}",
- "email": "${email}",
- "note": "This record was created by is-a.dev Discord bot via discord id: ${id}"
- },
-
- "record": {
- "MX": ["mx1.forwardemail.net", "mx2.forwardemail.net"],
- "TXT": "forward-email=${ForwardEmail}"
-
- }
-}
-`;
- // add a 3 second delay to allow the fork to complete
- await new Promise((r) => setTimeout(r, 3000));
-
- const ifexistsurl = `https://raw.githubusercontent.com/${username}/register/main/domains/${subdomain}.json`;
- const ifexists = await fetch(ifexistsurl);
-
- if (ifexists.status === 200) {
- const ErrorEmbed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .setURL(ifexistsurl)
- .setDescription(`This domain already exists!`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#FF0000")
- .setFooter({
- text: "is-a.dev",
- iconURL:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [ErrorEmbed] });
- return;
- }
- const record = Buffer.from(content).toString("base64");
-
- const commit = await octokit.repos.createOrUpdateFileContents({
- owner: username,
- repo: "register",
- path: `domains/${subdomain.toLowerCase()}.json`,
- message: `feat(domain): ${subdomain}.is-a.dev`,
- content: record,
- committer: {
- name: username,
- email: email,
- },
- author: {
- name: username,
- email: email,
- },
- });
-
- if (process.env.DEBUG) {
- console.log(commit);
- }
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ
", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setDescription(
- `Your domain has been generated! Please wait for a staff member to review your PR.`,
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
- let extra = {
- label: "Info",
- url: `https://register-bot.is-a.dev/guides/forwarder?email=${ForwardEmail}&domain=${subdomain}`,
- };
-
- await OpenPR(interaction.user.id, subdomain, interaction, extra);
-}
-
-exports.ForwardMailGen = ForwardMailGen;
diff --git a/OLD/templates/forwardmail/modal.js b/OLD/templates/forwardmail/modal.js
deleted file mode 100644
index 6c30428..0000000
--- a/OLD/templates/forwardmail/modal.js
+++ /dev/null
@@ -1,40 +0,0 @@
-const {
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
-} = require("discord.js");
-
-async function ForwardMailModal(interaction) {
- const modal = new ModalBuilder()
- .setCustomId("emailforward")
- .setTitle("Email Forwarder");
-
- // Add components to modal
- const subdomain = new TextInputBuilder()
- .setCustomId("subdomain")
- .setLabel("What subdomain do you want?")
- .setPlaceholder("subdomain")
- .setMinLength(3)
- .setMaxLength(20)
- .setRequired(true)
- .setStyle(TextInputStyle.Short);
-
- // Create the text input components
- const email = new TextInputBuilder()
- .setCustomId("emailaddress")
- // The label is the prompt the user sees for this input
- .setLabel("What's the email to forward to?")
- // Short means only a single line of text
- .setStyle(TextInputStyle.Short);
-
- const firstActionRow = new ActionRowBuilder().addComponents(email);
- const secondActionRow = new ActionRowBuilder().addComponents(subdomain);
-
- modal.addComponents(firstActionRow, secondActionRow);
-
- // Show the modal to the user
- await interaction.showModal(modal);
-}
-
-exports.ForwardMailModal = ForwardMailModal;
diff --git a/OLD/templates/hashnode/gen.js b/OLD/templates/hashnode/gen.js
deleted file mode 100644
index 2c95b1c..0000000
--- a/OLD/templates/hashnode/gen.js
+++ /dev/null
@@ -1,122 +0,0 @@
-const User = require("../../models/user.js");
-const { fork } = require("../../components/fork.js");
-const { OpenPR } = require("../../components/pr.js");
-const { Octokit } = require("@octokit/rest");
-const { EmbedBuilder } = require("discord.js");
-
-async function HashnodeGen(interaction) {
- const subdomain = interaction.fields.getTextInputValue("subdomain");
-
- const embeds = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.reply({ embeds: [embeds] });
- await fork(interaction.user.id, interaction, subdomain);
-
- const githubUser = await User.findOne({ userid: interaction.user.id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const email = githubUser.email;
- const id = interaction.user.id;
- const octokit = new Octokit({ auth: token });
-
- content = `{
- "owner": {
- "username": "${username}",
- "email": "${email}",
- "note": "This record was created by is-a.dev Discord bot via discord id: ${id}"
- },
-
- "record": {
- "CNAME": "hashnode.network"
-
- }
-}
-`;
- // add a 3 second delay to allow the fork to complete
- await new Promise((r) => setTimeout(r, 3000));
-
- const ifexistsurl = `https://raw.githubusercontent.com/${username}/register/main/domains/${subdomain}.json`;
- const ifexists = await fetch(ifexistsurl);
-
- if (ifexists.status === 200) {
- const ErrorEmbed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .setURL(ifexistsurl)
- .setDescription(`This domain already exists!`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#FF0000")
- .setFooter({
- text: "is-a.dev",
- iconURL:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [ErrorEmbed] });
- return;
- } else {
- const record = Buffer.from(content).toString("base64");
-
- const commit = await octokit.repos.createOrUpdateFileContents({
- owner: username,
- repo: "register",
- path: `domains/${subdomain.toLowerCase()}.json`,
- message: `feat(domain): ${subdomain}.is-a.dev`,
- content: record,
- committer: {
- name: username,
- email: email,
- },
- author: {
- name: username,
- email: email,
- },
- });
-
- if (process.env.DEBUG) {
- console.log(commit);
- }
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ
", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setDescription(
- `Your domain has been generated! Please wait for a staff member to review your PR.`,
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
- let extra = {
- label: "Info",
- url: `https://support.hashnode.com/en/articles/5755362-how-to-map-a-custom-domain`,
- };
-
- await OpenPR(interaction.user.id, subdomain, interaction, extra);
- }
-}
-
-exports.HashnodeGen = HashnodeGen;
diff --git a/OLD/templates/hashnode/modal.js b/OLD/templates/hashnode/modal.js
deleted file mode 100644
index a49b6d1..0000000
--- a/OLD/templates/hashnode/modal.js
+++ /dev/null
@@ -1,33 +0,0 @@
-const {
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
-} = require("discord.js");
-
-async function HashNode(interaction) {
- const modal = new ModalBuilder()
- .setCustomId("hashnode")
- .setTitle("HashNode with is-a.dev subdomain");
-
- // Add components to modal
- const subdomain = new TextInputBuilder()
- .setCustomId("subdomain")
- .setLabel("What subdomain do you want?")
- .setPlaceholder("subdomain")
- .setMinLength(3)
- .setMaxLength(20)
- .setRequired(true)
- .setStyle(TextInputStyle.Short);
-
- // Create the text input components
-
- const secondActionRow = new ActionRowBuilder().addComponents(subdomain);
-
- modal.addComponents(secondActionRow);
-
- // Show the modal to the user
- await interaction.showModal(modal);
-}
-
-exports.HashNode = HashNode;
diff --git a/OLD/templates/replit/gen.js b/OLD/templates/replit/gen.js
deleted file mode 100644
index c4775f2..0000000
--- a/OLD/templates/replit/gen.js
+++ /dev/null
@@ -1,123 +0,0 @@
-const User = require("../../models/user.js");
-const { fork } = require("../../components/fork.js");
-const { OpenPR } = require("../../components/pr.js");
-const { Octokit } = require("@octokit/rest");
-const { EmbedBuilder } = require("discord.js");
-
-async function ReplitGen(interaction) {
- const replurl = interaction.fields.getTextInputValue("replurl");
- const subdomain = interaction.fields.getTextInputValue("subdomain");
-
- const embeds = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.reply({ embeds: [embeds] });
- await fork(interaction.user.id, interaction, subdomain);
-
- const githubUser = await User.findOne({ userid: interaction.user.id });
- const token = githubUser.gittoken;
- const username = githubUser.githubid;
- const email = githubUser.email;
- const id = interaction.user.id;
- const octokit = new Octokit({ auth: token });
-
- content = `{
- "owner": {
- "username": "${username}",
- "email": "${email}",
- "note": "This record was created by is-a.dev Discord bot via discord id: ${id}"
- },
-
- "record": {
- "CNAME": "${replurl}"
-
- }
-}
-`;
- // add a 3 second delay to allow the fork to complete
- await new Promise((r) => setTimeout(r, 3000));
-
- const ifexistsurl = `https://raw.githubusercontent.com/${username}/register/main/domains/${subdomain}.json`;
- const ifexists = await fetch(ifexistsurl);
-
- if (ifexists.status === 200) {
- const ErrorEmbed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .setURL(ifexistsurl)
- .setDescription(`This domain already exists!`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setColor("#FF0000")
- .setFooter({
- text: "is-a.dev",
- iconURL:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [ErrorEmbed] });
- return;
- } else {
- const record = Buffer.from(content).toString("base64");
-
- const commit = await octokit.repos.createOrUpdateFileContents({
- owner: username,
- repo: "register",
- path: `domains/${subdomain.toLowerCase()}.json`,
- message: `feat(domain): ${subdomain}.is-a.dev`,
- content: record,
- committer: {
- name: username,
- email: email,
- },
- author: {
- name: username,
- email: email,
- },
- });
-
- if (process.env.DEBUG) {
- console.log(commit);
- }
-
- const embed = new EmbedBuilder()
- .setTitle(`Registering ${subdomain}.is-a.dev`)
- .addFields(
- { name: "Forked", value: "โ
", inline: true },
- { name: "Commited", value: "โ
", inline: true },
- { name: "PR Opened", value: "โ", inline: true },
- )
- .setDescription(
- `Your domain has been generated! Please wait for a staff member to review your PR.`,
- )
- .setColor("#00b0f4")
- .setFooter({
- text: "is-a.dev",
- icon_url:
- "https://raw.githubusercontent.com/is-a-dev/register/main/media/logo.png",
- });
-
- await interaction.editReply({ embeds: [embed] });
- let extra = {
- label: "Info",
- url: `https://register-bot.is-a.dev/guides/replit?repl=${replurl}`,
- };
-
- await OpenPR(interaction.user.id, subdomain, interaction, extra);
- }
-}
-
-exports.ReplitGen = ReplitGen;
diff --git a/OLD/templates/replit/modal.js b/OLD/templates/replit/modal.js
deleted file mode 100644
index 4d22bec..0000000
--- a/OLD/templates/replit/modal.js
+++ /dev/null
@@ -1,40 +0,0 @@
-const {
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
-} = require("discord.js");
-
-async function Replit(interaction) {
- const modal = new ModalBuilder()
- .setCustomId("Replit")
- .setTitle("Replit with is-a.dev subdomain [CNAME]");
-
- // Add components to modal
- const subdomain = new TextInputBuilder()
- .setCustomId("subdomain")
- .setLabel("What subdomain do you want?")
- .setPlaceholder("subdomain")
- .setMinLength(3)
- .setMaxLength(20)
- .setRequired(true)
- .setStyle(TextInputStyle.Short);
-
- // Create the text input components
- const replurl = new TextInputBuilder()
- .setCustomId("replurl")
- // The label is the prompt the user sees for this input
- .setLabel("What's the address to point the subdomain to?")
- // Short means only a single line of text
- .setStyle(TextInputStyle.Short);
-
- const firstActionRow = new ActionRowBuilder().addComponents(replurl);
- const secondActionRow = new ActionRowBuilder().addComponents(subdomain);
-
- modal.addComponents(firstActionRow, secondActionRow);
-
- // Show the modal to the user
- await interaction.showModal(modal);
-}
-
-exports.Replit = Replit;
diff --git a/OLD/testweb.js b/OLD/testweb.js
deleted file mode 100644
index b29cd2f..0000000
--- a/OLD/testweb.js
+++ /dev/null
@@ -1,2 +0,0 @@
-const keepAlive = require("./components/webserver.js");
-keepAlive();
diff --git a/OLD/views/email-forwarder.ejs b/OLD/views/email-forwarder.ejs
deleted file mode 100644
index a25c136..0000000
--- a/OLD/views/email-forwarder.ejs
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
- Email Forwarding | is-a.dev Discord Bot
-
-
-
-
-
-
-
-
-
-
- Email Forwarding
- <%= subdomain %>.is-a.dev forwards to: <%= email %>
-
-
- - *@<%= subdomain %>.is-a.dev โก๏ธ <%= email %>
-
-
-
-
-
-
diff --git a/OLD/views/logged-in.ejs b/OLD/views/logged-in.ejs
deleted file mode 100644
index 45fcd06..0000000
--- a/OLD/views/logged-in.ejs
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
- Logged In | is-a.dev Discord Bot
-
-
-
-
-
-
-
-
-
-
-
- Logged in as: <%= username %>
-
-
-
-
-
diff --git a/OLD/views/replit.ejs b/OLD/views/replit.ejs
deleted file mode 100644
index 0844daf..0000000
--- a/OLD/views/replit.ejs
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
- Replit | is-a.dev Discord Bot
-
-
-
-
-
-
-
-
-
-
- Email Forwarding
- <%= subdomain %>.is-a.dev has a CNAME record pointing to: <%= replurl %>
-
-
- - *@<%= subdomain %>.is-a.dev โก๏ธ <%= replurl %> [CNAME]
-
-
-
-
-
-
diff --git a/commands/sendemail.js b/commands/sendemail.js
deleted file mode 100644
index a857218..0000000
--- a/commands/sendemail.js
+++ /dev/null
@@ -1,59 +0,0 @@
-const {
- SlashCommandBuilder,
- ActionRowBuilder,
- ModalBuilder,
- TextInputBuilder,
- TextInputStyle,
-
-} = require("discord.js");
-const staff = require("../models/staff");
-const Loading = require("../components/loading");
-
-module.exports = {
- data: new SlashCommandBuilder()
- .setName("send-email")
- .setDescription("Maintainers send emails!"),
- async execute(interaction) {
- if (!(await staff.findOne({ _id: interaction.user.id }))) {
- const embed = new EmbedBuilder()
- .setDescription("Only staff can use this command!")
- .setColor("#0096ff");
- return await interaction.editReply({ embeds: [embed], ephemeral: true });
- }
- const modal = new ModalBuilder()
- .setCustomId("sendemail")
- .setTitle("Send Email");
-
- // Create the text input components
- const email = new TextInputBuilder()
- .setCustomId("email")
- // The label is the prompt the user sees for this input
- .setLabel("To email?")
- // Short means only a single line of text
- .setStyle(TextInputStyle.Short);
-
- const subject = new TextInputBuilder()
- .setCustomId("subject")
- .setLabel("What is the email subject?")
- // Paragraph means multiple lines of text.
- .setStyle(TextInputStyle.Short);
-
- const message = new TextInputBuilder()
- .setCustomId("message")
- .setLabel("What's the message?")
- // Paragraph means multiple lines of text.
- .setStyle(TextInputStyle.Paragraph);
-
- // An action row only holds one text input,
- // so you need one action row per text input.
- const firstActionRow = new ActionRowBuilder().addComponents(email);
- const secondActionRow = new ActionRowBuilder().addComponents(subject);
- const thirdActionRow = new ActionRowBuilder().addComponents(message);
-
- // Add inputs to the modal
- modal.addComponents(firstActionRow, secondActionRow, thirdActionRow);
-
- // Show the modal to the user
- await interaction.showModal(modal);
- },
-};
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index 9af6e5e..0000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-services:
- is-a-dev:
- container_name: is-a-dev-bot
- deploy:
- replicas: 1
- restart_policy:
- condition: on-failure
- environment:
- DISCORD_TOKEN: "2"
- DISCORD_CLIENT_ID: "1"
- DISCORD_GUILD_ID: "3"
- MONGO_DB: "4"
- GITHUB_ID: "5"
- GITHUB_SECRET: "6"
- webhook: "7"
- SERVER_URL: "8"
- image: ghcr.io/andrewstech/is-a-dev-discord:main
- labels:
- generated: by 8gwifi.org
-version: "3"
-
-networks:
- default:
- external: true
- name: scoobydoo
diff --git a/events/modal.js b/events/modal.js
index 93d2b6e..92304e4 100644
--- a/events/modal.js
+++ b/events/modal.js
@@ -1,6 +1,5 @@
const RegisterDomain = require('./modals/RegisterDomain');
const Confirm = require('./modals/Confirm');
-const SendEmail = require('./modals/SendMail');
module.exports = async function (interaction) {
if (interaction.customId === "regiserDomain") {
await RegisterDomain(interaction);
@@ -8,7 +7,4 @@ module.exports = async function (interaction) {
if (interaction.customId.startsWith("Content-")) {
await Confirm(interaction);
}
- if (interaction.customId === "sendemail") {
- await SendEmail(interaction);
- }
}
diff --git a/events/modals/SendMail.js b/events/modals/SendMail.js
deleted file mode 100644
index a6b401a..0000000
--- a/events/modals/SendMail.js
+++ /dev/null
@@ -1,45 +0,0 @@
-const Loading = require('../../components/loading');
-const sgMail = require('@sendgrid/mail');
-sgMail.setApiKey(process.env.SENDGRID_API_KEY);
-const { EmbedBuilder, ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
-module.exports = async function (interaction) {
- await Loading(interaction, true);
- const to = interaction.fields.getTextInputValue("email");
- const subject = interaction.fields.getTextInputValue("subject");
- const message = interaction.fields.getTextInputValue("message");
- const post = {
- "598245488977903688": "andrew@maintainers.is-a.dev",
- "853158265466257448": "william@maintainers.is-a.dev",
- "757296951925538856": "dibster@maintainers.is-a.dev",
- "914452175839723550": "vaibhav@maintainers.is-a.dev",
- "716134528409665586": "maskduck@maintainers.is-a.dev",
- "763767239018938368": "mahir@maintainers.is-a.dev"
- };
-
- let from = post[interaction.user.id] || "hello@maintainers.is-a.dev";
-
- const msg = {
- to, // Change to your recipient
- from, // Change to your verified sender
- subject: subject,
- templateId: 'd-d69e1a5daf3f4fb9a3028dd65957de18',
- dynamic_template_data: {
- message: message
- },
- headers: {
- "List-Unsubscribe": ``
- }
- };
- sgMail.send(msg)
- .then(async (response) => {
- console.log(response[0].statusCode);
- console.log(response[0].headers);
- await interaction.editReply({ content: `The following has been sent\n\n${message}`, ephemeral: false });
- })
- .catch(async (error) => {
- console.error(error);
- await interaction.editReply({ content: "Email failed to send!", ephemeral: false });
- });
- return;
-}
-