diff --git a/commands/leaderboard.js b/commands/leaderboard.js new file mode 100644 index 0000000..9594871 --- /dev/null +++ b/commands/leaderboard.js @@ -0,0 +1,41 @@ + // Welcome in AVB (Avada Vouch Bot) \\ + // Here its the third command file \\ +// Made with <3 by Avada \\ + +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); +const { readData } = require('../memory/data.js'); + +module.exports = { + data: new SlashCommandBuilder() + .setName('leaderboard') + .setDescription('Display the member with the most vouches'), + + async execute(interaction) { + const data = readData(); + const leaderboard = data.leaderboard; + + if (Object.keys(leaderboard).length === 0) { + return interaction.reply({ content: 'No vouches found yet.', ephemeral: true }); + } + + const sortedLeaderboard = Object.entries(leaderboard) + .sort((a, b) => b[1] - a[1]) + .slice(0, 10); // Top 10 members + + const leaderboardEmbed = new EmbedBuilder() + .setColor(0x9B00FF) + .setTitle('Vouch Leaderboard') + .setDescription('Top 10 members with the most vouches !'); + + sortedLeaderboard.forEach(([userId, points], index) => { + const user = interaction.guild.members.cache.get(userId); + leaderboardEmbed.addFields( + { name: `${index + 1}. ${user ? user.user.username : 'Unknown'}`, value: `Vouches : ${points}`, inline: false } + ); + }); + + await interaction.reply({ + embeds: [leaderboardEmbed] + }); + }, +}; \ No newline at end of file diff --git a/commands/reputation.js b/commands/reputation.js new file mode 100644 index 0000000..0546e04 --- /dev/null +++ b/commands/reputation.js @@ -0,0 +1,41 @@ + // Welcome in AVB (Avada Vouch Bot) \\ + // Here its the second command file \\ +// Made with <3 by Avada \\ + +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); +const { readData } = require('../memory/data.js'); +const vouches = new Map(Object.entries(readData())); + +module.exports = { + data: new SlashCommandBuilder() + .setName('reputation') + .setDescription('Check the reputation of a member') + .addUserOption(option => option.setName('user').setDescription('Choose the member').setRequired(true)), + + async execute(interaction) { + const user = interaction.options.getUser('user'); + const data = readData(); + const vouches = data.vouches || {}; + + const userVouches = vouches[user.id] || []; + + if (userVouches.length === 0) { + return interaction.reply({ content: 'No vouches found for this member.', ephemeral: true }); + } + + const reputationEmbed = new EmbedBuilder() + .setColor(0xF7FF00) + .setTitle(`${user.username}'s Reputation`) + + userVouches.forEach((vouch, index) => { + const starEmoji = '⭐'.repeat(vouch.stars); + reputationEmbed.addFields( + { name: `Vouch #${index + 1}`, value: `${starEmoji}\n**Comment :** ${vouch.comment}\n**Given by :** ${vouch.by}`, inline: false } + ); + }); + + await interaction.reply({ + embeds: [reputationEmbed] + }); + }, +}; \ No newline at end of file diff --git a/commands/vouch.js b/commands/vouch.js new file mode 100644 index 0000000..da976cc --- /dev/null +++ b/commands/vouch.js @@ -0,0 +1,74 @@ + // Welcome in AVB (Avada Vouch Bot) \\ + // Here its the first command file \\ +// Made with <3 by Avada \\ + +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); +const { readData, writeData } = require('../memory/data.js'); +const data = readData(); +const vouches = new Map(Object.entries(data.vouches || {})); +const leaderboard = data.leaderboard || {}; + +module.exports = { + data: new SlashCommandBuilder() + .setName('vouch') + .setDescription('Let a vouch on a member :)') + .addUserOption(option => option.setName('user').setDescription('Choose the member').setRequired(true)) + .addIntegerOption(option => option.setName('stars').setDescription('Number of stars (Max 5)').setRequired(true).setMinValue(1).setMaxValue(5)) + .addStringOption(option => option.setName('comment').setDescription('Write the comment (not required)').setRequired(false)), + + async execute(interaction) { + const user = interaction.options.getUser('user'); + const stars = interaction.options.getInteger('stars'); + const comment = interaction.options.getString('comment'); + const starEmoji = '⭐'.repeat(stars); + + // Dont give vouch to urself >:( + if (user.id === interaction.user.id) { + return interaction.reply({ content: 'You cant make tht :face_with_symbols_over_mouth:', ephemeral: true }); + } + + const vouchEmbed = new EmbedBuilder() + .setColor(0x57F287) + .setTitle(`New vouch for ${user.username}`) + .addFields({ + name: 'Stars :', + value: starEmoji, + inline: false + }) + .addFields({ + name: 'Comment :', + value: comment, + inline: false + }) + .setFooter({ + text: `Vouch gived by ${interaction.user.username}` + }); + + await interaction.reply({ + embeds: [vouchEmbed] + }); + + // Stock vouch in the map + if (!vouches.has(user.id)) { + vouches.set(user.id, []); + } + + vouches.get(user.id).push({ + stars, + comment, + by: interaction.user.username + }); + + // Update Leaderboard + if (!leaderboard[user.id]) { + leaderboard[user.id] = 0; + } + leaderboard[user.id] += stars; + + // Save data + writeData({ + vouches: Object.fromEntries(vouches), + leaderboard + }); + }, +}; \ No newline at end of file diff --git a/deploy-commands.js b/deploy-commands.js new file mode 100644 index 0000000..c8c4e73 --- /dev/null +++ b/deploy-commands.js @@ -0,0 +1,32 @@ +// Thx discord.js for this template :) + +const { REST, Routes } = require('discord.js'); +const fs = require('fs'); +const path = require('path'); +require('dotenv').config(); + +const commands = []; +const commandsPath = path.join(__dirname, 'commands'); +const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); + +for (const file of commandFiles) { + const command = require(path.join(commandsPath, file)); + commands.push(command.data.toJSON()); +} + +const rest = new REST({ version: '10' }).setToken(process.env.BOT_TOKEN); + +(async () => { + try { + console.log('Started refreshing application (/) commands.'); + + await rest.put( + Routes.applicationGuildCommands(process.env.CLIENT_ID , process.env.GUILD_ID ), + { body: commands }, + ); + + console.log('Successfully reloaded application (/) commands.'); + } catch (error) { + console.error(error); + } +})(); \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..768c640 --- /dev/null +++ b/index.js @@ -0,0 +1,44 @@ + // Welcome in AVB (Avada Vouch Bot) \\ + // Here its the main file \\ +// Made with <3 by Avada \\ + +const { Client, GatewayIntentBits, Collection } = require('discord.js'); +const fs = require('fs'); +const path = require('path'); +require('dotenv').config(); + +const client = new Client({ intents: [GatewayIntentBits.Guilds] }); +client.commands = new Collection(); + +// Loading Commands files +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); + client.commands.set(command.data.name, command); +} + +// Event fired when the bot start +client.once('ready', () => { + console.log(`[AVB] Ready !`); +}); + +// Manage Slash Commands +client.on('interactionCreate', async interaction => { + if (!interaction.isCommand()) return; + + const command = client.commands.get(interaction.commandName); + + if (!command) return; + + try { + await command.execute(interaction); + } catch (error) { + console.error(error); + await interaction.reply({ content: 'There was an error executing this command !', ephemeral: true }); + } +}); + +client.login(process.env.BOT_TOKEN); \ No newline at end of file diff --git a/memory/data.js b/memory/data.js new file mode 100644 index 0000000..0a92fcb --- /dev/null +++ b/memory/data.js @@ -0,0 +1,30 @@ + // Welcome in AVB (Avada Vouch Bot) \\ + // Here its the data file \\ +// Made with <3 by Avada \\ + +const fs = require('fs'); +const path = require('path'); + +const dataPath = path.join(__dirname, 'data.json'); + +function readData() { + if (fs.existsSync(dataPath)) { + const rawData = fs.readFileSync(dataPath); + try { + return JSON.parse(rawData); + } catch (error) { + console.error('Error parsing JSON:', error); + return { vouches: {}, leaderboard: {} }; + } + } + return { vouches: {}, leaderboard: {} }; +} + +function writeData(data) { + fs.writeFileSync(dataPath, JSON.stringify(data, null, 2)); +} + +module.exports = { + readData, + writeData +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..102d577 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,322 @@ +{ + "name": "avb", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "avb", + "version": "0.1.0", + "license": "ISC", + "dependencies": { + "@discordjs/rest": "^2.4.0", + "discord-api-types": "^0.37.100", + "discord.js": "^14.16.1", + "dotenv": "^16.4.5" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.9.0.tgz", + "integrity": "sha512-0zx8DePNVvQibh5ly5kCEei5wtPBIUbSoE9n+91Rlladz4tgtFbJ36PZMxxZrTEOQ7AHMZ/b0crT/0fCy6FTKg==", + "dependencies": { + "@discordjs/formatters": "^0.5.0", + "@discordjs/util": "^1.1.1", + "@sapphire/shapeshift": "^4.0.0", + "discord-api-types": "0.37.97", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.4", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/builders/node_modules/discord-api-types": { + "version": "0.37.97", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.97.tgz", + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.5.0.tgz", + "integrity": "sha512-98b3i+Y19RFq1Xke4NkVY46x8KjJQjldHUuEbCqMvp1F5Iq9HgnGpu91jOi/Ufazhty32eRsKnnzS8n4c+L93g==", + "dependencies": { + "discord-api-types": "0.37.97" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/formatters/node_modules/discord-api-types": { + "version": "0.37.97", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.97.tgz", + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + }, + "node_modules/@discordjs/rest": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.4.0.tgz", + "integrity": "sha512-Xb2irDqNcq+O8F0/k/NaDp7+t091p+acb51iA4bCKfIn+WFWd6HrNvcsSbMMxIR9NjcMZS6NReTKygqiQN+ntw==", + "dependencies": { + "@discordjs/collection": "^2.1.1", + "@discordjs/util": "^1.1.1", + "@sapphire/async-queue": "^1.5.3", + "@sapphire/snowflake": "^3.5.3", + "@vladfrangu/async_event_emitter": "^2.4.6", + "discord-api-types": "0.37.97", + "magic-bytes.js": "^1.10.0", + "tslib": "^2.6.3", + "undici": "6.19.8" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest/node_modules/discord-api-types": { + "version": "0.37.97", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.97.tgz", + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + }, + "node_modules/@discordjs/util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", + "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.1.1.tgz", + "integrity": "sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==", + "dependencies": { + "@discordjs/collection": "^2.1.0", + "@discordjs/rest": "^2.3.0", + "@discordjs/util": "^1.1.0", + "@sapphire/async-queue": "^1.5.2", + "@types/ws": "^8.5.10", + "@vladfrangu/async_event_emitter": "^2.2.4", + "discord-api-types": "0.37.83", + "tslib": "^2.6.2", + "ws": "^8.16.0" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws/node_modules/discord-api-types": { + "version": "0.37.83", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", + "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.3.tgz", + "integrity": "sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v16" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.6.tgz", + "integrity": "sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.100", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.100.tgz", + "integrity": "sha512-a8zvUI0GYYwDtScfRd/TtaNBDTXwP5DiDVX7K5OmE+DRT57gBqKnwtOC5Ol8z0mRW8KQfETIgiB8U0YZ9NXiCA==" + }, + "node_modules/discord.js": { + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.16.1.tgz", + "integrity": "sha512-/diX4shp3q1F3EySGQbQl10el+KIpffLSOJdtM35gGV7zw2ED7rKbASKJT7UIR9L/lTd0KtNenZ/h739TN7diA==", + "dependencies": { + "@discordjs/builders": "^1.9.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.5.0", + "@discordjs/rest": "^2.4.0", + "@discordjs/util": "^1.1.1", + "@discordjs/ws": "1.1.1", + "@sapphire/snowflake": "3.5.3", + "discord-api-types": "0.37.97", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "tslib": "^2.6.3", + "undici": "6.19.8" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/discord.js/node_modules/discord-api-types": { + "version": "0.37.97", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.97.tgz", + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "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/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/magic-bytes.js": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", + "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" + }, + "node_modules/ts-mixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, + "node_modules/undici": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", + "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "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 + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..aed8835 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "avb", + "version": "0.1.0", + "description": "A system for vouch ur members !", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "vouch", + "discord", + "bot" + ], + "author": "Avada Kedavra", + "license": "ISC", + "dependencies": { + "@discordjs/rest": "^2.4.0", + "discord-api-types": "^0.37.100", + "discord.js": "^14.16.1", + "dotenv": "^16.4.5" + } +}