From bd43889e2370aecd59a776f941eb59748445dc8e Mon Sep 17 00:00:00 2001 From: hfgd Date: Fri, 11 Aug 2023 21:09:14 +0200 Subject: [PATCH 1/5] Added security measure for the massrole command --- locales/de.json | 3 +- locales/en.json | 3 +- modules/massrole/commands/massrole.js | 14 ++ modules/massrole/configs/config.json | 40 ++++ modules/massrole/module.json | 1 + package-lock.json | 296 +++++++++++++++++++++----- package.json | 6 +- 7 files changed, 308 insertions(+), 55 deletions(-) create mode 100644 modules/massrole/configs/config.json diff --git a/locales/de.json b/locales/de.json index 0561e58b..c4358d0c 100644 --- a/locales/de.json +++ b/locales/de.json @@ -826,7 +826,8 @@ "all-users": "Alle Mitglieder", "bots": "Bots", "humans": "Mitglieder (keine Bots)", - "add-subcommand-description": "Füge eine Rolle zu allen Mitgliedern hinzu" + "add-subcommand-description": "Füge eine Rolle zu allen Mitgliedern hinzu", + "not-admin": "⚠ Um diesen Befehl zu verwenden musst du zur adminRoles option im SCNX-Dashboard hinzugefügt werden. Falls du der Eigentümer dieses Bots bist, denk daran in deinen Servereinstellungen ebenfalls einen entsprechenden Override einzustellen um Missbrauch dieses Commands zu verhindern." }, "hunt-the-code": { "display-name-description": "Name des Codes, der dem Mitglied angezeigt wird, wenn er den Code einlöst", diff --git a/locales/en.json b/locales/en.json index a2ec25c6..0362595d 100644 --- a/locales/en.json +++ b/locales/en.json @@ -481,7 +481,8 @@ "target-option-description": "Determines whether bots should be included or not", "all-users": "All Users", "bots": "Bots", - "humans": "Humans" + "humans": "Humans", + "not-admin": "⚠ To use this command, you need to be added to the adminRoles option in the SCNX-Dashboard. If you are the owner of this bot please remember to create an override in the guild settings to prevent abuse of this command." }, "twitch-notifications": { "channel-not-found": "Channel with ID %c could not be found", diff --git a/modules/massrole/commands/massrole.js b/modules/massrole/commands/massrole.js index c17c2f96..4797e510 100644 --- a/modules/massrole/commands/massrole.js +++ b/modules/massrole/commands/massrole.js @@ -2,9 +2,19 @@ const {localize} = require('../../../src/functions/localize'); const {embedType} = require('../../../src/functions/helpers'); let target; let failed; +let cancel; + +module.exports.beforeSubcommand = async function(interaction) { + if (interaction.member.roles.cache.filter(m => interaction.client.configurations['massrole']['config'].adminRoles.includes(m.id)).size === 0) { + cancel = true; + return interaction.reply({ephemeral: true, content: localize('massrole', 'not-admin')}); + } +}; module.exports.subcommands = { 'add': async function (interaction) { + if (cancel) return; + console.log("add"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); if (target === 'all') { @@ -62,6 +72,8 @@ module.exports.subcommands = { } }, 'remove': async function (interaction) { + if (cancel) return; + console.log("remove"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); if (target === 'all') { @@ -123,6 +135,8 @@ module.exports.subcommands = { } }, 'remove-all': async function (interaction) { + if (cancel) return; + console.log("remove-all"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); if (target === 'all') { diff --git a/modules/massrole/configs/config.json b/modules/massrole/configs/config.json new file mode 100644 index 00000000..219f043d --- /dev/null +++ b/modules/massrole/configs/config.json @@ -0,0 +1,40 @@ +{ + "description": { + "en": "Configure the function of the module here", + "de": "Stelle hier die Funktionen des Modules ein" + }, + "humanName": { + "en": "Configuration", + "de": "Konfiguration" + }, + "filename": "config.json", + "commandsWarnings": { + "special": [ + { + "name": "/massrole", + "info": { + "en": "You need to first set the permissions in your server settings for this command and after that add them under \"adminRoles\" here.", + "de": "Du musst zuerst die Rechte in deinen Server-Einstellungen einstellen und danach diese unter \"AdminRollen\" hinzufügen." + } + } + ] + }, + "content": [ + { + "name": "adminRoles", + "humanName": { + "de": "Adminrollen" + }, + "default": { + "en": [], + "de": [] + }, + "description": { + "en": "Every role that can use the massrole command", + "de": "Jede Rolle, welche den Massrole command verwenden kann" + }, + "type": "array", + "content": "roleID" + } + ] +} diff --git a/modules/massrole/module.json b/modules/massrole/module.json index 6e252f09..c52a9a84 100644 --- a/modules/massrole/module.json +++ b/modules/massrole/module.json @@ -12,6 +12,7 @@ "commands-dir": "/commands", "fa-icon": "fa-solid fa-users-viewfinder", "config-example-files": [ + "configs/config.json", "configs/strings.json" ], "tags": [ diff --git a/package-lock.json b/package-lock.json index 506d44bd..8ed9f410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,8 +31,8 @@ "log4js": "6.8.0", "node-schedule": "2.1.1", "parse-duration": "1.0.2", - "sequelize": "6.28.0", - "sqlite3": "5.1.4", + "sequelize": "^6.31.1", + "sqlite3": "^5.1.6", "stop-discord-phishing": "0.3.1", "utf-8-validate": "5.0.10", "zlib-sync": "0.1.8" @@ -2773,9 +2773,9 @@ } }, "node_modules/@expo/config": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", - "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", + "version": "6.0.26", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.26.tgz", + "integrity": "sha512-nMQaZl69r6CMJFhCj0xcGJN9bIi4Uws0k9K6q6rGFPFNarS0z0aexeyNLv93/J+hsTJVn0GEYtGz5Y/R8boXxw==", "optional": true, "peer": true, "dependencies": { @@ -3217,9 +3217,9 @@ "peer": true }, "node_modules/@expo/image-utils": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", - "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.21.tgz", + "integrity": "sha512-Ha7pNcpl52RJIeYz3gR1ajOgPPl7WLZWiLqtLi94s9J0a7FvmNBMqd/VKrfHNj8QmtZxXcmXr7y7tPhZbVFg7w==", "optional": true, "peer": true, "dependencies": { @@ -3288,7 +3288,7 @@ "node_modules/@expo/image-utils/node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "optional": true, "peer": true, "engines": { @@ -3323,7 +3323,7 @@ "node_modules/@expo/image-utils/node_modules/unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "optional": true, "peer": true, "dependencies": { @@ -3366,13 +3366,13 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", - "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.22.tgz", + "integrity": "sha512-R81sLbaeUBjN8IXcxiVx7GcpSj8z7szILl1b5yJDb38WdIFwxhrseA5wXaTT1yMhI+59w6n99T2qtFV2yD5qYA==", "optional": true, "peer": true, "dependencies": { - "@expo/config": "6.0.24", + "@expo/config": "7.0.1", "@expo/json-file": "8.2.36", "chalk": "^4.1.0", "debug": "^4.3.2", @@ -3382,6 +3382,108 @@ "sucrase": "^3.20.0" } }, + "node_modules/@expo/metro-config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "optional": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/metro-config/node_modules/@expo/config": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-7.0.1.tgz", + "integrity": "sha512-4lu0wr45XXJ2MXiLAm2+fmOyy/jjqF3NuDm92fO6nuulRzEEvTP4w3vsibJ690rT81ohtvhpruKhkRs0wSjKWA==", + "optional": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~5.0.1", + "@expo/config-types": "^46.0.1", + "@expo/json-file": "8.2.36", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4", + "sucrase": "^3.20.0" + } + }, + "node_modules/@expo/metro-config/node_modules/@expo/config-plugins": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-5.0.4.tgz", + "integrity": "sha512-vzUcVpqOMs3h+hyRdhGwk+eGIOhXa5xYdd92yO17RMNHav3v/+ekMbs7XA2c3lepMO8Yd4/5hqmRw9ZTL6jGzg==", + "optional": true, + "peer": true, + "dependencies": { + "@expo/config-types": "^47.0.0", + "@expo/json-file": "8.2.36", + "@expo/plist": "0.0.18", + "@expo/sdk-runtime-versions": "^1.0.0", + "@react-native/normalize-color": "^2.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.3.5", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "0.4.23" + } + }, + "node_modules/@expo/metro-config/node_modules/@expo/config-plugins/node_modules/@expo/config-types": { + "version": "47.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-47.0.0.tgz", + "integrity": "sha512-r0pWfuhkv7KIcXMUiNACJmJKKwlTBGMw9VZHNdppS8/0Nve8HZMTkNRFQzTHW1uH3pBj8jEXpyw/2vSWDHex9g==", + "optional": true, + "peer": true + }, + "node_modules/@expo/metro-config/node_modules/@expo/config-types": { + "version": "46.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-46.0.2.tgz", + "integrity": "sha512-PXkmOgNwRyBfgVT1HmFZhfh3Qm7WKKyV6mk3/5HJ/LzPh1t+Zs2JrWX8U2YncTLV1QzV7nV8tnkyvszzqnZEzQ==", + "optional": true, + "peer": true + }, + "node_modules/@expo/metro-config/node_modules/@expo/config/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/metro-config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "optional": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/metro-config/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -3461,16 +3563,16 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", - "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.4.tgz", + "integrity": "sha512-yvoc2w4zwiq1wko8FE8/N3e1HSrXQP8XUvX8nIJtQ2mrSLGktbg9SzNM8+s8aBVTd4j1Zp3bcMzTsYnG9ygYbA==", "optional": true, "peer": true, "dependencies": { - "@expo/config": "6.0.24", + "@expo/config": "6.0.26", "@expo/config-plugins": "4.1.5", "@expo/config-types": "^45.0.0", - "@expo/image-utils": "0.3.20", + "@expo/image-utils": "0.3.21", "@expo/json-file": "8.2.36", "debug": "^4.3.1", "expo-modules-autolinking": "0.8.1", @@ -14101,9 +14203,9 @@ } }, "node_modules/sequelize": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz", - "integrity": "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==", + "version": "6.31.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.31.1.tgz", + "integrity": "sha512-cahWtRrYLjqoZP/aurGBoaxn29qQCF4bxkAUPEQ/ozjJjt6mtL4Q113S3N39mQRmX5fgxRbli+bzZARP/N51eg==", "funding": [ { "type": "opencollective", @@ -14118,7 +14220,7 @@ "inflection": "^1.13.2", "lodash": "^4.17.21", "moment": "^2.29.1", - "moment-timezone": "^0.5.34", + "moment-timezone": "^0.5.35", "pg-connection-string": "^2.5.0", "retry-as-promised": "^7.0.3", "semver": "^7.3.5", @@ -14715,9 +14817,9 @@ "peer": true }, "node_modules/sqlite3": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.4.tgz", - "integrity": "sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", + "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", "hasInstallScript": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.0", @@ -18344,9 +18446,9 @@ } }, "@expo/config": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.24.tgz", - "integrity": "sha512-OcACI1md1Yo5TQmUxxueJ/RaTlR2Mgl6KswTFOYCL1XJERF/jjAx95zhWXH+JQGdlM0yB0vqM6vB6GbUFRvLxA==", + "version": "6.0.26", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-6.0.26.tgz", + "integrity": "sha512-nMQaZl69r6CMJFhCj0xcGJN9bIi4Uws0k9K6q6rGFPFNarS0z0aexeyNLv93/J+hsTJVn0GEYtGz5Y/R8boXxw==", "optional": true, "peer": true, "requires": { @@ -18723,9 +18825,9 @@ } }, "@expo/image-utils": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.20.tgz", - "integrity": "sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.3.21.tgz", + "integrity": "sha512-Ha7pNcpl52RJIeYz3gR1ajOgPPl7WLZWiLqtLi94s9J0a7FvmNBMqd/VKrfHNj8QmtZxXcmXr7y7tPhZbVFg7w==", "optional": true, "peer": true, "requires": { @@ -18779,7 +18881,7 @@ "temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "optional": true, "peer": true }, @@ -18805,7 +18907,7 @@ "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "optional": true, "peer": true, "requires": { @@ -18846,13 +18948,13 @@ } }, "@expo/metro-config": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.18.tgz", - "integrity": "sha512-DWtwV67kD8X2uOKIs5QyHlHD+6L6RAgudZZDBmu433ZvL62HAUYfjEi3+i0jeMiUqN85o1vbXg6xqWnBCpS50g==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.3.22.tgz", + "integrity": "sha512-R81sLbaeUBjN8IXcxiVx7GcpSj8z7szILl1b5yJDb38WdIFwxhrseA5wXaTT1yMhI+59w6n99T2qtFV2yD5qYA==", "optional": true, "peer": true, "requires": { - "@expo/config": "6.0.24", + "@expo/config": "7.0.1", "@expo/json-file": "8.2.36", "chalk": "^4.1.0", "debug": "^4.3.2", @@ -18862,6 +18964,100 @@ "sucrase": "^3.20.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "optional": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@expo/config": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-7.0.1.tgz", + "integrity": "sha512-4lu0wr45XXJ2MXiLAm2+fmOyy/jjqF3NuDm92fO6nuulRzEEvTP4w3vsibJ690rT81ohtvhpruKhkRs0wSjKWA==", + "optional": true, + "peer": true, + "requires": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~5.0.1", + "@expo/config-types": "^46.0.1", + "@expo/json-file": "8.2.36", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "7.3.2", + "slugify": "^1.3.4", + "sucrase": "^3.20.0" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "optional": true, + "peer": true + } + } + }, + "@expo/config-plugins": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-5.0.4.tgz", + "integrity": "sha512-vzUcVpqOMs3h+hyRdhGwk+eGIOhXa5xYdd92yO17RMNHav3v/+ekMbs7XA2c3lepMO8Yd4/5hqmRw9ZTL6jGzg==", + "optional": true, + "peer": true, + "requires": { + "@expo/config-types": "^47.0.0", + "@expo/json-file": "8.2.36", + "@expo/plist": "0.0.18", + "@expo/sdk-runtime-versions": "^1.0.0", + "@react-native/normalize-color": "^2.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.3.5", + "slash": "^3.0.0", + "xcode": "^3.0.1", + "xml2js": "0.4.23" + }, + "dependencies": { + "@expo/config-types": { + "version": "47.0.0", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-47.0.0.tgz", + "integrity": "sha512-r0pWfuhkv7KIcXMUiNACJmJKKwlTBGMw9VZHNdppS8/0Nve8HZMTkNRFQzTHW1uH3pBj8jEXpyw/2vSWDHex9g==", + "optional": true, + "peer": true + } + } + }, + "@expo/config-types": { + "version": "46.0.2", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-46.0.2.tgz", + "integrity": "sha512-PXkmOgNwRyBfgVT1HmFZhfh3Qm7WKKyV6mk3/5HJ/LzPh1t+Zs2JrWX8U2YncTLV1QzV7nV8tnkyvszzqnZEzQ==", + "optional": true, + "peer": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "optional": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -18933,16 +19129,16 @@ } }, "@expo/prebuild-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.2.tgz", - "integrity": "sha512-+AQ/EVgcySl3cvYMmZLaEyGkxvQnO+UFU2mshmUoUh5lTIFTNKl1aVo0UmYW2/JehmKu6bxOrr/lL5byHv+fcQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-4.0.4.tgz", + "integrity": "sha512-yvoc2w4zwiq1wko8FE8/N3e1HSrXQP8XUvX8nIJtQ2mrSLGktbg9SzNM8+s8aBVTd4j1Zp3bcMzTsYnG9ygYbA==", "optional": true, "peer": true, "requires": { - "@expo/config": "6.0.24", + "@expo/config": "6.0.26", "@expo/config-plugins": "4.1.5", "@expo/config-types": "^45.0.0", - "@expo/image-utils": "0.3.20", + "@expo/image-utils": "0.3.21", "@expo/json-file": "8.2.36", "debug": "^4.3.1", "expo-modules-autolinking": "0.8.1", @@ -27483,9 +27679,9 @@ } }, "sequelize": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz", - "integrity": "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==", + "version": "6.31.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.31.1.tgz", + "integrity": "sha512-cahWtRrYLjqoZP/aurGBoaxn29qQCF4bxkAUPEQ/ozjJjt6mtL4Q113S3N39mQRmX5fgxRbli+bzZARP/N51eg==", "requires": { "@types/debug": "^4.1.7", "@types/validator": "^13.7.1", @@ -27494,7 +27690,7 @@ "inflection": "^1.13.2", "lodash": "^4.17.21", "moment": "^2.29.1", - "moment-timezone": "^0.5.34", + "moment-timezone": "^0.5.35", "pg-connection-string": "^2.5.0", "retry-as-promised": "^7.0.3", "semver": "^7.3.5", @@ -27956,9 +28152,9 @@ "peer": true }, "sqlite3": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.4.tgz", - "integrity": "sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", + "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", "requires": { "@mapbox/node-pre-gyp": "^1.0.0", "node-addon-api": "^4.2.0", diff --git a/package.json b/package.json index 65b7e610..c1276635 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,8 @@ "log4js": "6.8.0", "node-schedule": "2.1.1", "parse-duration": "1.0.2", - "sequelize": "6.28.0", - "sqlite3": "5.1.4", + "sequelize": "^6.31.1", + "sqlite3": "^5.1.6", "stop-discord-phishing": "0.3.1", "utf-8-validate": "5.0.10", "zlib-sync": "0.1.8" @@ -51,4 +51,4 @@ "devDependencies": { "eslint": "8.34.0" } -} \ No newline at end of file +} From 86c2592fe31b61ba7fd61694f7bd6085d4c7ac49 Mon Sep 17 00:00:00 2001 From: hfgd Date: Tue, 29 Aug 2023 19:23:11 +0200 Subject: [PATCH 2/5] Added Audit-Log reasons and stuff --- locales/de.json | 4 +++- locales/en.json | 4 +++- modules/massrole/commands/massrole.js | 26 ++++++++++++-------------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/locales/de.json b/locales/de.json index 93e481d1..22c9729e 100644 --- a/locales/de.json +++ b/locales/de.json @@ -827,7 +827,9 @@ "bots": "Bots", "humans": "Mitglieder (keine Bots)", "add-subcommand-description": "Füge eine Rolle zu allen Mitgliedern hinzu", - "not-admin": "⚠ Um diesen Befehl zu verwenden musst du zur adminRoles option im SCNX-Dashboard hinzugefügt werden. Falls du der Eigentümer dieses Bots bist, denk daran in deinen Servereinstellungen ebenfalls einen entsprechenden Override einzustellen um Missbrauch dieses Commands zu verhindern." + "not-admin": "⚠ Um diesen Befehl zu verwenden musst du zur adminRoles option im SCNX-Dashboard hinzugefügt werden. Falls du der Eigentümer dieses Bots bist, denk daran in deinen Servereinstellungen ebenfalls einen entsprechenden Override einzustellen um Missbrauch dieses Commands zu verhindern.", + "add-reason": "Massen-Rollenvergabe durch %u", + "remove-reason": "Massen-Rollenentfernung durch %u" }, "hunt-the-code": { "display-name-description": "Name des Codes, der dem Mitglied angezeigt wird, wenn er den Code einlöst", diff --git a/locales/en.json b/locales/en.json index e07b4831..fcc9db9e 100644 --- a/locales/en.json +++ b/locales/en.json @@ -482,7 +482,9 @@ "all-users": "All Users", "bots": "Bots", "humans": "Humans", - "not-admin": "⚠ To use this command, you need to be added to the adminRoles option in the SCNX-Dashboard. If you are the owner of this bot please remember to create an override in the guild settings to prevent abuse of this command." + "not-admin": "⚠ To use this command, you need to be added to the adminRoles option in the SCNX-Dashboard. If you are the owner of this bot please remember to create an override in the guild settings to prevent abuse of this command.", + "add-reason": "Mass role addition by %u", + "remove-reason": "Mass role removal by %u" }, "twitch-notifications": { "channel-not-found": "Channel with ID %c could not be found", diff --git a/modules/massrole/commands/massrole.js b/modules/massrole/commands/massrole.js index 4797e510..d533dec6 100644 --- a/modules/massrole/commands/massrole.js +++ b/modules/massrole/commands/massrole.js @@ -2,18 +2,16 @@ const {localize} = require('../../../src/functions/localize'); const {embedType} = require('../../../src/functions/helpers'); let target; let failed; -let cancel; module.exports.beforeSubcommand = async function(interaction) { if (interaction.member.roles.cache.filter(m => interaction.client.configurations['massrole']['config'].adminRoles.includes(m.id)).size === 0) { - cancel = true; return interaction.reply({ephemeral: true, content: localize('massrole', 'not-admin')}); } }; module.exports.subcommands = { 'add': async function (interaction) { - if (cancel) return; + if (interaction.replied) return; console.log("add"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); @@ -21,7 +19,7 @@ module.exports.subcommands = { await interaction.deferReply({ ephemeral: true }); for (const member of interaction.guild.members.cache.values()) { try { - await member.roles.add(interaction.options.getRole('role')); + await member.roles.add(interaction.options.getRole('role'), localize('massrole', 'add-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -37,7 +35,7 @@ module.exports.subcommands = { for (const member of interaction.guild.members.cache.values()) { if (member.user.bot) { try { - await member.roles.add(interaction.options.getRole('role')); + await member.roles.add(interaction.options.getRole('role'), localize('massrole', 'add-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -56,7 +54,7 @@ module.exports.subcommands = { if (!member.user.bot) { try { - await member.roles.add(interaction.options.getRole('role')); + await member.roles.add(interaction.options.getRole('role'), localize('massrole', 'add-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -72,7 +70,7 @@ module.exports.subcommands = { } }, 'remove': async function (interaction) { - if (cancel) return; + if (interaction.replied) return; console.log("remove"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); @@ -80,7 +78,7 @@ module.exports.subcommands = { await interaction.deferReply({ ephemeral: true }); for (const member of interaction.guild.members.cache.values()) { try { - await member.roles.remove(interaction.options.getRole('role')); + await member.roles.remove(interaction.options.getRole('role'), localize('massrole', 'remove-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -98,7 +96,7 @@ module.exports.subcommands = { for (const member of interaction.guild.members.cache.values()) { if (member.user.bot) { try { - await member.roles.remove(interaction.options.getRole('role')); + await member.roles.remove(interaction.options.getRole('role'), localize('massrole', 'remove-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -118,7 +116,7 @@ module.exports.subcommands = { if (member.manageable) { if (!member.user.bot) { try { - await member.roles.remove(interaction.options.getRole('role')); + await member.roles.remove(interaction.options.getRole('role'), localize('massrole', 'remove-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -135,7 +133,7 @@ module.exports.subcommands = { } }, 'remove-all': async function (interaction) { - if (cancel) return; + if (interaction.replied) return; console.log("remove-all"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); @@ -143,7 +141,7 @@ module.exports.subcommands = { await interaction.deferReply({ ephemeral: true }); for (const member of interaction.guild.members.cache.values()) { try { - await member.roles.remove(member.roles.cache.filter(role => !role.managed)); + await member.roles.remove(member.roles.cache.filter(role => !role.managed), localize('massrole', 'remove-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -160,7 +158,7 @@ module.exports.subcommands = { if (member.manageable) { if (member.user.bot) { try { - await member.roles.remove(member.roles.cache.filter(role => !role.managed)); + await member.roles.remove(member.roles.cache.filter(role => !role.managed), localize('massrole', 'remove-reason', {u: interaction.user.tag})); } catch (e) { failed++; } @@ -179,7 +177,7 @@ module.exports.subcommands = { if (member.manageable) { if (!member.user.bot) { try { - await member.roles.remove(member.roles.cache.filter(role => !role.managed)); + await member.roles.remove(member.roles.cache.filter(role => !role.managed), localize('massrole', 'remove-reason', {u: interaction.user.tag})); } catch (e) { failed++; } From c558a7209eb1bb80547b234693a0134d8ae20708 Mon Sep 17 00:00:00 2001 From: hfgd Date: Tue, 29 Aug 2023 19:29:01 +0200 Subject: [PATCH 3/5] Kinda forgot to remove debug stuff... Did that now --- modules/massrole/commands/massrole.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/massrole/commands/massrole.js b/modules/massrole/commands/massrole.js index d533dec6..afce3acb 100644 --- a/modules/massrole/commands/massrole.js +++ b/modules/massrole/commands/massrole.js @@ -12,7 +12,6 @@ module.exports.beforeSubcommand = async function(interaction) { module.exports.subcommands = { 'add': async function (interaction) { if (interaction.replied) return; - console.log("add"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); if (target === 'all') { @@ -71,7 +70,6 @@ module.exports.subcommands = { }, 'remove': async function (interaction) { if (interaction.replied) return; - console.log("remove"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); if (target === 'all') { @@ -134,7 +132,6 @@ module.exports.subcommands = { }, 'remove-all': async function (interaction) { if (interaction.replied) return; - console.log("remove-all"); const moduleStrings = interaction.client.configurations['massrole']['strings']; checkTarget(interaction); if (target === 'all') { From 7d29a334209c848c95e08828d16b5d550e9566ab Mon Sep 17 00:00:00 2001 From: hfgd <46094961+hfgd123@users.noreply.github.com> Date: Wed, 30 Aug 2023 20:06:27 +0200 Subject: [PATCH 4/5] Update locales/de.json Co-authored-by: Simon --- locales/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/de.json b/locales/de.json index 22c9729e..0b1bbbc3 100644 --- a/locales/de.json +++ b/locales/de.json @@ -827,7 +827,7 @@ "bots": "Bots", "humans": "Mitglieder (keine Bots)", "add-subcommand-description": "Füge eine Rolle zu allen Mitgliedern hinzu", - "not-admin": "⚠ Um diesen Befehl zu verwenden musst du zur adminRoles option im SCNX-Dashboard hinzugefügt werden. Falls du der Eigentümer dieses Bots bist, denk daran in deinen Servereinstellungen ebenfalls einen entsprechenden Override einzustellen um Missbrauch dieses Commands zu verhindern.", + "not-admin": "⚠️ Um diesen Befehl zu verwenden musst du zur adminRoles option im SCNX-Dashboard hinzugefügt werden. Falls du der Eigentümer dieses Bots bist, denk daran in deinen Servereinstellungen ebenfalls einen entsprechenden Override einzustellen um Missbrauch dieses Commands zu verhindern.", "add-reason": "Massen-Rollenvergabe durch %u", "remove-reason": "Massen-Rollenentfernung durch %u" }, From b27b899f6f1a1770d8d2d2ef60382d3a3d81dde6 Mon Sep 17 00:00:00 2001 From: hfgd <46094961+hfgd123@users.noreply.github.com> Date: Wed, 30 Aug 2023 20:06:35 +0200 Subject: [PATCH 5/5] Update locales/en.json Co-authored-by: Simon --- locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en.json b/locales/en.json index a8533c04..83533886 100644 --- a/locales/en.json +++ b/locales/en.json @@ -489,7 +489,7 @@ "all-users": "All Users", "bots": "Bots", "humans": "Humans", - "not-admin": "⚠ To use this command, you need to be added to the adminRoles option in the SCNX-Dashboard. If you are the owner of this bot please remember to create an override in the guild settings to prevent abuse of this command.", + "not-admin": "⚠️ To use this command, you need to be added to the adminRoles option in the SCNX-Dashboard. If you are the owner of this bot please remember to create an override in the guild settings to prevent abuse of this command.", "add-reason": "Mass role addition by %u", "remove-reason": "Mass role removal by %u" },