From b62773faa44269c6e89fcc1d3cba39ab71991c81 Mon Sep 17 00:00:00 2001 From: vitoUwu Date: Sun, 8 Dec 2024 14:36:07 -0400 Subject: [PATCH 1/5] feat: check members command --- package-lock.json | 7 +++-- src/commands/checkmembers.js | 54 ++++++++++++++++++++++++++++++++++++ src/config.js | 1 + 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 src/commands/checkmembers.js diff --git a/package-lock.json b/package-lock.json index 7179681..edb9b81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "agent", - "version": "1.13.21", + "version": "1.13.24", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "agent", - "version": "1.13.21", + "version": "1.13.24", "license": "GPL-3.0", "dependencies": { "@discordjs/rest": "^1.0.1", @@ -14,6 +14,9 @@ "discord-api-types": "^0.37.1", "discord.js": "^14.14.1", "mongoose": "^6.7.0" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@aws-crypto/crc32": { diff --git a/src/commands/checkmembers.js b/src/commands/checkmembers.js new file mode 100644 index 0000000..2593659 --- /dev/null +++ b/src/commands/checkmembers.js @@ -0,0 +1,54 @@ +const { SlashCommandBuilder, PermissionsBitField } = require("discord.js"); +const Command = require("../structures/command.js"); +const config = require("../config.js"); + +class CheckMembersCommand extends Command { + constructor() { + super({ + data: new SlashCommandBuilder() + .setName("checkmembers") + .setDescription("Faça um checkup de todos os membros do servidor.") + .setDMPermission(false) + .setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator), + }); + } + + /** + * @param {import('discord.js').ChatInputCommandInteraction} interaction + */ + async execute(interaction) { + await interaction.deferReply({ ephemeral: true }); + + const memberModel = require("../models/member.js"); + const memberDocs = await memberModel.find({}); + + // @vitoUwu: how tf are we suposed to paginate this? skill issue asf + // remember to update this code when we achieve more than 1000 members + const members = await interaction.guild.members.fetch({ limit: 1000 }); + const warnings = []; + + for (const [id, member] of members) { + if (member.roles.cache.hasAny(...config.levels)) { + const userDocs = memberDocs.filter((doc) => doc.user === id); + if (!userDocs.length) { + warnings.push( + `**<@${id}> (${id})** have a moderator/admin/owner role but is not in any server!`, + ); + } + } + + if (member.roles.cache.has(config.guestRole)) { + warnings.push( + `**<@${id}> (${id})** is a guest!`, + ); + } + } + + // i'm praying that this content doesn't reach the discord limit + await interaction.editReply({ + content: warnings.join("\n"), + }); + } +} + +module.exports = new CheckMembersCommand(); diff --git a/src/config.js b/src/config.js index cc3de3f..cd6a1a8 100644 --- a/src/config.js +++ b/src/config.js @@ -38,4 +38,5 @@ module.exports = { suggestionsChannel: '1025927402800558090', pendingTag: '1040402827064922155', guildsChangeLog: "1049034683968663612", + guestRole: "921091439876780052" }; From 17611219218951de5ac382c180584f192d2656b5 Mon Sep 17 00:00:00 2001 From: vitoo <32278696+vitoUwu@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:32:12 -0400 Subject: [PATCH 2/5] fix: set command to active MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Pedro Falcão <22248342+HordLawk@users.noreply.github.com> --- src/commands/checkmembers.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/commands/checkmembers.js b/src/commands/checkmembers.js index 2593659..df365ee 100644 --- a/src/commands/checkmembers.js +++ b/src/commands/checkmembers.js @@ -5,6 +5,7 @@ const config = require("../config.js"); class CheckMembersCommand extends Command { constructor() { super({ + active: true, data: new SlashCommandBuilder() .setName("checkmembers") .setDescription("Faça um checkup de todos os membros do servidor.") From 02c28fbf012760d8bc263a176858680a7e3e4ade Mon Sep 17 00:00:00 2001 From: vitoUwu Date: Fri, 20 Dec 2024 14:04:19 -0400 Subject: [PATCH 3/5] fix: max content length error --- src/commands/checkmembers.js | 32 +++++++++++++++++++++----------- src/utils/constants.js | 3 +++ 2 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 src/utils/constants.js diff --git a/src/commands/checkmembers.js b/src/commands/checkmembers.js index df365ee..ebdfb4f 100644 --- a/src/commands/checkmembers.js +++ b/src/commands/checkmembers.js @@ -1,11 +1,12 @@ const { SlashCommandBuilder, PermissionsBitField } = require("discord.js"); const Command = require("../structures/command.js"); const config = require("../config.js"); +const constants = require("../utils/constants.js"); class CheckMembersCommand extends Command { constructor() { super({ - active: true, + active: true, data: new SlashCommandBuilder() .setName("checkmembers") .setDescription("Faça um checkup de todos os membros do servidor.") @@ -32,23 +33,32 @@ class CheckMembersCommand extends Command { if (member.roles.cache.hasAny(...config.levels)) { const userDocs = memberDocs.filter((doc) => doc.user === id); if (!userDocs.length) { - warnings.push( - `**<@${id}> (${id})** have a moderator/admin/owner role but is not in any server!`, - ); + const warning = `**<@${id}> (${id})** have a moderator/admin/owner role but is not in any server!`; + if (warnings.at(-1).length + warning.length >= constants.maxMessageContentLength) { + warnings[warnings.length - 1] += `\n${warning}`; + } else { + warnings.push(warning); + } } } if (member.roles.cache.has(config.guestRole)) { - warnings.push( - `**<@${id}> (${id})** is a guest!`, - ); + const warning = `**<@${id}> (${id})** is a guest!`; + if (warnings.at(-1).length + warning.length >= constants.maxMessageContentLength) { + warnings[warnings.length - 1] += `\n${warning}`; + } else { + warnings.push(warning); + } } } - // i'm praying that this content doesn't reach the discord limit - await interaction.editReply({ - content: warnings.join("\n"), - }); + for (const [index, warning] of warnings.entries()) { + const reply = index === 0 ? interaction.editReply : interaction.followUp; + + await reply({ + content: warning, + }); + } } } diff --git a/src/utils/constants.js b/src/utils/constants.js new file mode 100644 index 0000000..70c5240 --- /dev/null +++ b/src/utils/constants.js @@ -0,0 +1,3 @@ +module.exports = { + maxMessageContentLength: 2000, +}; From 2024fd2d2b312391288bdb7f7396900e12cecb14 Mon Sep 17 00:00:00 2001 From: vitoUwu Date: Fri, 20 Dec 2024 14:05:36 -0400 Subject: [PATCH 4/5] fix: woopsy --- src/commands/checkmembers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands/checkmembers.js b/src/commands/checkmembers.js index ebdfb4f..157f473 100644 --- a/src/commands/checkmembers.js +++ b/src/commands/checkmembers.js @@ -34,7 +34,7 @@ class CheckMembersCommand extends Command { const userDocs = memberDocs.filter((doc) => doc.user === id); if (!userDocs.length) { const warning = `**<@${id}> (${id})** have a moderator/admin/owner role but is not in any server!`; - if (warnings.at(-1).length + warning.length >= constants.maxMessageContentLength) { + if (warnings.at(-1).length + warning.length < constants.maxMessageContentLength) { warnings[warnings.length - 1] += `\n${warning}`; } else { warnings.push(warning); @@ -44,7 +44,7 @@ class CheckMembersCommand extends Command { if (member.roles.cache.has(config.guestRole)) { const warning = `**<@${id}> (${id})** is a guest!`; - if (warnings.at(-1).length + warning.length >= constants.maxMessageContentLength) { + if (warnings.at(-1).length + warning.length < constants.maxMessageContentLength) { warnings[warnings.length - 1] += `\n${warning}`; } else { warnings.push(warning); From 68c25da059c06d7aa7a153b3faebdc0a1f693a10 Mon Sep 17 00:00:00 2001 From: vitoUwu Date: Fri, 20 Dec 2024 14:15:51 -0400 Subject: [PATCH 5/5] fix: woopsy 2 --- src/commands/checkmembers.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/commands/checkmembers.js b/src/commands/checkmembers.js index 157f473..e76ecd5 100644 --- a/src/commands/checkmembers.js +++ b/src/commands/checkmembers.js @@ -34,7 +34,7 @@ class CheckMembersCommand extends Command { const userDocs = memberDocs.filter((doc) => doc.user === id); if (!userDocs.length) { const warning = `**<@${id}> (${id})** have a moderator/admin/owner role but is not in any server!`; - if (warnings.at(-1).length + warning.length < constants.maxMessageContentLength) { + if (warnings.length && warnings.at(-1).length + warning.length < constants.maxMessageContentLength) { warnings[warnings.length - 1] += `\n${warning}`; } else { warnings.push(warning); @@ -44,7 +44,7 @@ class CheckMembersCommand extends Command { if (member.roles.cache.has(config.guestRole)) { const warning = `**<@${id}> (${id})** is a guest!`; - if (warnings.at(-1).length + warning.length < constants.maxMessageContentLength) { + if (warnings.length && warnings.at(-1).length + warning.length < constants.maxMessageContentLength) { warnings[warnings.length - 1] += `\n${warning}`; } else { warnings.push(warning); @@ -54,7 +54,7 @@ class CheckMembersCommand extends Command { for (const [index, warning] of warnings.entries()) { const reply = index === 0 ? interaction.editReply : interaction.followUp; - + await reply({ content: warning, });