Файловый менеджер - Редактировать - /home/gqdcvggs/go.imators.com/peerkinton-bot.zip
Назад
PK Q7�[�8k events/messageCreate.jsnu �[��� const claudeHandler = require('../handlers/claudeHandler.js'); module.exports = { name: 'messageCreate', async execute(message) { if (message.author.bot) return; const guildConfig = global.guildConfigs.get(message.guild.id); if (!guildConfig) return; if (guildConfig.securityEnabled && guildConfig.secureChannels && guildConfig.secureChannels.includes(message.channel.id)) { const isSpamOrInsult = await claudeHandler.checkMessageSecurity(message.content); if (isSpamOrInsult) { try { await message.delete(); await message.author.send(`⚠️ Ton message a été supprimé du serveur **${message.guild.name}** car il a été détecté comme spam ou contenu inapproprié.`); } catch (error) { console.log('Impossible de supprimer le message ou d\'envoyer le MP'); } return; } } if (guildConfig.conversationAnalysis && guildConfig.analysisChannels && guildConfig.analysisChannels.includes(message.channel.id)) { await claudeHandler.analyzeConversation(message); } }, };PK Q7�[�E.� events/.DS_Storenu �[��� Bud1 � a g e C r e m e s s a g e C r e a t e . j sIlocblob � F������ r e a d y . j sIlocblob * F������ @ � @ � @ � @ E � DSDB ` @ � @ � @ PK Q7�[)��D7 7 events/ready.jsnu �[��� const { REST, Routes } = require('discord.js'); const fs = require('fs'); module.exports = { name: 'ready', once: true, async execute(client) { console.log(`Connecté en tant que ${client.user.tag}!`); const commands = []; const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); for (const file of commandFiles) { const command = require(`../commands/${file}`); commands.push(command.data.toJSON()); } const rest = new REST({ version: '10' }).setToken(client.config.token); try { console.log('Début du rafraîchissement des commandes slash (/)...'); await rest.put( Routes.applicationCommands(client.config.clientId), { body: commands }, ); console.log('Commandes slash (/) rechargées avec succès!'); } catch (error) { console.error(error); } client.user.setActivity('Peerkinton Server', { type: 'WATCHING' }); }, };PK Q7�[~8�J J deploy-commands.jsnu �[��� const { REST, Routes } = require('discord.js'); const fs = require('fs'); const config = require('./config.json'); const commands = []; const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); for (const file of commandFiles) { const command = require(`./commands/${file}`); if (command.data && command.data.toJSON) { commands.push(command.data.toJSON()); console.log(`✅ Commande chargée: ${command.data.name}`); } else { console.log(`❌ Erreur avec la commande: ${file}`); } } const rest = new REST({ version: '10' }).setToken(config.token); (async () => { try { console.log(`🚀 Début du déploiement de ${commands.length} commandes slash...`); const data = await rest.put( Routes.applicationCommands(config.clientId), { body: commands }, ); console.log(`✅ ${data.length} commandes slash déployées avec succès!`); console.log('Commandes disponibles:'); data.forEach(cmd => { console.log(` - /${cmd.name}: ${cmd.description}`); }); console.log('\n🎉 Déploiement terminé! Tu peux maintenant lancer le bot avec: npm start'); } catch (error) { console.error('❌ Erreur lors du déploiement:'); if (error.code === 50001) { console.error('Erreur: Bot manque de permissions. Vérifie que ton bot a les bonnes permissions sur le serveur.'); } else if (error.code === 401) { console.error('Erreur: Token invalide. Vérifie ton token dans config.json'); } else if (error.status === 400) { console.error('Erreur: Client ID invalide ou problème avec les commandes'); } else { console.error(error); } console.log('\n🔧 Vérifications:'); console.log('1. Token bot correct dans config.json'); console.log('2. Client ID correct dans config.json'); console.log('3. Bot ajouté au serveur avec permissions applications.commands'); process.exit(1); } })();PK Q7�[��� package.jsonnu �[��� { "name": "peerkinton-bot", "version": "1.0.0", "description": "Bot Discord pour Peerkinton", "main": "index.js", "scripts": { "start": "node index.js", "dev": "nodemon index.js" }, "dependencies": { "discord.js": "^14.14.1", "fs": "^0.0.1-security", "path": "^0.12.7", "axios": "^1.6.7" }, "devDependencies": { "nodemon": "^3.0.3" } }PK Q7�[B33ѥ � config.jsonnu �[��� { "token": "MTM4OTE3MjI1MDA5NTI1NTY3Mw.Gife4q.iDLWKC9R0BJz6QRKOp_21AwMF5OoHAi63-mSbI", "clientId": "1389172250095255673", "guildId": "1386762016781373534", "claudeApiKey": "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", "prefix": "!", "colors": { "yellow": "#FFD700", "red": "#FF0000", "green": "#00FF00", "blue": "#0000FF" } }PK Q7�[��9� � ecosystem.config.jsnu �[��� module.exports = { apps: [{ name: 'peerkinton-bot', script: 'index.js', instances: 1, autorestart: true, watch: false, max_memory_restart: '1G', restart_delay: 5000, max_restarts: 10, min_uptime: '10s', env: { NODE_ENV: 'production' }, error_file: './logs/err.log', out_file: './logs/out.log', log_file: './logs/combined.log', time: true }] };PK Q7�[�*�2� 2� package-lock.jsonnu �[��� { "name": "peerkinton-bot", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "peerkinton-bot", "version": "1.0.0", "dependencies": { "axios": "^1.6.7", "discord.js": "^14.14.1", "fs": "^0.0.1-security", "path": "^0.12.7" }, "devDependencies": { "nodemon": "^3.0.3" } }, "node_modules/@discordjs/builders": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.11.2.tgz", "integrity": "sha512-F1WTABdd8/R9D1icJzajC4IuLyyS8f3rTOz66JsSI3pKvpCAtsMBweu8cyNYsIyvcrKAVn9EPK+Psoymq+XC0A==", "license": "Apache-2.0", "dependencies": { "@discordjs/formatters": "^0.6.1", "@discordjs/util": "^1.1.1", "@sapphire/shapeshift": "^4.0.0", "discord-api-types": "^0.38.1", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" }, "engines": { "node": ">=16.11.0" }, "funding": { "url": "https://github.com/discordjs/discord.js?sponsor" } }, "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==", "license": "Apache-2.0", "engines": { "node": ">=16.11.0" } }, "node_modules/@discordjs/formatters": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.1.tgz", "integrity": "sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==", "license": "Apache-2.0", "dependencies": { "discord-api-types": "^0.38.1" }, "engines": { "node": ">=16.11.0" }, "funding": { "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@discordjs/rest": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.5.1.tgz", "integrity": "sha512-Tg9840IneBcbrAjcGaQzHUJWFNq1MMWZjTdjJ0WS/89IffaNKc++iOvffucPxQTF/gviO9+9r8kEPea1X5J2Dw==", "license": "Apache-2.0", "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.38.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.3" }, "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==", "license": "Apache-2.0", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/discordjs/discord.js?sponsor" } }, "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==", "license": "Apache-2.0", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@discordjs/ws": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz", "integrity": "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==", "license": "Apache-2.0", "dependencies": { "@discordjs/collection": "^2.1.0", "@discordjs/rest": "^2.5.1", "@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.38.1", "tslib": "^2.6.2", "ws": "^8.17.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==", "license": "Apache-2.0", "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@sapphire/async-queue": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", "license": "MIT", "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==", "license": "MIT", "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==", "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" } }, "node_modules/@types/node": { "version": "24.0.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.7.tgz", "integrity": "sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==", "license": "MIT", "dependencies": { "undici-types": "~7.8.0" } }, "node_modules/@types/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", "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==", "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" } }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/axios": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "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==", "dev": true, "license": "MIT" }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "funding": { "url": "https://paulmillr.com/funding/" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/discord-api-types": { "version": "0.38.13", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.13.tgz", "integrity": "sha512-FELWJRgLVQuR7Az8RhdEZE0k6QNjSW9PCUcU1iyP2Gke8HrJmnMceSS9pD93UM64s3tvZzJPajpPLjWZJylf4g==", "license": "MIT", "workspaces": [ "scripts/actions/documentation" ] }, "node_modules/discord.js": { "version": "14.21.0", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.21.0.tgz", "integrity": "sha512-U5w41cEmcnSfwKYlLv5RJjB8Joa+QJyRwIJz5i/eg+v2Qvv6EYpCRhN9I2Rlf0900LuqSDg8edakUATrDZQncQ==", "license": "Apache-2.0", "dependencies": { "@discordjs/builders": "^1.11.2", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.1", "@discordjs/rest": "^2.5.1", "@discordjs/util": "^1.1.1", "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.3", "discord-api-types": "^0.38.1", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.3" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "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==", "license": "MIT" }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], "license": "MIT", "engines": { "node": ">=4.0" }, "peerDependenciesMeta": { "debug": { "optional": true } } }, "node_modules/form-data": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true, "license": "ISC" }, "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "license": "ISC" }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "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==", "license": "MIT" }, "node_modules/magic-bytes.js": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==", "license": "MIT" }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.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==", "license": "MIT", "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==", "license": "MIT", "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==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "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==", "dev": true, "license": "MIT" }, "node_modules/nodemon": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dev": true, "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^7.5.3", "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" }, "engines": { "node": ">=10" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/nodemon" } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", "license": "MIT", "dependencies": { "process": "^0.11.1", "util": "^0.10.3" } }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true, "license": "MIT" }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "license": "MIT", "dependencies": { "semver": "^7.5.3" }, "engines": { "node": ">=10" } }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/touch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", "dev": true, "license": "ISC", "bin": { "nodetouch": "bin/nodetouch.js" } }, "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==", "license": "MIT" }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true, "license": "MIT" }, "node_modules/undici": { "version": "6.21.3", "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", "license": "MIT", "engines": { "node": ">=18.17" } }, "node_modules/undici-types": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT" }, "node_modules/util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "license": "MIT", "dependencies": { "inherits": "2.0.3" } }, "node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "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 } } } } } PK Q7�[o燃, , logs/out-0.lognu �Iw�� 2025-07-01T14:32:36: Connecté en tant que Peerkinton#4655! 2025-07-01T14:32:36: Début du rafraîchissement des commandes slash (/)... 2025-07-01T14:32:36: Commandes slash (/) rechargées avec succès! 2025-07-01T19:29:33: Connecté en tant que Peerkinton#4655! 2025-07-01T19:29:41: Début du rafraîchissement des commandes slash (/)... 2025-07-01T19:29:41: Commandes slash (/) rechargées avec succès! 2025-07-01T21:35:11: Connecté en tant que Peerkinton#4655! 2025-07-01T21:35:11: Début du rafraîchissement des commandes slash (/)... 2025-07-01T21:35:11: Commandes slash (/) rechargées avec succès! 2025-07-01T21:38:33: Connecté en tant que Peerkinton#4655! 2025-07-01T21:38:33: Début du rafraîchissement des commandes slash (/)... 2025-07-01T21:38:33: Commandes slash (/) rechargées avec succès! PK Q7�[huƋ � logs/combined-0.lognu �Iw�� 2025-07-01T14:32:36: Connecté en tant que Peerkinton#4655! 2025-07-01T14:32:36: Début du rafraîchissement des commandes slash (/)... 2025-07-01T14:32:36: Commandes slash (/) rechargées avec succès! 2025-07-01T14:32:45: (node:335955) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead. (Use `node --trace-warnings ...` to show where the warning was created) 2025-07-01T19:28:50: DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Object.execute (/home/gqdcvggs/imators.systems/peerkinton-bot/commands/config.js:164:17) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:43:9) { requestBody: { files: [], json: { type: 4, data: [Object] } }, rawError: { message: 'Unknown interaction', code: 10062 }, code: 10062, status: 404, method: 'POST', url: 'https://discord.com/api/v10/interactions/1389689358189203456/aW50ZXJhY3Rpb246MTM4OTY4OTM1ODE4OTIwMzQ1NjpBMnRLcFZWczF4M01lcW9QQlJzWkZtYjBMRHJ6MzFQRDZ0T0JjaFloODM3bjU3TFJ1NlJxWFFsNnRKd01adVJwallxNmZXRFRJNElJVmF0bldDNlRuSTZqM1NsZXhLZEgzYWR1emQ5T00yU0NCdllTM2g0UjhtcFVpdFFwVHI2QQ/callback?with_response=false' } DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:50:13) 2025-07-01T19:29:33: Connecté en tant que Peerkinton#4655! 2025-07-01T19:29:41: Début du rafraîchissement des commandes slash (/)... 2025-07-01T19:29:41: Commandes slash (/) rechargées avec succès! 2025-07-01T21:34:49: (node:643702) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead. (Use `node --trace-warnings ...` to show where the warning was created) 2025-07-01T21:34:53: DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Object.execute (/home/gqdcvggs/imators.systems/peerkinton-bot/commands/config.js:164:17) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:43:9) { requestBody: { files: [], json: { type: 4, data: [Object] } }, rawError: { message: 'Unknown interaction', code: 10062 }, code: 10062, status: 404, method: 'POST', url: 'https://discord.com/api/v10/interactions/1389721120877318246/aW50ZXJhY3Rpb246MTM4OTcyMTEyMDg3NzMxODI0NjpRMW1hU2toWWJabFBBQVZYNE8zMkRDNzVFY3BwZ2dWV3RZM3Njejd6ZUczWlpISnB1NW1ZOWxVU1VIdnZZOFhhZTlBMFFXRHNBVzNsWGVPS0dMRHdwQUxnQmk4bjdoQnIxMFBpMGtGVXZQSFRIaHRmdHVpZUlBQzROdE1pb1ZSSw/callback?with_response=false' } DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:50:13) 2025-07-01T21:35:11: Connecté en tant que Peerkinton#4655! 2025-07-01T21:35:11: Début du rafraîchissement des commandes slash (/)... 2025-07-01T21:35:11: Commandes slash (/) rechargées avec succès! 2025-07-01T21:38:33: Connecté en tant que Peerkinton#4655! 2025-07-01T21:38:33: Début du rafraîchissement des commandes slash (/)... 2025-07-01T21:38:33: Commandes slash (/) rechargées avec succès! 2025-07-01T21:38:39: (node:767292) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead. (Use `node --trace-warnings ...` to show where the warning was created) PK Q7�[,� 4_ _ logs/err-0.lognu �Iw�� 2025-07-01T14:32:45: (node:335955) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead. (Use `node --trace-warnings ...` to show where the warning was created) 2025-07-01T19:28:50: DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Object.execute (/home/gqdcvggs/imators.systems/peerkinton-bot/commands/config.js:164:17) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:43:9) { requestBody: { files: [], json: { type: 4, data: [Object] } }, rawError: { message: 'Unknown interaction', code: 10062 }, code: 10062, status: 404, method: 'POST', url: 'https://discord.com/api/v10/interactions/1389689358189203456/aW50ZXJhY3Rpb246MTM4OTY4OTM1ODE4OTIwMzQ1NjpBMnRLcFZWczF4M01lcW9QQlJzWkZtYjBMRHJ6MzFQRDZ0T0JjaFloODM3bjU3TFJ1NlJxWFFsNnRKd01adVJwallxNmZXRFRJNElJVmF0bldDNlRuSTZqM1NsZXhLZEgzYWR1emQ5T00yU0NCdllTM2g0UjhtcFVpdFFwVHI2QQ/callback?with_response=false' } DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:50:13) 2025-07-01T21:34:49: (node:643702) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead. (Use `node --trace-warnings ...` to show where the warning was created) 2025-07-01T21:34:53: DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Object.execute (/home/gqdcvggs/imators.systems/peerkinton-bot/commands/config.js:164:17) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:43:9) { requestBody: { files: [], json: { type: 4, data: [Object] } }, rawError: { message: 'Unknown interaction', code: 10062 }, code: 10062, status: 404, method: 'POST', url: 'https://discord.com/api/v10/interactions/1389721120877318246/aW50ZXJhY3Rpb246MTM4OTcyMTEyMDg3NzMxODI0NjpRMW1hU2toWWJabFBBQVZYNE8zMkRDNzVFY3BwZ2dWV3RZM3Njejd6ZUczWlpISnB1NW1ZOWxVU1VIdnZZOFhhZTlBMFFXRHNBVzNsWGVPS0dMRHdwQUxnQmk4bjdoQnIxMFBpMGtGVXZQSFRIaHRmdHVpZUlBQzROdE1pb1ZSSw/callback?with_response=false' } DiscordAPIError[10062]: Unknown interaction at handleErrors (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:748:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async BurstHandler.runRequest (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:852:23) at async _REST.request (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/@discordjs/rest/dist/index.js:1293:22) at async ChatInputCommandInteraction.reply (/home/gqdcvggs/imators.systems/peerkinton-bot/node_modules/discord.js/src/structures/interfaces/InteractionResponses.js:200:22) at async Client.<anonymous> (/home/gqdcvggs/imators.systems/peerkinton-bot/index.js:50:13) 2025-07-01T21:38:39: (node:767292) Warning: Supplying "ephemeral" for interaction response options is deprecated. Utilize flags instead. (Use `node --trace-warnings ...` to show where the warning was created) PK Q7�[�:�S S handlers/claudeHandler.jsnu �[��� const axios = require('axios'); const config = require('../config.json'); const conversationBuffers = new Map(); const CONVERSATION_TIMEOUT = 300000; class ClaudeHandler { static async makeClaudeRequest(prompt) { try { const response = await axios.post('https://api.anthropic.com/v1/messages', { model: 'claude-3-sonnet-20240229', max_tokens: 1000, messages: [ { role: 'user', content: prompt } ] }, { headers: { 'Content-Type': 'application/json', 'x-api-key': config.claudeApiKey, 'anthropic-version': '2023-06-01' } }); return response.data.content[0].text; } catch (error) { console.error('Erreur Claude API:', error.response?.data || error.message); return null; } } static async checkMessageSecurity(messageContent) { const prompt = `Analyse ce message Discord et détermine s'il contient du spam, des insultes, du contenu offensant ou inapproprié. Réponds uniquement par "OUI" si c'est inapproprié ou "NON" si c'est acceptable. Message à analyser: "${messageContent}" Réponds seulement OUI ou NON:`; const response = await this.makeClaudeRequest(prompt); if (!response) return false; return response.trim().toUpperCase() === 'OUI'; } static async analyzeConversation(message) { const channelId = message.channel.id; if (!conversationBuffers.has(channelId)) { conversationBuffers.set(channelId, { messages: [], lastActivity: Date.now(), timeout: null }); } const buffer = conversationBuffers.get(channelId); buffer.messages.push({ author: message.author.username, content: message.content, timestamp: message.createdTimestamp }); buffer.lastActivity = Date.now(); if (buffer.timeout) { clearTimeout(buffer.timeout); } buffer.timeout = setTimeout(async () => { await this.processConversationEnd(message.channel, buffer.messages); conversationBuffers.delete(channelId); }, CONVERSATION_TIMEOUT); if (buffer.messages.length >= 10) { const shouldDelete = await this.shouldDeleteMessages(buffer.messages); if (shouldDelete) { try { const messagesToDelete = await message.channel.messages.fetch({ limit: 5 }); await message.channel.bulkDelete(messagesToDelete); } catch (error) { console.log('Impossible de supprimer les messages en masse'); } } } } static async processConversationEnd(channel, messages) { if (messages.length < 3) return; const conversationText = messages.map(m => `${m.author}: ${m.content}`).join('\n'); const prompt = `Analyse cette conversation Discord qui vient de se terminer. Détermine si elle contient du contenu offensant, des critiques malveillantes, du harcèlement ou tout autre comportement toxique qui justifierait la suppression des messages. Conversation: ${conversationText} Réponds uniquement par "SUPPRIMER" si les messages doivent être supprimés ou "GARDER" s'ils sont acceptables:`; const response = await this.makeClaudeRequest(prompt); if (!response) return; if (response.trim().toUpperCase() === 'SUPPRIMER') { try { const messagesToDelete = await channel.messages.fetch({ limit: messages.length }); await channel.bulkDelete(messagesToDelete); await channel.send('⚠️ Des messages ont été supprimés par le système d\'analyse automatique pour violation des règles du serveur.'); } catch (error) { console.log('Impossible de supprimer les messages de la conversation'); } } } static async shouldDeleteMessages(messages) { const recentMessages = messages.slice(-5); const conversationText = recentMessages.map(m => `${m.author}: ${m.content}`).join('\n'); const prompt = `Analyse ces messages Discord récents. Détermine s'ils contiennent du contenu qui nécessite une suppression immédiate (spam, insultes graves, harcèlement). Messages: ${conversationText} Réponds uniquement par "OUI" pour supprimer ou "NON" pour garder:`; const response = await this.makeClaudeRequest(prompt); if (!response) return false; return response.trim().toUpperCase() === 'OUI'; } } module.exports = ClaudeHandler;PK Q7�[/�� � index.jsnu �[��� const { Client, GatewayIntentBits, Collection } = require('discord.js'); const fs = require('fs'); const path = require('path'); const config = require('./config.json'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMembers ] }); client.commands = new Collection(); client.config = config; global.guildConfigs = new Map(); const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); for (const file of commandFiles) { const command = require(`./commands/${file}`); client.commands.set(command.data.name, command); } const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js')); for (const file of eventFiles) { const event = require(`./events/${file}`); if (event.once) { client.once(event.name, (...args) => event.execute(...args)); } else { client.on(event.name, (...args) => event.execute(...args)); } } client.on('interactionCreate', async interaction => { if (!interaction.isChatInputCommand()) return; const command = client.commands.get(interaction.commandName); if (!command) return; try { await command.execute(interaction); } catch (error) { console.error(error); const reply = { content: 'Erreur lors de l\'exécution de la commande!', ephemeral: true }; if (interaction.replied || interaction.deferred) { await interaction.followUp(reply); } else { await interaction.reply(reply); } } }); client.login(config.token);PK Q7�[3�0� � commands/mute.jsnu �[��� const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('mute') .setDescription('Empêche un utilisateur d\'envoyer des messages') .addUserOption(option => option.setName('utilisateur') .setDescription('Utilisateur à mute') .setRequired(true) ) .addStringOption(option => option.setName('raison') .setDescription('Raison du mute') .setRequired(true) ) .addIntegerOption(option => option.setName('duree') .setDescription('Durée en minutes (max 28 jours = 40320 min)') .setMinValue(1) .setMaxValue(40320) .setRequired(false) ), async execute(interaction) { if (!interaction.member.permissions.has(PermissionFlagsBits.ModerateMembers)) { return interaction.reply({ content: '❌ Tu n\'as pas la permission de timeout des utilisateurs!', ephemeral: true }); } const targetUser = interaction.options.getUser('utilisateur'); const reason = interaction.options.getString('raison'); const duration = interaction.options.getInteger('duree') || 10; const targetMember = interaction.guild.members.cache.get(targetUser.id); if (!targetMember) { return interaction.reply({ content: '❌ Utilisateur introuvable sur ce serveur!', ephemeral: true }); } if (targetMember.permissions.has(PermissionFlagsBits.Administrator)) { return interaction.reply({ content: '❌ Je ne peux pas mute un administrateur!', ephemeral: true }); } if (targetMember.roles.highest.position >= interaction.member.roles.highest.position) { return interaction.reply({ content: '❌ Tu ne peux pas mute quelqu\'un avec un rôle égal ou supérieur!', ephemeral: true }); } try { const timeoutDuration = duration * 60 * 1000; const timeoutUntil = new Date(Date.now() + timeoutDuration); const dmEmbed = new EmbedBuilder() .setColor('#FFA500') .setTitle('🔇 Tu as été mute') .setDescription(`Tu as été mute sur le serveur **${interaction.guild.name}**`) .addFields( { name: '📝 Raison', value: reason, inline: false }, { name: '⏰ Durée', value: `${duration} minute(s)`, inline: true }, { name: '👤 Modérateur', value: `${interaction.user}`, inline: true }, { name: '📅 Fin du mute', value: `<t:${Math.floor(timeoutUntil.getTime() / 1000)}:F>`, inline: false } ) .setFooter({ text: 'Peerkinton • Modération' }) .setTimestamp(); try { await targetUser.send({ embeds: [dmEmbed] }); } catch (error) { console.log('Impossible d\'envoyer le MP à l\'utilisateur mute'); } await targetMember.timeout(timeoutDuration, `${reason} - Par ${interaction.user.tag}`); const successEmbed = new EmbedBuilder() .setColor('#00FF00') .setTitle('✅ Utilisateur mute') .setDescription(`**${targetUser.tag}** a été mute avec succès`) .addFields( { name: '📝 Raison', value: reason, inline: false }, { name: '⏰ Durée', value: `${duration} minute(s)`, inline: true }, { name: '👤 Modérateur', value: `${interaction.user}`, inline: true }, { name: '📅 Fin du mute', value: `<t:${Math.floor(timeoutUntil.getTime() / 1000)}:F>`, inline: false } ) .setFooter({ text: 'Peerkinton • Modération' }) .setTimestamp(); await interaction.reply({ embeds: [successEmbed] }); } catch (error) { console.error(error); await interaction.reply({ content: '❌ Erreur lors du mute. Vérifie mes permissions!', ephemeral: true }); } } };PK Q7�[�C��t t commands/config.jsnu �[��� const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits, ChannelType } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('config') .setDescription('Configure le bot (Admin uniquement)') .addSubcommand(subcommand => subcommand .setName('suggestion') .setDescription('Configure le salon des suggestions') .addChannelOption(option => option.setName('salon') .setDescription('Salon pour les suggestions') .addChannelTypes(ChannelType.GuildText) .setRequired(true) ) ) .addSubcommand(subcommand => subcommand .setName('secure') .setDescription('Configure la sécurité anti-spam et insultes') .addBooleanOption(option => option.setName('activer') .setDescription('Activer la sécurité') .setRequired(true) ) .addChannelOption(option => option.setName('salon') .setDescription('Salon à protéger') .addChannelTypes(ChannelType.GuildText) .setRequired(false) ) ) .addSubcommand(subcommand => subcommand .setName('convanalys') .setDescription('Active l\'analyse des conversations par Claude') .addBooleanOption(option => option.setName('activer') .setDescription('Activer l\'analyse') .setRequired(true) ) .addChannelOption(option => option.setName('salon') .setDescription('Salon à analyser') .addChannelTypes(ChannelType.GuildText) .setRequired(false) ) ) .addSubcommand(subcommand => subcommand .setName('view') .setDescription('Voir la configuration actuelle') ), async execute(interaction) { if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) { return interaction.reply({ content: '❌ Tu dois être administrateur pour utiliser cette commande!', ephemeral: true }); } const subcommand = interaction.options.getSubcommand(); const guildId = interaction.guild.id; if (!global.guildConfigs.has(guildId)) { global.guildConfigs.set(guildId, {}); } const guildConfig = global.guildConfigs.get(guildId); switch (subcommand) { case 'suggestion': const suggestionChannel = interaction.options.getChannel('salon'); guildConfig.suggestionChannel = suggestionChannel.id; global.guildConfigs.set(guildId, guildConfig); await interaction.reply({ content: `✅ Salon des suggestions configuré sur ${suggestionChannel}!`, ephemeral: true }); break; case 'secure': const secureEnabled = interaction.options.getBoolean('activer'); const secureChannel = interaction.options.getChannel('salon'); guildConfig.securityEnabled = secureEnabled; if (secureChannel) { if (!guildConfig.secureChannels) guildConfig.secureChannels = []; if (!guildConfig.secureChannels.includes(secureChannel.id)) { guildConfig.secureChannels.push(secureChannel.id); } } global.guildConfigs.set(guildId, guildConfig); await interaction.reply({ content: `✅ Sécurité ${secureEnabled ? 'activée' : 'désactivée'}${secureChannel ? ` pour ${secureChannel}` : ''}!`, ephemeral: true }); break; case 'convanalys': const analysEnabled = interaction.options.getBoolean('activer'); const analysChannel = interaction.options.getChannel('salon'); guildConfig.conversationAnalysis = analysEnabled; if (analysChannel) { if (!guildConfig.analysisChannels) guildConfig.analysisChannels = []; if (!guildConfig.analysisChannels.includes(analysChannel.id)) { guildConfig.analysisChannels.push(analysChannel.id); } } global.guildConfigs.set(guildId, guildConfig); await interaction.reply({ content: `✅ Analyse des conversations ${analysEnabled ? 'activée' : 'désactivée'}${analysChannel ? ` pour ${analysChannel}` : ''}!`, ephemeral: true }); break; case 'view': const embed = new EmbedBuilder() .setColor('#0099FF') .setTitle('⚙️ Configuration du serveur') .addFields( { name: '💡 Salon suggestions', value: guildConfig.suggestionChannel ? `<#${guildConfig.suggestionChannel}>` : 'Non configuré', inline: true }, { name: '🛡️ Sécurité', value: guildConfig.securityEnabled ? '✅ Activée' : '❌ Désactivée', inline: true }, { name: '🔍 Analyse conversations', value: guildConfig.conversationAnalysis ? '✅ Activée' : '❌ Désactivée', inline: true } ) .setFooter({ text: 'Peerkinton • Configuration' }) .setTimestamp(); if (guildConfig.secureChannels && guildConfig.secureChannels.length > 0) { embed.addFields({ name: '🔒 Salons sécurisés', value: guildConfig.secureChannels.map(id => `<#${id}>`).join(', '), inline: false }); } if (guildConfig.analysisChannels && guildConfig.analysisChannels.length > 0) { embed.addFields({ name: '📊 Salons analysés', value: guildConfig.analysisChannels.map(id => `<#${id}>`).join(', '), inline: false }); } await interaction.reply({ embeds: [embed], ephemeral: true }); break; } } };PK Q7�[{��� � commands/suggestion.jsnu �[��� const { SlashCommandBuilder, EmbedBuilder, ChannelType } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('suggestion') .setDescription('Propose une suggestion') .addStringOption(option => option.setName('suggestion') .setDescription('Ta suggestion') .setRequired(true) ) .addChannelOption(option => option.setName('salon') .setDescription('Salon où poster la suggestion') .addChannelTypes(ChannelType.GuildText) .setRequired(false) ), async execute(interaction) { const suggestion = interaction.options.getString('suggestion'); const channel = interaction.options.getChannel('salon') || interaction.channel; const guildConfig = global.guildConfigs.get(interaction.guild.id) || {}; const suggestionChannel = guildConfig.suggestionChannel; const targetChannel = suggestionChannel ? interaction.guild.channels.cache.get(suggestionChannel) : channel; const embed = new EmbedBuilder() .setColor('#00FF00') .setTitle('💡 Nouvelle Suggestion') .setDescription(suggestion) .addFields( { name: '👤 Proposé par', value: `${interaction.user}`, inline: true }, { name: '📅 Date', value: `<t:${Math.floor(Date.now() / 1000)}:F>`, inline: true } ) .setFooter({ text: 'Peerkinton • Système de suggestions' }) .setTimestamp(); const message = await targetChannel.send({ embeds: [embed] }); await message.react('👍'); await message.react('👎'); await interaction.reply({ content: `✅ Ta suggestion a été postée dans ${targetChannel}!`, ephemeral: true }); } };PK Q7�[}�� � commands/play.jsnu �[��� const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('play') .setDescription('Affiche les informations de connexion au serveur Minecraft'), async execute(interaction) { const embed = new EmbedBuilder() .setColor('#FFD700') .setTitle('🎮 Serveur Minecraft Peerkinton') .setDescription('Rejoins notre serveur Minecraft !') .addFields( { name: '🌐 Adresse IP', value: '`play.peerkinton.com`', inline: true }, { name: '🎯 Version', value: '1.20.1', inline: true }, ) .setThumbnail('https://cdn.discordapp.com/attachments/123/456/minecraft-icon.png') .setFooter({ text: 'Peerkinton • Serveur Minecraft' }) .setTimestamp(); await interaction.reply({ embeds: [embed] }); } };PK Q7�[@�V% % commands/ban.jsnu �[��� const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('ban') .setDescription('Ban un utilisateur') .addUserOption(option => option.setName('utilisateur') .setDescription('Utilisateur à bannir') .setRequired(true) ) .addStringOption(option => option.setName('raison') .setDescription('Raison du bannissement') .setRequired(true) ) .addIntegerOption(option => option.setName('duree') .setDescription('Durée en jours pour supprimer les messages (0-7)') .setMinValue(0) .setMaxValue(7) .setRequired(false) ), async execute(interaction) { if (!interaction.member.permissions.has(PermissionFlagsBits.BanMembers)) { return interaction.reply({ content: '❌ Tu n\'as pas la permission de bannir des utilisateurs!', ephemeral: true }); } const targetUser = interaction.options.getUser('utilisateur'); const reason = interaction.options.getString('raison'); const deleteMessageDays = interaction.options.getInteger('duree') || 0; const targetMember = interaction.guild.members.cache.get(targetUser.id); if (targetMember) { if (targetMember.permissions.has(PermissionFlagsBits.Administrator)) { return interaction.reply({ content: '❌ Je ne peux pas bannir un administrateur!', ephemeral: true }); } if (targetMember.roles.highest.position >= interaction.member.roles.highest.position) { return interaction.reply({ content: '❌ Tu ne peux pas bannir quelqu\'un avec un rôle égal ou supérieur!', ephemeral: true }); } } try { const dmEmbed = new EmbedBuilder() .setColor('#FF0000') .setTitle('🔨 Tu as été banni') .setDescription(`Tu as été banni du serveur **${interaction.guild.name}**`) .addFields( { name: '📝 Raison', value: reason, inline: false }, { name: '👤 Modérateur', value: `${interaction.user}`, inline: true }, { name: '📅 Date', value: `<t:${Math.floor(Date.now() / 1000)}:F>`, inline: true } ) .setFooter({ text: 'Peerkinton • Modération' }) .setTimestamp(); try { await targetUser.send({ embeds: [dmEmbed] }); } catch (error) { console.log('Impossible d\'envoyer le MP à l\'utilisateur banni'); } await interaction.guild.members.ban(targetUser, { deleteMessageDays: deleteMessageDays, reason: `${reason} - Par ${interaction.user.tag}` }); const successEmbed = new EmbedBuilder() .setColor('#00FF00') .setTitle('✅ Utilisateur banni') .setDescription(`**${targetUser.tag}** a été banni avec succès`) .addFields( { name: '📝 Raison', value: reason, inline: false }, { name: '👤 Modérateur', value: `${interaction.user}`, inline: true }, { name: '🗑️ Messages supprimés', value: `${deleteMessageDays} jour(s)`, inline: true } ) .setFooter({ text: 'Peerkinton • Modération' }) .setTimestamp(); await interaction.reply({ embeds: [successEmbed] }); } catch (error) { console.error(error); await interaction.reply({ content: '❌ Erreur lors du bannissement. Vérifie mes permissions!', ephemeral: true }); } } };PK Q7�[,��(� � ! node_modules/asynckit/parallel.jsnu �Iw�� var iterate = require('./lib/iterate.js') , initState = require('./lib/state.js') , terminator = require('./lib/terminator.js') ; // Public API module.exports = parallel; /** * Runs iterator over provided array elements in parallel * * @param {array|object} list - array or object (named list) to iterate over * @param {function} iterator - iterator to run * @param {function} callback - invoked when all elements processed * @returns {function} - jobs terminator */ function parallel(list, iterator, callback) { var state = initState(list); while (state.index < (state['keyedList'] || list).length) { iterate(list, iterator, state, function(error, result) { if (error) { callback(error, result); return; } // looks like it's the last one if (Object.keys(state.jobs).length === 0) { callback(null, state.results); return; } }); state.index++; } return terminator.bind(state, callback); } PK Q7�[�>��K K "