Add button to create extensions!

This commit is contained in:
Christopher Cookman 2023-04-26 12:55:38 -06:00
parent 14213bff37
commit b2291086b0
Signed by: ChrisChrome
GPG key ID: A023A26E42C33A42
3 changed files with 500 additions and 311 deletions

View file

@ -32,5 +32,11 @@
"name": "list", "name": "list",
"description": "List all extensions on the LiteNet Phone System", "description": "List all extensions on the LiteNet Phone System",
"type": 1 "type": 1
},
{
"name": "button",
"description": "Send the get an extension button!",
"type": 1,
"default_member_permissions": 0
} }
] ]

446
index.js
View file

@ -206,7 +206,7 @@ const {
Routes Routes
} = require('discord.js'); } = require('discord.js');
const dcClient = new Discord.Client({ const dcClient = new Discord.Client({
intents: ["Guilds"] intents: ["Guilds", "GuildMembers"]
}); });
const rest = new REST({ const rest = new REST({
version: '10' version: '10'
@ -217,7 +217,7 @@ var sendLog;
dcClient.on('ready', async () => { dcClient.on('ready', async () => {
await dcClient.channels.fetch(config.discord.logId).then((channel) => { await dcClient.channels.fetch(config.discord.logId).then((channel) => {
sendLog = (message) => { sendLog = (message) => {
channel.send(`\`\`\`ansi\n${message}\`\`\``); //channel.send(`\`\`\`ansi\n${message}\`\`\``);
console.log(message); console.log(message);
}; };
@ -398,8 +398,78 @@ dcClient.on('ready', async () => {
}) })
} }
}) })
}); });
// Automatically create extensions for all existing members that don't have one
// Temporarily disabled, until I can fix it.
// dcClient.guilds.fetch(config.discord.guildId).then((guild) => {
// console.log(guild.name)
// let waitR = 0;
// let waitW = 0;
// y = guild.members.fetch().then((members) => {
// clearInterval(x)
// console.log(members.size)
// members.forEach((member) => {
// if (member.user.bot) return;
// setTimeout(() => {
// console.log(`Checking ${member.user.tag}`)
// timeoutA = setTimeout(() => {
// findNextExtension().then((result) => {
// let uid = member.user.id;
// let ext = result.result;
// let name = member.user.tag;
// createExtension(ext, name, uid).then((result) => {
// sendLog(`${colors.cyan("[INFO]")} Created extension ${result.result.createExtension.extension} for ${member.user.tag}`);
// }).catch((error) => {
// sendLog(`${colors.red("[ERROR]")} ${member.user.tag} ${error}`);
// });
// })
// }, 10000) // 10 second timeout, assume no extension exists
// lookupExtension(member.id, "uid").then((result) => {
// clearTimeout(timeoutA);
// if (result.status == "exists") {
// // Extension already exists, do nothing
// } else {
// console.log()
// findNextExtension().then((result) => {
// let uid = member.user.id;
// let ext = result.result;
// let name = member.user.tag;
// createExtension(ext, name, uid).then((result) => {
// sendLog(`${colors.cyan("[INFO]")} Created extension ${result.result.createExtension.extension} for ${member.user.tag}`);
// }).catch((error) => {
// sendLog(`${colors.red("[ERROR]")} ${member.user.tag} ${error}`);
// });
// })
// }
// }).catch((error) => {
// clearTimeout(timeoutA);
// console.log(error)
// findNextExtension().then((result) => {
// let uid = member.user.id;
// let ext = result.result;
// let name = member.user.tag;
// createExtension(ext, name, uid).then((result) => {
// sendLog(`${colors.cyan("[INFO]")} Created extension ${result.result.createExtension.extension} for ${member.user.tag}`);
// }).catch((error) => {
// sendLog(`${colors.red("[ERROR]")} ${member.user.tag} ${error}`);
// });
// })
// console.log(`Creating extension for ${member.user.tag} in ${waitW} seconds`)
// });
// }, waitR * 1000)
// console.log(`Waiting ${waitR} seconds to check ${member.user.tag}`)
// waitR+=2;
// });
// }).catch((error) => {
// sendLog(`${colors.red("[ERROR]")} ${error}`);
// });
// x = setInterval(() => {
// console.log(y)
// }, 1000)
// });
}); });
dcClient.on("guildMemberRemove", (member) => { dcClient.on("guildMemberRemove", (member) => {
@ -420,167 +490,257 @@ dcClient.on("guildMemberRemove", (member) => {
}); });
dcClient.on('interactionCreate', async interaction => { dcClient.on('interactionCreate', async interaction => {
if (!interaction.isCommand()) return; if (interaction.isCommand()) {
const { const {
commandName commandName
} = interaction; } = interaction;
switch (commandName) { switch (commandName) {
case "new": case "new":
await interaction.deferReply({ await interaction.deferReply({
ephemeral: true ephemeral: true
}); });
lookupExtension(interaction.user.id, "uid").then((result) => { lookupExtension(interaction.user.id, "uid").then((result) => {
if (result.status == "exists") { if (result.status == "exists") {
// The user already has an extension, return an ephemeral message saying so // The user already has an extension, return an ephemeral message saying so
interaction.editReply({ interaction.editReply({
content: "You already have an extension!", content: "You already have an extension!",
ephemeral: true ephemeral: true
});
}
}).catch((error) => {
// The user doesn't have an extension, create one
findNextExtension().then((result) => {
if (result.status == "success") {
let uid = interaction.user.id;
let ext = result.result;
let name = interaction.user.tag;
interaction.editReply(`Creating extension ${ext}...`)
// Create the extension
createExtension(ext, name, uid).then((result) => {
if (result.status == "created") {
interaction.editReply({
content: "",
embeds: [{
"title": "Extension Created!",
"color": 0x00ff00,
"description": `The SIP server is \`${config.freepbx.server}\``,
"fields": [{
"name": "Extension/Username",
"value": ext
},
{
"name": "Password",
"value": `||${result.result.fetchExtension.user.extPassword}||`
}
]
}]
})
sendLog(`${colors.cyan("[INFO]")} Created extension ${ext} for user ${uid}`);
// Add the role to the user on Discord based on the ID in the config file
let role = interaction.guild.roles.cache.find(role => role.id === config.discord.roleId);
interaction.member.roles.add(role);
}
}).catch((error) => {
interaction.editReply(`Error creating extension: ${error}`);
}); });
} }
}).catch((error) => { }).catch((error) => {
interaction.editReply(`Error finding next available extension: ${error}`); // The user doesn't have an extension, create one
findNextExtension().then((result) => {
if (result.status == "success") {
let uid = interaction.user.id;
let ext = result.result;
let name = interaction.user.tag;
interaction.editReply(`Creating extension ${ext}...`)
// Create the extension
createExtension(ext, name, uid).then((result) => {
if (result.status == "created") {
interaction.editReply({
content: "",
embeds: [{
"title": "Extension Created!",
"color": 0x00ff00,
"description": `The SIP server is \`${config.freepbx.server}\``,
"fields": [{
"name": "Extension/Username",
"value": ext
},
{
"name": "Password",
"value": `||${result.result.fetchExtension.user.extPassword}||`
}
]
}]
})
sendLog(`${colors.cyan("[INFO]")} Created extension ${ext} for user ${uid}`);
// Add the role to the user on Discord based on the ID in the config file
let role = interaction.guild.roles.cache.find(role => role.id === config.discord.roleId);
interaction.member.roles.add(role);
}
}).catch((error) => {
interaction.editReply(`Error creating extension: ${error}`);
});
}
}).catch((error) => {
interaction.editReply(`Error finding next available extension: ${error}`);
});
}); });
}); break;
break; case "whoami":
case "whoami": await interaction.deferReply({
await interaction.deferReply({ ephemeral: true
ephemeral: true });
}); lookupExtension(interaction.user.id, "uid").then((result) => {
lookupExtension(interaction.user.id, "uid").then((result) => { if (result.status == "exists") {
if (result.status == "exists") { // The user already has an extension, return an ephemeral message saying so
// The user already has an extension, return an ephemeral message saying so interaction.editReply({
content: "",
embeds: [{
"title": "Extension Info",
"color": 0x00ff00,
"description": `The SIP server is \`${config.freepbx.server}\``,
"fields": [{
"name": "Extension/Username",
"value": result.result.fetchExtension.user.extension
},
{
"name": "Password",
"value": `||${result.result.fetchExtension.user.extPassword}||`
}
]
}],
ephemeral: true
})
}
}).catch((error) => {
// The user doesn't have an extension, create one
sendLog(`${colors.red("[ERROR]")} ${error}`)
interaction.editReply({
content: "You don't have an extension!",
ephemeral: true
});
});
break;
case "list":
await interaction.deferReply({
ephemeral: false
});
pbxClient.request(funcs.generateQuery("list", {})).then((result) => {
let extensions = result.fetchAllExtensions.extension;
// key:value pairs of extension:username
let extensionList = {};
extensions.forEach((extension) => {
extensionList[extension.user.extension] = extension.user.name;
});
extensionList1 = "";
for (let key in extensionList) {
extensionList1 += `${key}: ${extensionList[key]}\n`;
}
interaction.editReply({ interaction.editReply({
content: "", content: "",
embeds: [{ embeds: [{
"title": "Extension Info", "title": "Extension List",
"color": 0x00ff00, "color": 0x00ff00,
"description": `The SIP server is \`${config.freepbx.server}\``, "description": `${extensionList1}`
"fields": [{ }]
"name": "Extension/Username", });
"value": result.result.fetchExtension.user.extension }).catch((error) => {
}, interaction.editReply(`Error listing extensions: ${error}`);
{ });
"name": "Password", break;
"value": `||${result.result.fetchExtension.user.extPassword}||` case "delete":
} if (interaction.options.get("confirm").value == false) {
] interaction.reply({
}], content: "Please confirm you want to delete your extension by running `/delete confirm:true`",
ephemeral: true ephemeral: true
}) })
break;
} }
}).catch((error) => { await interaction.deferReply({
// The user doesn't have an extension, create one
sendLog(`${colors.red("[ERROR]")} ${error}`)
interaction.editReply({
content: "You don't have an extension!",
ephemeral: true ephemeral: true
}); });
}); lookupExtension(interaction.user.id, "uid").then((result) => {
break; if (result.status == "exists") {
// The user has an extension, delete it
case "list": deleteExtension(result.result.fetchExtension.user.extension).then((result) => {
await interaction.deferReply({ if (result.status == "deleted") {
ephemeral: false interaction.editReply({
}); content: "Extension Deleted!",
pbxClient.request(funcs.generateQuery("list", {})).then((result) => { ephemeral: true
let extensions = result.fetchAllExtensions.extension; });
// key:value pairs of extension:username sendLog(`${colors.green("[INFO]")} ${interaction.user.tag} (${interaction.user.id}) deleted extension ${result.result.fetchExtension.user.extension}`)
let extensionList = {}; // Remove the role from the user on Discord based on the ID in the config file
extensions.forEach((extension) => { let role = interaction.guild.roles.cache.find(role => role.id === config.discord.roleId);
extensionList[extension.user.extension] = extension.user.name; interaction.member.roles.remove(role);
}
}).catch((error) => {
interaction.reply(`Error deleting extension: ${error}`);
});
}
}).catch((error) => {
// The user doesn't have an extension, return an ephemeral message saying so
interaction.editReply({
content: "You don't have an extension!",
ephemeral: true
});
}); });
extensionList1 = "";
for (let key in extensionList) {
extensionList1 += `${key}: ${extensionList[key]}\n`;
}
interaction.editReply({
content: "",
embeds: [{
"title": "Extension List",
"color": 0x00ff00,
"description": `${extensionList1}`
}]
});
}).catch((error) => {
interaction.editReply(`Error listing extensions: ${error}`);
});
break;
case "delete":
if (interaction.options.get("confirm").value == false) {
interaction.reply({
content: "Please confirm you want to delete your extension by running `/delete confirm:true`",
ephemeral: true
})
break; break;
} case "button":
await interaction.deferReply({ interaction.channel.send({
ephemeral: true embeds: [
}); {
lookupExtension(interaction.user.id, "uid").then((result) => { "title": "Community Phone System",
if (result.status == "exists") { "description": "Click the button below to get your extension!",
// The user has an extension, delete it "color": null
deleteExtension(result.result.fetchExtension.user.extension).then((result) => { }
if (result.status == "deleted") { ],
interaction.editReply({ components: [
content: "Extension Deleted!", {
ephemeral: true type: 1,
components: [
{
type: 2,
label: "Get an Extension",
emoji: {
name: "✅"
},
style: 3,
custom_id: "new"
}
]
}
]
}).then(() => {
interaction.reply({
content: "Button sent!",
ephemeral: true
})
});
default:
break;
}
}
if (interaction.isButton()) {
switch (interaction.customId) {
case "new":
await interaction.deferReply({
ephemeral: true
});
lookupExtension(interaction.user.id, "uid").then((result) => {
if (result.status == "exists") {
// The user already has an extension, return an ephemeral message saying so
interaction.editReply({
content: "You already have an extension!",
ephemeral: true
});
}
}).catch((error) => {
// The user doesn't have an extension, create one
findNextExtension().then((result) => {
if (result.status == "success") {
let uid = interaction.user.id;
let ext = result.result;
let name = interaction.user.tag;
interaction.editReply(`Creating extension ${ext}...`)
// Create the extension
createExtension(ext, name, uid).then((result) => {
if (result.status == "created") {
interaction.editReply({
content: "",
embeds: [{
"title": "Extension Created!",
"color": 0x00ff00,
"description": `The SIP server is \`${config.freepbx.server}\``,
"fields": [{
"name": "Extension/Username",
"value": ext
},
{
"name": "Password",
"value": `||${result.result.fetchExtension.user.extPassword}||`
}
]
}]
})
sendLog(`${colors.cyan("[INFO]")} Created extension ${ext} for user ${uid}`);
// Add the role to the user on Discord based on the ID in the config file
let role = interaction.guild.roles.cache.find(role => role.id === config.discord.roleId);
interaction.member.roles.add(role);
}
}).catch((error) => {
interaction.editReply(`Error creating extension: ${error}`);
}); });
sendLog(`${colors.green("[INFO]")} ${interaction.user.tag} (${interaction.user.id}) deleted extension ${result.result.fetchExtension.user.extension}`)
// Remove the role from the user on Discord based on the ID in the config file
let role = interaction.guild.roles.cache.find(role => role.id === config.discord.roleId);
interaction.member.roles.remove(role);
} }
}).catch((error) => { }).catch((error) => {
interaction.reply(`Error deleting extension: ${error}`); interaction.editReply(`Error finding next available extension: ${error}`);
}); });
}
}).catch((error) => {
// The user doesn't have an extension, return an ephemeral message saying so
interaction.editReply({
content: "You don't have an extension!",
ephemeral: true
}); });
}); break;
break; }
default:
break;
} }
}); });

359
package-lock.json generated
View file

@ -16,51 +16,63 @@
} }
}, },
"node_modules/@discordjs/builders": { "node_modules/@discordjs/builders": {
"version": "1.4.0", "version": "1.6.1",
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.1.tgz",
"integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", "integrity": "sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw==",
"dependencies": { "dependencies": {
"@discordjs/util": "^0.1.0", "@discordjs/formatters": "^0.3.0",
"@sapphire/shapeshift": "^3.7.1", "@discordjs/util": "^0.2.0",
"discord-api-types": "^0.37.20", "@sapphire/shapeshift": "^3.8.1",
"discord-api-types": "^0.37.37",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"ts-mixer": "^6.0.2", "ts-mixer": "^6.0.3",
"tslib": "^2.4.1" "tslib": "^2.5.0"
}, },
"engines": { "engines": {
"node": ">=16.9.0" "node": ">=16.9.0"
} }
}, },
"node_modules/@discordjs/collection": { "node_modules/@discordjs/collection": {
"version": "1.3.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.0.tgz",
"integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==", "integrity": "sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw==",
"engines": {
"node": ">=16.9.0"
}
},
"node_modules/@discordjs/formatters": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.0.tgz",
"integrity": "sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA==",
"dependencies": {
"discord-api-types": "^0.37.37"
},
"engines": { "engines": {
"node": ">=16.9.0" "node": ">=16.9.0"
} }
}, },
"node_modules/@discordjs/rest": { "node_modules/@discordjs/rest": {
"version": "1.5.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.0.tgz",
"integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", "integrity": "sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ==",
"dependencies": { "dependencies": {
"@discordjs/collection": "^1.3.0", "@discordjs/collection": "^1.5.0",
"@discordjs/util": "^0.1.0", "@discordjs/util": "^0.2.0",
"@sapphire/async-queue": "^1.5.0", "@sapphire/async-queue": "^1.5.0",
"@sapphire/snowflake": "^3.2.2", "@sapphire/snowflake": "^3.4.0",
"discord-api-types": "^0.37.23", "discord-api-types": "^0.37.37",
"file-type": "^18.0.0", "file-type": "^18.2.1",
"tslib": "^2.4.1", "tslib": "^2.5.0",
"undici": "^5.13.0" "undici": "^5.21.0"
}, },
"engines": { "engines": {
"node": ">=16.9.0" "node": ">=16.9.0"
} }
}, },
"node_modules/@discordjs/util": { "node_modules/@discordjs/util": {
"version": "0.1.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.2.0.tgz",
"integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==", "integrity": "sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg==",
"engines": { "engines": {
"node": ">=16.9.0" "node": ">=16.9.0"
} }
@ -124,9 +136,9 @@
} }
}, },
"node_modules/@sapphire/shapeshift": { "node_modules/@sapphire/shapeshift": {
"version": "3.8.1", "version": "3.8.2",
"resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.2.tgz",
"integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", "integrity": "sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA==",
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"lodash": "^4.17.21" "lodash": "^4.17.21"
@ -137,9 +149,9 @@
} }
}, },
"node_modules/@sapphire/snowflake": { "node_modules/@sapphire/snowflake": {
"version": "3.4.0", "version": "3.4.2",
"resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.2.tgz",
"integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==", "integrity": "sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g==",
"engines": { "engines": {
"node": ">=v14.0.0", "node": ">=v14.0.0",
"npm": ">=7.0.0" "npm": ">=7.0.0"
@ -160,9 +172,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.11.19", "version": "18.16.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.19.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz",
"integrity": "sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==" "integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA=="
}, },
"node_modules/@types/ws": { "node_modules/@types/ws": {
"version": "8.5.4", "version": "8.5.4",
@ -189,13 +201,13 @@
} }
}, },
"node_modules/agentkeepalive": { "node_modules/agentkeepalive": {
"version": "4.2.1", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
"integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"debug": "^4.1.0", "debug": "^4.1.0",
"depd": "^1.1.2", "depd": "^2.0.0",
"humanize-ms": "^1.2.1" "humanize-ms": "^1.2.1"
}, },
"engines": { "engines": {
@ -391,12 +403,12 @@
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
}, },
"node_modules/depd": { "node_modules/depd": {
"version": "1.1.2", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"optional": true, "optional": true,
"engines": { "engines": {
"node": ">= 0.6" "node": ">= 0.8"
} }
}, },
"node_modules/detect-libc": { "node_modules/detect-libc": {
@ -408,27 +420,28 @@
} }
}, },
"node_modules/discord-api-types": { "node_modules/discord-api-types": {
"version": "0.37.31", "version": "0.37.40",
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.31.tgz", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.40.tgz",
"integrity": "sha512-k9DQQ7Wv+ehiF7901qk/FnP47k6O2MHm3meQFee4gUzi5dfGAVLf7SfLNtb4w7G2dmukJyWQtVJEDF9oMb9yuQ==" "integrity": "sha512-LMALvtO+p6ERK8rwWoaI490NfIE/egbqjR4/rfLL1z9gQE1gqLiTpIUUDIunfAtKYzeH6ucyXhaXXWpfZh/Q6g=="
}, },
"node_modules/discord.js": { "node_modules/discord.js": {
"version": "14.7.1", "version": "14.9.0",
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.9.0.tgz",
"integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", "integrity": "sha512-ygGms5xP4hG+QrrY9k7d/OYCzMltSMtdl/2Snzq/nLCiZo+Sna91Ulv9l0+B5Jd/Czcq37B7wJAnmja7GOa+bg==",
"dependencies": { "dependencies": {
"@discordjs/builders": "^1.4.0", "@discordjs/builders": "^1.6.0",
"@discordjs/collection": "^1.3.0", "@discordjs/collection": "^1.5.0",
"@discordjs/rest": "^1.4.0", "@discordjs/formatters": "^0.3.0",
"@discordjs/util": "^0.1.0", "@discordjs/rest": "^1.7.0",
"@sapphire/snowflake": "^3.2.2", "@discordjs/util": "^0.2.0",
"@types/ws": "^8.5.3", "@sapphire/snowflake": "^3.4.0",
"discord-api-types": "^0.37.20", "@types/ws": "^8.5.4",
"discord-api-types": "^0.37.37",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"lodash.snakecase": "^4.1.1", "lodash.snakecase": "^4.1.1",
"tslib": "^2.4.1", "tslib": "^2.5.0",
"undici": "^5.13.0", "undici": "^5.21.0",
"ws": "^8.11.0" "ws": "^8.13.0"
}, },
"engines": { "engines": {
"node": ">=16.9.0" "node": ">=16.9.0"
@ -480,9 +493,9 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
}, },
"node_modules/file-type": { "node_modules/file-type": {
"version": "18.2.0", "version": "18.3.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.0.tgz", "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.3.0.tgz",
"integrity": "sha512-M3RQMWY3F2ykyWZ+IHwNCjpnUmukYhtdkGGC1ZVEUb0ve5REGF7NNJ4Q9ehCUabtQKtSVFOMbFTXgJlFb0DQIg==", "integrity": "sha512-pkPZ5OGIq0TYb37b8bHDLNeQSe1H2KlaQ2ySGpJkkr2KZdaWsO4QhPzHA0mQcsUW2cSqJk+4gM/UyLz/UFbXdQ==",
"dependencies": { "dependencies": {
"readable-web-to-node-stream": "^3.0.2", "readable-web-to-node-stream": "^3.0.2",
"strtok3": "^7.0.0", "strtok3": "^7.0.0",
@ -572,9 +585,9 @@
} }
}, },
"node_modules/graceful-fs": { "node_modules/graceful-fs": {
"version": "4.2.10", "version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"optional": true "optional": true
}, },
"node_modules/graphql": { "node_modules/graphql": {
@ -1143,9 +1156,9 @@
} }
}, },
"node_modules/readable-stream": { "node_modules/readable-stream": {
"version": "3.6.0", "version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dependencies": { "dependencies": {
"inherits": "^2.0.3", "inherits": "^2.0.3",
"string_decoder": "^1.1.1", "string_decoder": "^1.1.1",
@ -1219,9 +1232,9 @@
"optional": true "optional": true
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "7.3.8", "version": "7.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==",
"dependencies": { "dependencies": {
"lru-cache": "^6.0.0" "lru-cache": "^6.0.0"
}, },
@ -1281,9 +1294,9 @@
} }
}, },
"node_modules/sqlite3": { "node_modules/sqlite3": {
"version": "5.1.4", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.4.tgz", "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz",
"integrity": "sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==", "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@mapbox/node-pre-gyp": "^1.0.0", "@mapbox/node-pre-gyp": "^1.0.0",
@ -1387,9 +1400,9 @@
} }
}, },
"node_modules/tar/node_modules/minipass": { "node_modules/tar/node_modules/minipass": {
"version": "4.0.2", "version": "4.2.8",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.2.tgz", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
"integrity": "sha512-4Hbzei7ZyBp+1aw0874YWpKOubZd/jc53/XU+gkYry1QV+VvrbO8icLM5CUtm4F0hyXn85DXYKEMIS26gitD3A==", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -1416,9 +1429,9 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
}, },
"node_modules/ts-mixer": { "node_modules/ts-mixer": {
"version": "6.0.2", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz",
"integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ=="
}, },
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.5.0", "version": "2.5.0",
@ -1426,14 +1439,14 @@
"integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
}, },
"node_modules/undici": { "node_modules/undici": {
"version": "5.18.0", "version": "5.22.0",
"resolved": "https://registry.npmjs.org/undici/-/undici-5.18.0.tgz", "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.0.tgz",
"integrity": "sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA==", "integrity": "sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==",
"dependencies": { "dependencies": {
"busboy": "^1.6.0" "busboy": "^1.6.0"
}, },
"engines": { "engines": {
"node": ">=12.18" "node": ">=14.0"
} }
}, },
"node_modules/unique-filename": { "node_modules/unique-filename": {
@ -1502,9 +1515,9 @@
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
}, },
"node_modules/ws": { "node_modules/ws": {
"version": "8.12.0", "version": "8.13.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
"engines": { "engines": {
"node": ">=10.0.0" "node": ">=10.0.0"
}, },
@ -1529,42 +1542,51 @@
}, },
"dependencies": { "dependencies": {
"@discordjs/builders": { "@discordjs/builders": {
"version": "1.4.0", "version": "1.6.1",
"resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.4.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.1.tgz",
"integrity": "sha512-nEeTCheTTDw5kO93faM1j8ZJPonAX86qpq/QVoznnSa8WWcCgJpjlu6GylfINTDW6o7zZY0my2SYdxx2mfNwGA==", "integrity": "sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw==",
"requires": { "requires": {
"@discordjs/util": "^0.1.0", "@discordjs/formatters": "^0.3.0",
"@sapphire/shapeshift": "^3.7.1", "@discordjs/util": "^0.2.0",
"discord-api-types": "^0.37.20", "@sapphire/shapeshift": "^3.8.1",
"discord-api-types": "^0.37.37",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"ts-mixer": "^6.0.2", "ts-mixer": "^6.0.3",
"tslib": "^2.4.1" "tslib": "^2.5.0"
} }
}, },
"@discordjs/collection": { "@discordjs/collection": {
"version": "1.3.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.3.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.0.tgz",
"integrity": "sha512-ylt2NyZ77bJbRij4h9u/wVy7qYw/aDqQLWnadjvDqW/WoWCxrsX6M3CIw9GVP5xcGCDxsrKj5e0r5evuFYwrKg==" "integrity": "sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw=="
},
"@discordjs/formatters": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.0.tgz",
"integrity": "sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA==",
"requires": {
"discord-api-types": "^0.37.37"
}
}, },
"@discordjs/rest": { "@discordjs/rest": {
"version": "1.5.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.5.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.0.tgz",
"integrity": "sha512-lXgNFqHnbmzp5u81W0+frdXN6Etf4EUi8FAPcWpSykKd8hmlWh1xy6BmE0bsJypU1pxohaA8lQCgp70NUI3uzA==", "integrity": "sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ==",
"requires": { "requires": {
"@discordjs/collection": "^1.3.0", "@discordjs/collection": "^1.5.0",
"@discordjs/util": "^0.1.0", "@discordjs/util": "^0.2.0",
"@sapphire/async-queue": "^1.5.0", "@sapphire/async-queue": "^1.5.0",
"@sapphire/snowflake": "^3.2.2", "@sapphire/snowflake": "^3.4.0",
"discord-api-types": "^0.37.23", "discord-api-types": "^0.37.37",
"file-type": "^18.0.0", "file-type": "^18.2.1",
"tslib": "^2.4.1", "tslib": "^2.5.0",
"undici": "^5.13.0" "undici": "^5.21.0"
} }
}, },
"@discordjs/util": { "@discordjs/util": {
"version": "0.1.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.1.0.tgz", "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-0.2.0.tgz",
"integrity": "sha512-e7d+PaTLVQav6rOc2tojh2y6FE8S7REkqLldq1XF4soCx74XB/DIjbVbVLtBemf0nLW77ntz0v+o5DytKwFNLQ==" "integrity": "sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg=="
}, },
"@gar/promisify": { "@gar/promisify": {
"version": "1.1.3", "version": "1.1.3",
@ -1614,18 +1636,18 @@
"integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA=="
}, },
"@sapphire/shapeshift": { "@sapphire/shapeshift": {
"version": "3.8.1", "version": "3.8.2",
"resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz", "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.8.2.tgz",
"integrity": "sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw==", "integrity": "sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA==",
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"lodash": "^4.17.21" "lodash": "^4.17.21"
} }
}, },
"@sapphire/snowflake": { "@sapphire/snowflake": {
"version": "3.4.0", "version": "3.4.2",
"resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.0.tgz", "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.4.2.tgz",
"integrity": "sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw==" "integrity": "sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g=="
}, },
"@tokenizer/token": { "@tokenizer/token": {
"version": "0.3.0", "version": "0.3.0",
@ -1639,9 +1661,9 @@
"optional": true "optional": true
}, },
"@types/node": { "@types/node": {
"version": "18.11.19", "version": "18.16.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.19.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz",
"integrity": "sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==" "integrity": "sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA=="
}, },
"@types/ws": { "@types/ws": {
"version": "8.5.4", "version": "8.5.4",
@ -1665,13 +1687,13 @@
} }
}, },
"agentkeepalive": { "agentkeepalive": {
"version": "4.2.1", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
"integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
"optional": true, "optional": true,
"requires": { "requires": {
"debug": "^4.1.0", "debug": "^4.1.0",
"depd": "^1.1.2", "depd": "^2.0.0",
"humanize-ms": "^1.2.1" "humanize-ms": "^1.2.1"
} }
}, },
@ -1823,9 +1845,9 @@
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
}, },
"depd": { "depd": {
"version": "1.1.2", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"optional": true "optional": true
}, },
"detect-libc": { "detect-libc": {
@ -1834,27 +1856,28 @@
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w=="
}, },
"discord-api-types": { "discord-api-types": {
"version": "0.37.31", "version": "0.37.40",
"resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.31.tgz", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.40.tgz",
"integrity": "sha512-k9DQQ7Wv+ehiF7901qk/FnP47k6O2MHm3meQFee4gUzi5dfGAVLf7SfLNtb4w7G2dmukJyWQtVJEDF9oMb9yuQ==" "integrity": "sha512-LMALvtO+p6ERK8rwWoaI490NfIE/egbqjR4/rfLL1z9gQE1gqLiTpIUUDIunfAtKYzeH6ucyXhaXXWpfZh/Q6g=="
}, },
"discord.js": { "discord.js": {
"version": "14.7.1", "version": "14.9.0",
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.7.1.tgz", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.9.0.tgz",
"integrity": "sha512-1FECvqJJjjeYcjSm0IGMnPxLqja/pmG1B0W2l3lUY2Gi4KXiyTeQmU1IxWcbXHn2k+ytP587mMWqva2IA87EbA==", "integrity": "sha512-ygGms5xP4hG+QrrY9k7d/OYCzMltSMtdl/2Snzq/nLCiZo+Sna91Ulv9l0+B5Jd/Czcq37B7wJAnmja7GOa+bg==",
"requires": { "requires": {
"@discordjs/builders": "^1.4.0", "@discordjs/builders": "^1.6.0",
"@discordjs/collection": "^1.3.0", "@discordjs/collection": "^1.5.0",
"@discordjs/rest": "^1.4.0", "@discordjs/formatters": "^0.3.0",
"@discordjs/util": "^0.1.0", "@discordjs/rest": "^1.7.0",
"@sapphire/snowflake": "^3.2.2", "@discordjs/util": "^0.2.0",
"@types/ws": "^8.5.3", "@sapphire/snowflake": "^3.4.0",
"discord-api-types": "^0.37.20", "@types/ws": "^8.5.4",
"discord-api-types": "^0.37.37",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"lodash.snakecase": "^4.1.1", "lodash.snakecase": "^4.1.1",
"tslib": "^2.4.1", "tslib": "^2.5.0",
"undici": "^5.13.0", "undici": "^5.21.0",
"ws": "^8.11.0" "ws": "^8.13.0"
} }
}, },
"emoji-regex": { "emoji-regex": {
@ -1894,9 +1917,9 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
}, },
"file-type": { "file-type": {
"version": "18.2.0", "version": "18.3.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-18.2.0.tgz", "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.3.0.tgz",
"integrity": "sha512-M3RQMWY3F2ykyWZ+IHwNCjpnUmukYhtdkGGC1ZVEUb0ve5REGF7NNJ4Q9ehCUabtQKtSVFOMbFTXgJlFb0DQIg==", "integrity": "sha512-pkPZ5OGIq0TYb37b8bHDLNeQSe1H2KlaQ2ySGpJkkr2KZdaWsO4QhPzHA0mQcsUW2cSqJk+4gM/UyLz/UFbXdQ==",
"requires": { "requires": {
"readable-web-to-node-stream": "^3.0.2", "readable-web-to-node-stream": "^3.0.2",
"strtok3": "^7.0.0", "strtok3": "^7.0.0",
@ -1965,9 +1988,9 @@
} }
}, },
"graceful-fs": { "graceful-fs": {
"version": "4.2.10", "version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"optional": true "optional": true
}, },
"graphql": { "graphql": {
@ -2392,9 +2415,9 @@
} }
}, },
"readable-stream": { "readable-stream": {
"version": "3.6.0", "version": "3.6.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": { "requires": {
"inherits": "^2.0.3", "inherits": "^2.0.3",
"string_decoder": "^1.1.1", "string_decoder": "^1.1.1",
@ -2435,9 +2458,9 @@
"optional": true "optional": true
}, },
"semver": { "semver": {
"version": "7.3.8", "version": "7.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz",
"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==",
"requires": { "requires": {
"lru-cache": "^6.0.0" "lru-cache": "^6.0.0"
} }
@ -2480,9 +2503,9 @@
} }
}, },
"sqlite3": { "sqlite3": {
"version": "5.1.4", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.4.tgz", "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz",
"integrity": "sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==", "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==",
"requires": { "requires": {
"@mapbox/node-pre-gyp": "^1.0.0", "@mapbox/node-pre-gyp": "^1.0.0",
"node-addon-api": "^4.2.0", "node-addon-api": "^4.2.0",
@ -2553,9 +2576,9 @@
}, },
"dependencies": { "dependencies": {
"minipass": { "minipass": {
"version": "4.0.2", "version": "4.2.8",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.2.tgz", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
"integrity": "sha512-4Hbzei7ZyBp+1aw0874YWpKOubZd/jc53/XU+gkYry1QV+VvrbO8icLM5CUtm4F0hyXn85DXYKEMIS26gitD3A==" "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="
} }
} }
}, },
@ -2574,9 +2597,9 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
}, },
"ts-mixer": { "ts-mixer": {
"version": "6.0.2", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.2.tgz", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz",
"integrity": "sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==" "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ=="
}, },
"tslib": { "tslib": {
"version": "2.5.0", "version": "2.5.0",
@ -2584,9 +2607,9 @@
"integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
}, },
"undici": { "undici": {
"version": "5.18.0", "version": "5.22.0",
"resolved": "https://registry.npmjs.org/undici/-/undici-5.18.0.tgz", "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.0.tgz",
"integrity": "sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA==", "integrity": "sha512-fR9RXCc+6Dxav4P9VV/sp5w3eFiSdOjJYsbtWfd4s5L5C4ogyuVpdKIVHeW0vV1MloM65/f7W45nR9ZxwVdyiA==",
"requires": { "requires": {
"busboy": "^1.6.0" "busboy": "^1.6.0"
} }
@ -2651,9 +2674,9 @@
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
}, },
"ws": { "ws": {
"version": "8.12.0", "version": "8.13.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
"integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
"requires": {} "requires": {}
}, },
"yallist": { "yallist": {