├── Commands ├── Configuracion │ ├── AntiPalabras.js │ ├── AutoMod.js │ ├── AutoModSettings.js │ ├── Backup-Cargar.js │ ├── Backup-Crear.js │ ├── Backup-Delete.js │ ├── Backup-Info.js │ ├── Backup-List.js │ ├── Backup.js │ ├── Lock.js │ ├── LockAll.js │ ├── ModLogsChannel.js │ ├── SetMessageLogs.js │ ├── SetModLogs.js │ ├── SetMutedRole.js │ ├── SetPrefix.js │ ├── UnLock.js │ ├── UnLockAll.js │ ├── perms.js │ ├── setVerifyChannel.js │ └── setVerifyRole.js ├── Moderacion │ ├── ban.js │ ├── clear.js │ ├── forceban.js │ ├── hackban.js │ ├── kick.js │ ├── mute.js │ ├── nuke.js │ ├── razon.js │ ├── removewarn.js │ ├── tempban.js │ ├── unban.js │ ├── unbanall.js │ ├── unmute.js │ ├── warn.js │ └── warnlist.js ├── Privados │ ├── addblacklist.js │ ├── addstaff.js │ ├── audit-logs.js │ ├── embed.js │ ├── eval.js │ ├── forceunban.js │ ├── generar.js │ ├── removestaff.js │ └── ticket-system.js ├── Seguridad │ ├── AntiBots.js │ ├── NukeChannelsPerName.js │ ├── NukeRolesPerName.js │ ├── antichannels.js │ ├── antiraid-settings.js │ ├── antiraid.js │ ├── antiroles.js │ ├── antitokens.js │ ├── autoconfig.js │ ├── malicious-config.js │ ├── malicious.js │ ├── raid-logs.js │ ├── unnuke.js │ └── whitelist.js ├── Staff │ └── kick-malicious.js └── Utilidad │ ├── bot.js │ ├── check.js │ ├── cmd.js │ ├── commands.js │ ├── detect.js │ ├── help.js │ ├── invite.js │ ├── member.js │ ├── ping.js │ ├── premium.js │ ├── purgeme.js │ ├── reportar.js │ ├── status.js │ └── verify.js ├── Events ├── Channels │ ├── antiChannelCreate.js │ ├── antiChannelDelete.js │ ├── channelCreate.js │ ├── raidChannelCreate.js │ └── raidChannelDelete.js ├── Client │ ├── Error.js │ ├── guildCreate.js │ └── ready.js ├── Interaction │ └── interactionCreate.js ├── Member │ ├── banMemberAdd.js │ ├── guildBotAdd.js │ ├── guildMemberAdd.js │ ├── guildMemberAddMuted.js │ ├── guildMemberRemove.js │ ├── guildTokenAdd.js │ ├── kickMemberAdd.js │ ├── maliciousEntry.js │ └── verifyMemberAdd.js ├── Message │ ├── checkPremium.js │ ├── floodAutoMod.js │ ├── messageAntiPalabras.js │ ├── messageAutoMod.js │ ├── messageCreate.js │ ├── messageDelete.js │ ├── messageUpdate.js │ ├── opinionAdd.js │ └── webhookSpam.js └── Roles │ ├── raidRoleCreate.js │ ├── raidRoleDelete.js │ ├── roleCreate.js │ └── roleDelete.js ├── Handlers ├── commandsHandler.js └── eventsHandler.js ├── Models ├── AntiBots.js ├── AntiChannels.js ├── AntiFlood.js ├── AntiLinks.js ├── AntiPalabras.js ├── AntiRaid.js ├── AntiRoles.js ├── AntiTokens.js ├── Apelacion.js ├── AutoModerador.js ├── Blacklist.js ├── CaptchaIntents.js ├── Guild.js ├── GuildBackupCreate.js ├── LastGuildBackupCreated.js ├── Malicious.js ├── MessageLogs.js ├── ModPerms.js ├── ModRole.js ├── Muted.js ├── MutedRole.js ├── Prefix.js ├── Premium.js ├── RaidLogs.js ├── Staff.js ├── Ticket.js ├── Tickets.js ├── User.js ├── UserFlood.js ├── UserPremium.js ├── Verify.js ├── VerifyRole.js ├── Warn.js ├── Whitelist.js ├── modLogs.js └── userRaidLogs.js ├── Moderacion ├── ban.js ├── clear.js ├── forceban.js ├── hackban.js └── kick.js ├── README.md ├── emojis.js ├── index.js ├── package.json ├── password.js └── shard.js /Commands/Configuracion/Backup-Cargar.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Premium = require("../../Models/UserPremium"); 4 | const GBC = require("../../Models/GuildBackupCreate"); 5 | const backup = require("discord-backup"); 6 | let oncooldown = false; 7 | 8 | module.exports = { 9 | name: "backup-cargar", 10 | aliases: ["servidor-cargar"], 11 | description: "Carga una backup en tu servidor", 12 | permissions: "Owner", 13 | usage: "backup-cargar ", 14 | cooldown: 120, 15 | /** 16 | * @param {Message} message 17 | * @param {Client} Client 18 | */ 19 | async execute(message, args, commandName, client, Discord, prefix) { 20 | if(message.guild.ownerId !== message.author.id) { 21 | return message.reply({ content: `Solo el __propietario__ de este servidor puede usar esto`, allowedMentions: { repliedUser: false } }); 22 | } 23 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 24 | return message.channel.send({ content: "No tengo permisos de __administrador__ para ejecutar esto." }); 25 | } 26 | const UserIsPremium = await Premium.findOne({ userId: message.author.id }); 27 | if(!UserIsPremium) { 28 | return message.channel.send({ content: "Este comando es de uso `premium`!, unete a nuestro servidor de soporte para más información. https://discord.gg/tPWYAPhhwz" }); 29 | } 30 | const backupId = args[0] 31 | if(!backupId) { 32 | return message.channel.send({ content: "¡Tienes que proporcionar una id!" }); 33 | } 34 | const backupSearch = await GBC.findOne({ backupId: backupId }); 35 | if(!backupSearch) { 36 | return message.channel.send({ content: "¡Tienes que proporcionar una id valida!" }); 37 | } else { 38 | if(backupSearch?.authorId !== message.author.id) { 39 | message.channel.send({ content: "¡Esa backup no te pertenece!" }); 40 | } else { 41 | let msg = await message.channel.send({ 42 | "embeds": [ 43 | { 44 | "title": "⚠ - Advertencia, confirmar acción.", 45 | "description": "`-` ¿Estas seguro de que quieres cargar esta backup?\n\n`❔` **>** `Efectos de la backup:`\n```Eliminar canales, Eliminar roles, Eliminar emojis, Crear canales, Crear roles, Crear emojis, Crear Baneos```\n`ATENCIÓN: TODO TU PROGRESO EN EL SERVIDOR SE RESTAURARA.`", 46 | "color": 16757052, 47 | "footer": { 48 | "text": "Reacciona con ✅ para continuar | Reacciona con ❌ para cancelar." 49 | } 50 | } 51 | ] 52 | }); 53 | msg.react('✅'); 54 | msg.react('❌'); 55 | const rFilter = (r, user) => { 56 | return ['✅', '❌'].includes(r.emoji.name) && user.id === message.author.id; 57 | } 58 | const collected = await msg.awaitReactions({ filter: rFilter, max: 1, time: 120000 }); 59 | const reaction = collected.first().emoji.name; 60 | if(reaction === "✅") { 61 | msg.edit({ content: `${emojis.cargando} | \`Estoy cargando la backup...\``, embeds: [] }); 62 | msg.reactions.removeAll(); 63 | message.guild.setName("Cargando..."); 64 | setTimeout(async () => { 65 | const bld = await backup.load(backupId, message.guild, { 66 | maxMessagesPerChannel: 5 67 | }).catch(e => {}); 68 | }, 5000) 69 | } else { 70 | msg.reactions.removeAll(); 71 | } 72 | } 73 | } 74 | } 75 | } -------------------------------------------------------------------------------- /Commands/Configuracion/Backup-Crear.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const GBC = require("../../Models/GuildBackupCreate"); 4 | const Premium = require("../../Models/UserPremium"); 5 | const backup = require("discord-backup"); 6 | let oncooldown = false; 7 | 8 | module.exports = { 9 | name: "backup-crear", 10 | aliases: ["servidor-crear"], 11 | description: "Crea una backup de tu servidor", 12 | permissions: "Owner", 13 | cooldown: 2, 14 | /** 15 | * @param {Message} message 16 | * @param {Client} Client 17 | */ 18 | async execute(message, args, commandName, client, Discord, prefix) { 19 | if(message.guild.ownerId !== message.author.id) { 20 | return message.reply({ content: `Solo el __propietario__ de este servidor puede usar esto`, allowedMentions: { repliedUser: false } }); 21 | } 22 | const UserIsPremium = await Premium.findOne({ userId: message.author.id }); 23 | if(!UserIsPremium) { 24 | return message.channel.send({ content: "Este comando es de uso `premium`!, unete a nuestro servidor de soporte para más información. https://discord.gg/tPWYAPhhwz" }); 25 | } 26 | const backups = await GBC.find({ authorId: message.author.id }); 27 | if(backups?.length >= 5) { 28 | return message.reply({ content: `Ya cuentas con \`5\` backups en tu cuenta, ya no es posible crear más.` }); 29 | } 30 | message.channel.send({ content: ""+emojis.cargando+" | Creando backup, esto puede tardar un momento..." }) 31 | const bck = await backup.create(message.guild, { 32 | maxMessagesPerChannel: 5 33 | }).catch(e => {}); 34 | const cgb = new GBC({ 35 | guildName: message.guild.name, 36 | guildId: message.guild.id, 37 | backupId: bck.id, 38 | authorId: message.author.id 39 | }); 40 | await cgb.save(); 41 | const Embed = new MessageEmbed() 42 | .setDescription(`¡Backup creada con exito!`) 43 | .addFields( 44 | [ 45 | { 46 | name: "📂 | Backup Info", 47 | value: `\`\`\`${prefix}backup-info ${bck.id}\`\`\`` 48 | }, 49 | { 50 | name: "📤 | Cargar Backup", 51 | value: `\`\`\`${prefix}backup-cargar ${bck.id}\`\`\`` 52 | } 53 | ] 54 | ) 55 | .setColor("BLUE") 56 | .setTimestamp() 57 | .setFooter(message.guild.name) 58 | message.channel.send({ embeds: [Embed] }); 59 | } 60 | } -------------------------------------------------------------------------------- /Commands/Configuracion/Backup-Delete.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const GBC = require("../../Models/GuildBackupCreate"); 4 | const Premium = require("../../Models/UserPremium"); 5 | const backup = require("discord-backup"); 6 | let oncooldown = false; 7 | 8 | module.exports = { 9 | name: "backup-delete", 10 | aliases: ["servidor-delete"], 11 | description: "Elimina una backup tuya", 12 | usage: "backup-delete ", 13 | cooldown: 2, 14 | /** 15 | * @param {Message} message 16 | * @param {Client} Client 17 | */ 18 | async execute(message, args, commandName, client, Discord, prefix) { 19 | const UserIsPremium = await Premium.findOne({ userId: message.author.id }); 20 | if(!UserIsPremium) { 21 | return message.channel.send({ content: "Este comando es de uso `premium`!, unete a nuestro servidor de soporte para más información. https://discord.gg/tPWYAPhhwz" }); 22 | } 23 | const backupId = args[0]; 24 | if(!backupId) { 25 | return message.channel.send({ content: "¡Tienes que proporcionar una id!" }); 26 | } else { 27 | const backupSearch = await GBC.findOne({ backupId: backupId }); 28 | if(!backupSearch) { 29 | return message.channel.send({ content: "¡Tienes que proporcionar una id valida!" }); 30 | } else { 31 | if(backupSearch?.authorId !== message.author.id) { 32 | message.channel.send({ content: "¡Esa backup no te pertenece!" }); 33 | } else { 34 | await backup.remove(backupId).then(async () => { 35 | message.channel.send({ content: "¡Se elimino correctamente la backup!" }); 36 | await GBC.findOneAndDelete({ backupId: backupId }).catch(e => {}); 37 | }).catch(e => { return message.channel.send({ content: "Un error inesperado ocurrio en el proceso, contacta con el servidor de soporte: https://discord.gg/ZQCcer2XsF" }) }); 38 | } 39 | } 40 | } 41 | 42 | } 43 | } -------------------------------------------------------------------------------- /Commands/Configuracion/Backup-Info.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const GBC = require("../../Models/GuildBackupCreate"); 4 | const Premium = require("../../Models/UserPremium"); 5 | const backup = require("discord-backup"); 6 | 7 | module.exports = { 8 | name: "backup-info", 9 | aliases: ["servidor-info"], 10 | description: "Obtén información de una backup tuya", 11 | usage: "backup-info ", 12 | cooldown: 2, 13 | /** 14 | * @param {Message} message 15 | * @param {Client} Client 16 | */ 17 | async execute(message, args, commandName, client, Discord, prefix) { 18 | const UserIsPremium = await Premium.findOne({ userId: message.author.id }); 19 | if(!UserIsPremium) { 20 | return message.channel.send({ content: "Este comando es de uso `premium`!, unete a nuestro servidor de soporte para más información. https://discord.gg/tPWYAPhhwz" }); 21 | } 22 | const backupId = args[0] 23 | if(!backupId) { 24 | return message.channel.send({ content: "¡Tienes que proporcionar una id!" }); 25 | } 26 | const backupSearch = await GBC.findOne({ backupId: backupId }); 27 | if(!backupSearch) { 28 | return message.channel.send({ content: "¡Tienes que proporcionar una id valida!" }); 29 | } else { 30 | if(backupSearch?.authorId !== message.author.id) { 31 | message.channel.send({ content: "¡Esa backup no te pertenece!" }); 32 | } else { 33 | const info = await backup.fetch(backupId).catch(e => {}); 34 | const Embed = new MessageEmbed() 35 | .setDescription(`Información de la backup \`${info.id}\``) 36 | .addFields([ 37 | { 38 | name: "📜 | Nombre", 39 | value: `\`\`\`${info.data.name}\`\`\``, 40 | inline: true 41 | }, 42 | { 43 | name: "📚 | Categorias", 44 | value: `\`\`\`${info.data.channels.categories.length}\`\`\``, 45 | inline: true 46 | }, 47 | { 48 | name: "📜 | Otros Canales", 49 | value: `\`\`\`${info.data.channels.others.length}\`\`\``, 50 | inline: true 51 | }, 52 | { 53 | name: "🌐 | Roles", 54 | value: `\`\`\`${info.data.roles.length}\`\`\``, 55 | inline: true 56 | }, 57 | { 58 | name: "🪐 | Emojis", 59 | value: `\`\`\`${info.data.emojis.length}\`\`\`` 60 | } 61 | ]) 62 | .setColor("BLUE") 63 | .setFooter(message.guild.name) 64 | .setTimestamp() 65 | 66 | message.channel.send({ embeds: [Embed] }); 67 | } 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Commands/Configuracion/Backup-List.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const GBC = require("../../Models/GuildBackupCreate"); 4 | const Premium = require("../../Models/UserPremium"); 5 | const backup = require("discord-backup"); 6 | 7 | module.exports = { 8 | name: "backup-list", 9 | aliases: ["servidor-list"], 10 | description: "Obtén todas tus backups", 11 | cooldown: 2, 12 | /** 13 | * @param {Message} message 14 | * @param {Client} Client 15 | */ 16 | async execute(message, args, commandName, client, Discord, prefix) { 17 | const UserIsPremium = await Premium.findOne({ userId: message.author.id }); 18 | if(!UserIsPremium) { 19 | return message.channel.send({ content: "Este comando es de uso `premium`!, unete a nuestro servidor de soporte para más información. https://discord.gg/tPWYAPhhwz" }); 20 | } 21 | const backups = await GBC.find({ authorId: message.author.id }); 22 | let backupList; 23 | if(backups.length <= 0) { 24 | backupList = "\`\`\`¡No tienes backups!\`\`\`" 25 | } else { 26 | backupList = backups.map((b, i) => `**${i+1}. -** \`${b.backupId}\` **|** \`${b.guildName}\``).join("\n"); 27 | } 28 | const Embed = new MessageEmbed() 29 | .setColor("BLUE") 30 | .setFooter(message.guild.name) 31 | .setTimestamp() 32 | .setTitle("Tus backups:") 33 | .setDescription(`${backupList}`) 34 | 35 | message.channel.send({ embeds: [Embed] }) 36 | } 37 | } -------------------------------------------------------------------------------- /Commands/Configuracion/Backup.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "backup", 3 | aliases: ["servidor"], 4 | description: "Información de las backups", 5 | permissions: "Owner", 6 | cooldown: 1, 7 | /** 8 | * @param {Message} message 9 | * @param {Client} Client 10 | */ 11 | async execute(message, args, commandName, client, Discord, prefix) { 12 | message.channel.send({ content: `\`{}\` = Argumentos 13 | \`<>\` = Requerido 14 | Las opciones disponibles son: 15 | 16 | **-** \`ap!backup-crear\` 17 | **-** \`ap!backup-list\` 18 | **-** \`ap!backup-cargar <{backupId}>\` 19 | **-** \`ap!backup-info <{backupId}>\` 20 | **-** \`ap!backup-delete <{backupId}>\` 21 | ` 22 | 23 | }) 24 | } 25 | } -------------------------------------------------------------------------------- /Commands/Configuracion/Lock.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Prefix = require("../../Models/Prefix"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "lock", 7 | aliases: ["cerrar"], 8 | description: "Cierra el canal en el que se utilice", 9 | permissions: "MANAGE_CHANNELS", 10 | cooldown: 15, 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(!message.member.permissions.has("MANAGE_CHANNELS")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 17 | } 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | const Embed = new MessageEmbed() 22 | .setTitle("Información") 23 | .setDescription(`${emojis.cargando} | \`Bloqueando la escritura de este canal\``) 24 | .setColor("BLUE") 25 | let msg = await message.reply({ embeds: [Embed], allowedMentions: { repliedUser: false } }); 26 | message.channel.permissionOverwrites.edit(message.guild.roles.everyone, { 27 | SEND_MESSAGES: false, 28 | ADD_REACTIONS: false 29 | }); 30 | const Embed2 = new MessageEmbed() 31 | .setTitle(`Información`) 32 | .setDescription(`${emojis.positivo} | \`Bloquee este canal con exito\``) 33 | .setColor("GREEN") 34 | msg.edit({ embeds: [Embed2], allowedMentions: { repliedUser: false } }) 35 | } 36 | } -------------------------------------------------------------------------------- /Commands/Configuracion/LockAll.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Prefix = require("../../Models/Prefix"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "lockall", 7 | aliases: ["lock-all"], 8 | description: "Cierra todos los canales del servidor", 9 | permissions: "MANAGE_CHANNELS", 10 | cooldown: 15, 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(!message.member.permissions.has("MANAGE_CHANNELS")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 17 | } 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | const Embed = new MessageEmbed() 22 | .setTitle("Información") 23 | .setDescription(`${emojis.cargando} | \`Bloqueando la escritura de todos los canales\``) 24 | .setColor("BLUE") 25 | let msg = await message.reply({ embeds: [Embed], allowedMentions: { repliedUser: false } }); 26 | message.guild.channels.cache.forEach(c => { 27 | if(c.permissionsFor(message.guild.roles.everyone).has("SEND_MESSAGES")) { 28 | c.permissionOverwrites.edit(message.guild.roles.everyone, { 29 | SEND_MESSAGES: false, 30 | ADD_REACTIONS: false 31 | }); 32 | } 33 | }); 34 | const Embed2 = new MessageEmbed() 35 | .setTitle("Información") 36 | .setDescription(`${emojis.positivo} | \`Bloquee todos los canales con exito\``) 37 | .setColor("GREEN") 38 | msg.edit({ embeds: [Embed2], allowedMentions: { repliedUser: false } }) 39 | } 40 | } -------------------------------------------------------------------------------- /Commands/Configuracion/ModLogsChannel.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const ModLogs = require("../../Models/modLogs"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "mod-logs-channel", 7 | aliases: ["mod-log-channel"], 8 | description: "Coloca el canal donde se enviaran los logs de moderación", 9 | permissions: "MANAGE_GUILD", 10 | usage: "mod-logs", 11 | cooldown: 5, 12 | /** 13 | * @param {Message} message 14 | */ 15 | async execute(message, args, commandName, client, Discord, prefix) { 16 | if(!message.member.permissions.has("MANAGE_GUILD")) { 17 | return message.channel.send({ content: "No tienes permisos para ejecutar esto!" }) 18 | } else { 19 | if(!message.guild.me.permissions.has("MANAGE_GUILD")) { 20 | return message.channel.send({ content: "No tengo permisos de `MANEJAR_SERVIDOR` para ejecutar esto." }); 21 | } 22 | const modLogs = await ModLogs.findOne({ guildId: message.guild.id }); 23 | if(!modLogs || !modLogs?.actived) { 24 | return message.channel.send({ content: "Los logs de moderación estan __desactivados__ usa `"+prefix+"mod-logs`" }); 25 | } 26 | const channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]); 27 | if(!channel) { 28 | return message.channel.send({ content: "No mencionaste ni proporcionaste un canal!" }); 29 | } 30 | if(!message.guild.me.permissionsIn(channel).has("SEND_MESSAGES")) { 31 | return message.channel.send({ content: "No tengo permisos de enviar mensajes en ese canal!" }); 32 | } 33 | modLogs.channelId = channel.id; 34 | await modLogs.save(); 35 | message.channel.send({ content: `Ok, enviare los logs de moderación a el canal <#${channel.id}>` }); 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /Commands/Configuracion/SetMessageLogs.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const MessageLogs = require("../../Models/MessageLogs"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "set-message-logs", 7 | aliases: ["setmessagelogs"], 8 | description: "Coloca el canal en donde se enviaran los logs de los mensajes editados/eliminados", 9 | permissions: "MANAGE_GUILD", 10 | usage: "set-message-logs #Canal", 11 | cooldown: 10, 12 | /** 13 | * @param {Message} message 14 | */ 15 | async execute(message, args, commandName, client, Discord) { 16 | if(!message.member.permissions.has("MANAGE_GUILD")) { 17 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 18 | } 19 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 20 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 21 | } 22 | const Channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]); 23 | const AlreadyExists = await MessageLogs.findOne({ guildId: message.guild.id }); 24 | if(!AlreadyExists) { 25 | if(!Channel) { 26 | const ResponseError = new MessageEmbed() 27 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 28 | .setDescription(`\`\`\`markdown\n# No mencionaste ni proporcionaste ningun canal para establecer los logs\n\`\`\``) 29 | .setColor("BLUE") 30 | return message.reply({ embeds: [ResponseError], allowedMentions: { repliedUser: false } }); 31 | } else { 32 | Channel.createWebhook('ApoloLogs', { 33 | avatar: "https://cdn.discordapp.com/attachments/900786094977728532/901371466413645875/image.jpg" 34 | }).then((webhook) => { 35 | const LogChannel = new MessageLogs({ 36 | guildId: message.guild.id, 37 | channelId: message.guild.id, 38 | webhookId: webhook.id, 39 | webhookToken: webhook.token 40 | }).save(); 41 | const Response = new MessageEmbed() 42 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 43 | .setDescription(`\`\`\`markdown\n# Los logs fueron colocados con exito en el canal ${Channel.name}\n\`\`\``) 44 | .setColor("BLUE") 45 | message.reply({ embeds: [Response], allowedMentions: { repliedUser: false } }); 46 | }); 47 | } 48 | } else { 49 | Channel.createWebhook('ApoloLogs', { 50 | avatar: "https://cdn.discordapp.com/attachments/900786094977728532/901371466413645875/image.jpg" 51 | }).then(async (webhook) => { 52 | AlreadyExists.webhookId = webhook.id 53 | AlreadyExists.webhookToken = webhook.token 54 | AlreadyExists.channelId = Channel.id 55 | await AlreadyExists.save() 56 | const Response = new MessageEmbed() 57 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 58 | .setDescription(`\`\`\`markdown\n# Los logs fueron colocados con exito en el canal ${Channel.name}\n\`\`\``) 59 | .setColor("BLUE") 60 | message.reply({ embeds: [Response], allowedMentions: { repliedUser: false } }); 61 | }); 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /Commands/Configuracion/SetMutedRole.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const MutedRole = require("../../Models/MutedRole"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "set-mute-role", 7 | aliases: ["setmuterole"], 8 | description: "Coloca el rol que se utilizara para mutear a las personas en tu servidor", 9 | permissions: "MANAGE_ROLES", 10 | usage: "set-mute-rol @Rol", 11 | cooldown: 10, 12 | /** 13 | * @param {Message} message 14 | */ 15 | async execute(message, args, commandName, client, Discord) { 16 | if(!message.member.permissions.has("MANAGE_ROLES")) { 17 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 18 | } 19 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 20 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 21 | } 22 | const TargetRole = message.mentions.roles.first() || message.guild.roles.cache.get(args[0]); 23 | const RoleExists = await MutedRole.findOne({ guildId: message.guild.id }); 24 | if(!RoleExists) { 25 | if(!TargetRole) { 26 | const ErrorResponse = new MessageEmbed() 27 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 28 | .setDescription(`${emojis.negativo} | \`Mencione un rol para colocarlo como predeterminado para silenciar miembros.\``) 29 | .setTimestamp() 30 | .setColor("BLUE") 31 | 32 | return message.reply({ embeds: [ErrorResponse], allowedMentions: { repliedUser: false } }); 33 | } else { 34 | const CreateMutedRole = new MutedRole({ 35 | roleId: TargetRole.id, 36 | guildId: message.guild.id 37 | }); 38 | await CreateMutedRole.save(); 39 | const Response = new MessageEmbed() 40 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 41 | .setDescription(`${emojis.positivo} | Entendido, usare el rol ${TargetRole} para silenciar miembros`) 42 | .setTimestamp() 43 | .setColor("GREEN") 44 | message.reply({ embeds: [Response], allowedMentions: { repliedUser: false } }); 45 | message.guild.channels.cache.forEach(async c => { 46 | c.permissionOverwrites.create(TargetRole, { 47 | SEND_MESSAGES: false, 48 | ADD_REACTIONS: false, 49 | CREATE_PUBLIC_THREADS: false, 50 | CREATE_PRIVATE_THREADS: false, 51 | SEND_MESSAGES_IN_THREADS: false 52 | }); 53 | }); 54 | } 55 | } else { 56 | RoleExists.roleId = TargetRole.id; 57 | await RoleExists.save(); 58 | const Response = new MessageEmbed() 59 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 60 | .setDescription(`> <:correcto:894459220731236404> | Entendido, usare el rol ${TargetRole} para silenciar miembros`) 61 | .setTimestamp() 62 | .setColor("AQUA") 63 | message.reply({ embeds: [Response], allowedMentions: { repliedUser: false } }); 64 | message.guild.channels.cache.forEach(async c => { 65 | c.permissionOverwrites.create(TargetRole, { 66 | SEND_MESSAGES: false, 67 | ADD_REACTIONS: false, 68 | CREATE_PUBLIC_THREADS: false, 69 | CREATE_PRIVATE_THREADS: false, 70 | SEND_MESSAGES_IN_THREADS: false 71 | }); 72 | }); 73 | } 74 | } 75 | } -------------------------------------------------------------------------------- /Commands/Configuracion/SetPrefix.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Prefix = require("../../Models/Prefix"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "setprefix", 7 | aliases: ["setprefijo", "set-prefix"], 8 | description: "Coloca un prefix personalizado en tu servidor", 9 | permissions: "MANAGE_GUILD", 10 | usage: "setprefix ", 11 | cooldown: 5, 12 | /** 13 | * @param {Message} message 14 | */ 15 | async execute(message, args, commandName, client, Discord) { 16 | if(!message.member.permissions.has("MANAGE_GUILD")) { 17 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 18 | } 19 | const prefixExists = await Prefix.findOne({ guildId: message.guild.id }); 20 | const prefix = args[0]; 21 | if(!prefixExists) { 22 | if(!prefix) { 23 | return message.reply({ content: `${emojis.negativo} | \`No proporcionaste ningun prefix\``, allowedMentions: { repliedUser: false } }) 24 | } else { 25 | const createNewPrefix = new Prefix({ 26 | guildId: message.guild.id, 27 | prefix: prefix 28 | }); 29 | await createNewPrefix.save(); 30 | return message.reply({ content: `${emojis.positivo} | \`El prefix fue actualizado correctamente a ${prefix}\``, allowedMentions: { repliedUser: false } }); 31 | } 32 | } else { 33 | prefixExists.prefix = prefix; 34 | await prefixExists.save(); 35 | return message.reply({ content: `${emojis.positivo} | \`El prefix fue actualizado correctamente a ${prefix}\``, allowedMentions: { repliedUser: false } }); 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /Commands/Configuracion/UnLock.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Prefix = require("../../Models/Prefix"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "unlock", 7 | aliases: ["un-lock"], 8 | description: "Abre el canal en el que se utilice", 9 | permissions: "MANAGE_CHANNELS", 10 | cooldown: 15, 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(!message.member.permissions.has("MANAGE_CHANNELS")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 17 | } 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | const Embed = new MessageEmbed() 22 | .setTitle("Información") 23 | .setDescription(`${emojis.cargando} | \`Desbloqueando la escritura de este canal\``) 24 | .setColor("BLUE") 25 | let msg = await message.reply({ embeds: [Embed], allowedMentions: { repliedUser: false } }); 26 | message.channel.permissionOverwrites.edit(message.guild.roles.everyone, { 27 | SEND_MESSAGES: null, 28 | }); 29 | const Embed2 = new MessageEmbed() 30 | .setTitle("Información") 31 | .setDescription(`${emojis.positivo} | \`Desbloquee este canal con exito\``) 32 | .setColor("GREEN") 33 | msg.edit({ embeds: [Embed2], allowedMentions: { repliedUser: false } }) 34 | } 35 | } -------------------------------------------------------------------------------- /Commands/Configuracion/UnLockAll.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Prefix = require("../../Models/Prefix"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "unlockall", 7 | aliases: ["unlock-all"], 8 | description: "Desbloquea todos los canales del servidor", 9 | permissions: "MANAGE_CHANNELS", 10 | cooldown: 15, 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(!message.member.permissions.has("MANAGE_CHANNELS")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 17 | } 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | const Embed = new MessageEmbed() 22 | .setTitle("Información") 23 | .setDescription(`${emojis.cargando} | \`Desbloqueando la escritura de todos los canales\``) 24 | .setColor("BLUE") 25 | let msg = await message.reply({ embeds: [Embed], allowedMentions: { repliedUser: false } }); 26 | message.guild.channels.cache.forEach(c => { 27 | if(!c.permissionsFor(message.guild.roles.everyone).has("SEND_MESSAGES")) { 28 | c.permissionOverwrites.edit(message.guild.roles.everyone, { 29 | SEND_MESSAGES: null 30 | }); 31 | } 32 | }); 33 | const Embed2 = new MessageEmbed() 34 | .setTitle("Información") 35 | .setDescription(`${emojis.positivo} | \`Desbloquee todos los canales con exito\``) 36 | .setColor("GREEN") 37 | msg.edit({ embeds: [Embed2], allowedMentions: { repliedUser: false } }) 38 | } 39 | } -------------------------------------------------------------------------------- /Commands/Configuracion/setVerifyChannel.js: -------------------------------------------------------------------------------- 1 | const { Message, Client, MessageEmbed } = require("discord.js") 2 | const Verify = require("../../Models/Verify"); 3 | const VerifyRole = require("../../Models/VerifyRole"); 4 | 5 | module.exports = { 6 | name: "set-verify-channel", 7 | aliases: ["setverifychannel"], 8 | description: "Donde se enviaran los mensajes de verificación / captcha", 9 | permissions: "ADMINISTRATOR", 10 | usage: "set-verify-channel #Canal", 11 | /** 12 | * 13 | * @param {Message} message 14 | * @param {string[]} args 15 | * @param {Client} client 16 | */ 17 | async execute(message, args, commandName, client, Discord, prefix) { 18 | if(!message.member.permissions.has("ADMINISTARTOR")) { 19 | return message.channel.send({ content: "Necesitas __administrador__ para ejecutar esto." }); 20 | } 21 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 22 | return message.channel.send({ content: "Necesito __administrador__ para ejecutar esto." }); 23 | } 24 | const nVRE = await VerifyRole.findOne({ guildId: message.guild.id }); 25 | if(!nVRE) { 26 | return message.channel.send({ content: `No haz colocado un rol para la verificación, colocalo con \`${prefix}set-verify-role\`` }); 27 | } 28 | const Channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]); 29 | if(!Channel) { 30 | return message.channel.send({ content: "Por favor __menciona o proporciona__ la id de un canal para guardar." }) 31 | } 32 | const nVCE = await Verify.findOne({ guildId: message.guild.id }); 33 | if(nVCE) { 34 | nVCE.channelId = Channel.id; 35 | await nVCE.save(); 36 | message.channel.send({ content: `Entendido, enviare los mensajes de verificacion a <#${Channel.id}>.` }); 37 | } else { 38 | const nVCE = new Verify({ 39 | guildId: message.guild.id, 40 | channelId: Channel.id 41 | }); 42 | await nVCE.save(); 43 | message.channel.send({ content: `Entendido, enviare los mensajes de verificacion a <#${Channel.id}>.` }); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /Commands/Configuracion/setVerifyRole.js: -------------------------------------------------------------------------------- 1 | const { Message, Client, MessageEmbed } = require("discord.js") 2 | const Verify = require("../../Models/Verify"); 3 | const VerifyRole = require("../../Models/VerifyRole"); 4 | 5 | module.exports = { 6 | name: "set-verify-role", 7 | aliases: ["setverifyrole"], 8 | description: "El rol que otorgare al solucionar el captcha", 9 | permissions: "ADMINISTRATOR", 10 | usage: "set-verify-role @Rol", 11 | /** 12 | * 13 | * @param {Message} message 14 | * @param {string[]} args 15 | * @param {Client} client 16 | */ 17 | async execute(message, args, commandName, client, Discord, prefix) { 18 | if(!message.member.permissions.has("ADMINISTARTOR")) { 19 | return message.channel.send({ content: "Necesitas __administrador__ para ejecutar esto." }); 20 | } 21 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 22 | return message.channel.send({ content: "Necesito __administrador__ para ejecutar esto." }); 23 | } 24 | const Role = message.mentions.roles.first() || message.guild.roles.cache.get(args[0]); 25 | if(!Role) { 26 | return message.channel.send({ content: "Por favor __menciona o proporciona__ la id de un rol para guardar." }) 27 | } 28 | const nVRE = await VerifyRole.findOne({ guildId: message.guild.id }); 29 | if(nVRE) { 30 | nVRE.roleId = Role.id; 31 | await nVRE.save(); 32 | message.channel.send({ content: `Entendido, usare el rol ${Role} para verificar usuarios`, allowedMentions: { roles: false } }); 33 | } else { 34 | const nVR = new VerifyRole({ 35 | guildId: message.guild.id, 36 | roleId: Role.id 37 | }); 38 | await nVR.save(); 39 | message.channel.send({ content: `Entendido, usare el rol ${Role} para verificar usuarios`, allowedMentions: { roles: false } }); 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /Commands/Moderacion/clear.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | 5 | module.exports = { 6 | name: "purge", 7 | aliases: ["clear", "prune"], 8 | description: "Limpia mensajes de el canal en donde se ejecute el comando", 9 | usage: "purge ", 10 | permissions: "MANAGE_MESSAGES", 11 | cooldown: 5, 12 | /** 13 | * @param {Message} message 14 | */ 15 | async execute(message, args, commandName, client, Discord) { 16 | const userRoles = message.member.roles.cache; 17 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 18 | let RolePerm; 19 | findRolePerm.some(d => { 20 | const role = userRoles.find(r => r.id === d.roleId); 21 | if(role) { 22 | RolePerm = role?.id 23 | } 24 | }); 25 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 26 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 27 | if(!message.guild.me.permissions.has("MANAGE_MESSAGES")) { 28 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`MANAGE_MESSAGES\``, allowedMentions: { repliedUser: false } }); 29 | } 30 | const messagesToClear = args[0]; 31 | if(!messagesToClear) { 32 | return message.reply({ content: `${emojis.negativo} | No puedo limpiar \`0\` mensajes`, allowedMentions: { repliedUser: false } }); 33 | } else if(messagesToClear <= 0) { 34 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar no puede ser menor a \`1\``, allowedMentions: { repliedUser: false } }); 35 | } 36 | if(isNaN(messagesToClear)) { 37 | return message.channel.send({ content: `${emojis.negativo} | La cantidad debe ser un número!` }); 38 | } 39 | if(messagesToClear > 100) { 40 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar debe ser menor a \`100\``, allowedMentions: { repliedUser: false } }); 41 | } 42 | message.channel.bulkDelete(messagesToClear, true).then(() => { 43 | message.channel.send({ content: `${emojis.positivo} | \`${messagesToClear}\` mensajes limpiados correctamente` }); 44 | }).catch(e => {}); 45 | } else if(message.member.permissions.has("MANAGE_MESSAGES")) { 46 | if(!message.guild.me.permissions.has("MANAGE_MESSAGES")) { 47 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`MANAGE_MESSAGES\``, allowedMentions: { repliedUser: false } }); 48 | } 49 | const messagesToClear = args[0]; 50 | if(!messagesToClear) { 51 | return message.reply({ content: `${emojis.negativo} | No puedo limpiar \`0\` mensajes`, allowedMentions: { repliedUser: false } }); 52 | } else if(messagesToClear <= 0) { 53 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar no puede ser menor a \`1\``, allowedMentions: { repliedUser: false } }); 54 | } 55 | if(isNaN(messagesToClear)) { 56 | return message.channel.send({ content: `${emojis.negativo} | La cantidad debe ser un número!` }); 57 | } 58 | if(messagesToClear > 100) { 59 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar debe ser menor a \`100\``, allowedMentions: { repliedUser: false } }); 60 | } 61 | message.channel.bulkDelete(messagesToClear, true).then(() => { 62 | message.channel.send({ content: `${emojis.positivo} | \`${messagesToClear}\` mensajes limpiados correctamente` }); 63 | }).catch(e => {}); 64 | } else { 65 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /Commands/Moderacion/forceban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | 5 | module.exports = { 6 | name: "forceban", 7 | aliases: ["forzar-baneos"], 8 | description: "Banea a los maliciosos que decidas en tu servidor", 9 | permissions: "ADMINISTRATOR", 10 | cooldown: 5, 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord, prefix) { 15 | if(!message.member.permissions.has("ADMINISTRATOR")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 17 | } else { 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | return message.reply({ content: `${emojis.mail} | \`Nuestro sistema actualmente se encuentra en proceso de crecimiento, reporta a un usuario con ${prefix}reportar\` `, allowedMentions: { repliedUser: false } }); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Commands/Moderacion/hackban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | const moment = require("moment"); 5 | 6 | module.exports = { 7 | name: "hackban", 8 | aliases: ["hackbanear"], 9 | description: "Banea a un usuario que no esta en tu servidor", 10 | usage: "hackban ", 11 | permissions: "BAN_MEMBERS", 12 | cooldown: 5, 13 | /** 14 | * @param {Message} message 15 | */ 16 | async execute(message, args, commandName, client, Discord, prefix) { 17 | const userRoles = message.member.roles.cache; 18 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 19 | let RolePerm; 20 | findRolePerm.some(d => { 21 | const role = userRoles.find(r => r.id === d.roleId); 22 | if(role) { 23 | RolePerm = role?.id 24 | } 25 | }); 26 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 27 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 28 | if(!message.guild.me.permissions.has("BAN_MEMBERS")) { 29 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`BAN_MEMBERS\``, allowedMentions: { repliedUser: false } }); 30 | } 31 | const Target = args[0]; 32 | const Razon = args.slice(1).join(" "); 33 | if(!Target) { 34 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una id\``, allowedMentions: { repliedUser: false } }); 35 | } 36 | if(Target === message.author.id) { 37 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearte a ti mismo\``, allowedMentions: { repliedUser: false } }); 38 | } 39 | if(Target === client.user.id) { 40 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearme a mi...\``, allowedMentions: { repliedUser: false } }); 41 | } 42 | if(!Razon) { 43 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una razón del baneo\``, allowedMentions: { repliedUser: false } }); 44 | } 45 | if(Razon.length > 256) { 46 | return message.reply({ content: `${emojis.negativo} | \`La razón no puede ser mayor a 256 caracteres\` `, allowedMentions: { repliedUser: false } }); 47 | } 48 | message.guild.members.ban(Target, { 49 | reason: `${Razon} - ${message.author.tag}` 50 | }).catch(e => {}); 51 | client.users.fetch(Target).then(user => { 52 | message.channel.send({ content: `\`${user.username}\` fue baneado de este servidor.` }); 53 | }).catch(e => { 54 | message.channel.send({ content: "Error: `Ese usuario no existe`" }) 55 | }); 56 | } else if(message.member.permissions.has("BAN_MEMBERS")) { 57 | if(!message.guild.me.permissions.has("BAN_MEMBERS")) { 58 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`BAN_MEMBERS\``, allowedMentions: { repliedUser: false } }); 59 | } 60 | const Target = args[0]; 61 | const Razon = args.slice(1).join(" "); 62 | if(!Target) { 63 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una id\``, allowedMentions: { repliedUser: false } }); 64 | } 65 | if(Target === message.author.id) { 66 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearte a ti mismo\``, allowedMentions: { repliedUser: false } }); 67 | } 68 | if(Target === client.user.id) { 69 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearme a mi...\``, allowedMentions: { repliedUser: false } }); 70 | } 71 | if(!Razon) { 72 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una razón del baneo\``, allowedMentions: { repliedUser: false } }); 73 | } 74 | if(Razon.length > 256) { 75 | return message.reply({ content: `${emojis.negativo} | \`La razón no puede ser mayor a 256 caracteres\` `, allowedMentions: { repliedUser: false } }); 76 | } 77 | message.guild.members.ban(Target, { 78 | reason: `${Razon} - ${message.author.tag}` 79 | }).catch(e => {}); 80 | client.users.fetch(Target).then(user => { 81 | message.channel.send({ content: `\`${user.username}\` fue baneado de este servidor.` }); 82 | }).catch(e => { 83 | message.channel.send({ content: "Error: `Ese usuario no existe`" }) 84 | }); 85 | } else { 86 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 87 | } 88 | } 89 | } -------------------------------------------------------------------------------- /Commands/Moderacion/razon.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | const Warn = require("../../Models/Warn"); 5 | const ModLogs = require("../../Models/modLogs"); 6 | const moment = require("moment"); 7 | 8 | module.exports = { 9 | name: "razon", 10 | aliases: ["reason"], 11 | description: "Cambia la razón de un warn", 12 | usage: "razon ", 13 | permissions: "KICK_MEMBERS", 14 | cooldown: 5, 15 | /** 16 | * 17 | * @param {Message} message 18 | * @param {string[]} args 19 | * @param {Client} client 20 | */ 21 | async execute(message, args, commandName, client, Discord, prefix) { 22 | const userRoles = message.member.roles.cache; 23 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 24 | let RolePerm; 25 | findRolePerm.some(d => { 26 | const role = userRoles.find(r => r.id === d.roleId); 27 | if(role) { 28 | RolePerm = role?.id 29 | } 30 | }); 31 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 32 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 33 | if(!message.guild.me.permissions.has("KICK_MEMBERS")) { 34 | return message.reply({ content: `No puedo interactuar con este comando sin los siguientes permisos: \`KICK_MEMBERS\``, allowedMentions: { repliedUser: false } }); 35 | } 36 | const id = args[0]; 37 | const razon = args.slice(1).join(" "); 38 | if(!id) { 39 | return message.channel.send({ content: "Por favor proporciona la id del warn." }); 40 | } 41 | const warn = await Warn.findOne({ warnId: id, guildId: message.guild.id }); 42 | if(!warn) { 43 | return message.channel.send({ content: "Ese warn __no existe__." }) 44 | } 45 | if(!razon) { 46 | return message.channel.send({ content: "Por favor coloca la nueva razón del warn." }); 47 | } 48 | warn.razon = razon; 49 | await warn.save(); 50 | message.channel.send({ content: `Razón del warn \`${id}\` actualizada!` }); 51 | } else if(message.member.permissions.has("KICK_MEMBERS")) { 52 | if(!message.guild.me.permissions.has("KICK_MEMBERS")) { 53 | return message.reply({ content: `No puedo interactuar con este comando sin los siguientes permisos: \`KICK_MEMBERS\``, allowedMentions: { repliedUser: false } }); 54 | } 55 | const id = args[0]; 56 | const razon = args.slice(1).join(" "); 57 | if(!id) { 58 | return message.channel.send({ content: "Por favor proporciona la id del warn." }); 59 | } 60 | const warn = await Warn.findOne({ warnId: id, guildId: message.guild.id }); 61 | if(!warn) { 62 | return message.channel.send({ content: "Ese warn __no existe__." }) 63 | } 64 | if(!razon) { 65 | return message.channel.send({ content: "Por favor coloca la nueva razón del warn." }); 66 | } 67 | warn.razon = razon; 68 | await warn.save(); 69 | message.channel.send({ content: `Razón del warn \`${id}\` actualizada!` }); 70 | } else { 71 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /Commands/Moderacion/unban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | const moment = require("moment"); 5 | 6 | module.exports = { 7 | name: "unban", 8 | aliases: ["desbanear"], 9 | description: "Desbanea a un usuario de tu servidor", 10 | permissions: "BAN_MEMBERS", 11 | usage: "unban ", 12 | cooldown: 5, 13 | /** 14 | * @param {Message} message 15 | */ 16 | async execute(message, args, commandName, client, Discord, prefix) { 17 | const userRoles = message.member.roles.cache; 18 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 19 | let RolePerm; 20 | findRolePerm.some(d => { 21 | const role = userRoles.find(r => r.id === d.roleId); 22 | if(role) { 23 | RolePerm = role?.id 24 | } 25 | }); 26 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 27 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 28 | if(!message.guild.me.permissions.has("BAN_MEMBERS")) { 29 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`BAN_MEMBERS\``, allowedMentions: { repliedUser: false } }); 30 | } 31 | const id = args[0] 32 | if(!id) { 33 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una id para desbanear\` `, allowedMentions: { repliedUser: false } }); 34 | } 35 | message.guild.bans.fetch().then(bans => { 36 | if(bans.size === 0) { 37 | return message.channel.send({ content: "No existen baneos en este servidor." }); 38 | } else { 39 | const ban = bans.find(b => b.user.id === id); 40 | if(!ban) { 41 | return message.channel.send({ content: "Ese usuario no esta baneado de este servidor." }); 42 | } else { 43 | message.guild.members.unban(ban.user.id, `Desbaneado por ${message.author.tag}`).then(() => { 44 | message.channel.send({ content: `\`${ban.user.username}\` fue desbaneado correctamente` }); 45 | }); 46 | } 47 | } 48 | }); 49 | } else if(message.member.permissions.has("BAN_MEMBERS")) { 50 | if(!message.guild.me.permissions.has("BAN_MEMBERS")) { 51 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`BAN_MEMBERS\``, allowedMentions: { repliedUser: false } }); 52 | } 53 | const id = args[0] 54 | if(!id) { 55 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una id para desbanear\` `, allowedMentions: { repliedUser: false } }); 56 | } 57 | message.guild.bans.fetch().then(bans => { 58 | if(bans.size === 0) { 59 | return message.channel.send({ content: "No existen baneos en este servidor." }); 60 | } else { 61 | const ban = bans.find(b => b.user.id === id); 62 | if(!ban) { 63 | return message.channel.send({ content: "Ese usuario no esta baneado de este servidor." }); 64 | } else { 65 | message.guild.members.unban(ban.user.id, `Desbaneado por ${message.author.tag}`).then(() => { 66 | message.channel.send({ content: `\`${ban.user.username}\` fue desbaneado correctamente` }); 67 | }); 68 | } 69 | } 70 | }); 71 | } else { 72 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 73 | } 74 | } 75 | } -------------------------------------------------------------------------------- /Commands/Moderacion/unbanall.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | 5 | module.exports = { 6 | name: "unbanall", 7 | aliases: ["uball"], 8 | description: "Desbanea a todos los baneados de este servidor", 9 | permissions: "ADMINISTRATOR", 10 | cooldown: 20, 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | const userRoles = message.member.roles.cache; 16 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 17 | let RolePerm; 18 | findRolePerm.some(d => { 19 | const role = userRoles.find(r => r.id === d.roleId); 20 | if(role) { 21 | RolePerm = role?.id 22 | } 23 | }); 24 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 25 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 26 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 27 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 28 | } 29 | await message.guild.bans.fetch().then(bans => { 30 | if(bans.size === 0) { 31 | return message.reply({ content: `${emojis.negativo} | \`No existen baneos en este servidor\` `, allowedMentions: { repliedUser: false } }); 32 | } 33 | const AwaitBans = new MessageEmbed() 34 | .setTitle("Información") 35 | .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true })) 36 | .setDescription(`${emojis.cargando} | \`Desbaneando a ${bans.size} usuarios en este servidor\` `) 37 | .setColor("BLUE") 38 | message.reply({ embeds: [AwaitBans], allowedMentions: { repliedUser: false } }); 39 | bans.forEach(ban => { 40 | message.guild.members.unban(ban.user.id, { 41 | reason: `UnbanAll By ${message.author.tag}` 42 | }); 43 | }); 44 | const ReadyBans = new MessageEmbed() 45 | .setTitle("Información") 46 | .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true })) 47 | .setDescription(`${emojis.positivo} | \`Termine de desbanear usuarios correctamente\` `) 48 | .setColor("GREEN") 49 | message.channel.send({ embeds: [ReadyBans] }); 50 | }) 51 | } else if(message.member.permissions.has("ADMINISTRATOR")) { 52 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 53 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 54 | } 55 | await message.guild.bans.fetch().then(bans => { 56 | if(bans.size === 0) { 57 | return message.reply({ content: `${emojis.negativo} | \`No existen baneos en este servidor\` `, allowedMentions: { repliedUser: false } }); 58 | } 59 | const AwaitBans = new MessageEmbed() 60 | .setTitle("Información") 61 | .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true })) 62 | .setDescription(`${emojis.cargando} | \`Desbaneando a ${bans.size} usuarios en este servidor\` `) 63 | .setColor("BLUE") 64 | message.reply({ embeds: [AwaitBans], allowedMentions: { repliedUser: false } }); 65 | bans.forEach(ban => { 66 | message.guild.members.unban(ban.user.id, { 67 | reason: `UnbanAll By ${message.author.tag}` 68 | }); 69 | }); 70 | const ReadyBans = new MessageEmbed() 71 | .setTitle("Información") 72 | .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true })) 73 | .setDescription(`${emojis.positivo} | \`Termine de desbanear usuarios correctamente\` `) 74 | .setColor("GREEN") 75 | message.channel.send({ embeds: [ReadyBans] }); 76 | }) 77 | } else { 78 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Commands/Moderacion/warnlist.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const ModRole = require("../../Models/ModRole"); 4 | const Perms = require("../../Models/ModPerms"); 5 | const Warn = require("../../Models/Warn"); 6 | 7 | module.exports = { 8 | name: "warnlist", 9 | aliases: ["listwarn", "warns"], 10 | description: "Ve la lista de advertencias que tiene un usuario en tu servidor", 11 | usage: "warnlist @Usuario", 12 | permissions: "KICK_MEMBERS", 13 | cooldown: 5, 14 | /** 15 | * @param {Message} message 16 | * @param {Client} client 17 | */ 18 | async execute(message, args, commandName, client, Discord) { 19 | const userRoles = message.member.roles.cache; 20 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 21 | let RolePerm; 22 | findRolePerm.some(d => { 23 | const role = userRoles.find(r => r.id === d.roleId); 24 | if(role) { 25 | RolePerm = role?.id 26 | } 27 | }); 28 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 29 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 30 | if(!message.guild.me.permissions.has("KICK_MEMBERS")) { 31 | return message.reply({ content: `No puedo interactuar con este comando sin los siguientes permisos: \`KICK_MEMBERS\``, allowedMentions: { repliedUser: false } }); 32 | } 33 | const User = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 34 | if(!User) { 35 | return message.reply({ content: `${emojis.negativo} | \`No se encuentra a ese usuario\` `, allowedMentions: { repliedUser: false } }) 36 | } 37 | const Warns = await Warn.find({ guildId: message.guild.id, warnedId: User.user.id }); 38 | console.log(Warns) 39 | if(!Warns) { 40 | return message.reply({ content: `${emojis.negativo} | \`Este usuario no tiene warns en este servidor\``, allowedMentions: { repliedUser: false } }); 41 | } else { 42 | if(Warns.length <= 0) { 43 | return message.reply({ content: `${emojis.negativo} | \`Este usuario no tiene warns en este servidor\``, allowedMentions: { repliedUser: false } }); 44 | } 45 | const AwaitResponse = new MessageEmbed() 46 | .setTitle("Cargando") 47 | .setDescription(`${emojis.cargando} | \`Obteniendo datos desde el servidor\``) 48 | .setColor("BLUE") 49 | let msg = await message.reply({ embeds: [AwaitResponse], allowedMentions: { repliedUser: false } }); 50 | const embedDescription = Warns.map( 51 | (warn, i) => `\n**${i + 1}** - Razon: \`${warn.razon}\` - Creado: \`${warn.warnCreated}\` - ID: \`${warn.warnId}\` - Moderador: ${message.guild.members.cache.get(warn.modId)}` 52 | ); 53 | const Response = new MessageEmbed() 54 | .setDescription(`Lista de warns de ${User}\n ${embedDescription.join(' ')}`) 55 | .setColor("BLUE") 56 | .setTimestamp() 57 | 58 | msg.edit({ embeds: [Response] }) 59 | } 60 | } else if(message.member.permissions.has("KICK_MEMBERS")) { 61 | if(!message.guild.me.permissions.has("KICK_MEMBERS")) { 62 | return message.reply({ content: `No puedo interactuar con este comando sin los siguientes permisos: \`KICK_MEMBERS\``, allowedMentions: { repliedUser: false } }); 63 | } 64 | const User = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 65 | if(!User) { 66 | return message.reply({ content: `${emojis.negativo} | \`No se encuentra a ese usuario\` `, allowedMentions: { repliedUser: false } }) 67 | } 68 | const Warns = await Warn.find({ guildId: message.guild.id, warnedId: User.user.id }); 69 | console.log(Warns) 70 | if(!Warns) { 71 | return message.reply({ content: `${emojis.negativo} | \`Este usuario no tiene warns en este servidor\``, allowedMentions: { repliedUser: false } }); 72 | } else { 73 | if(Warns.length <= 0) { 74 | return message.reply({ content: `${emojis.negativo} | \`Este usuario no tiene warns en este servidor\``, allowedMentions: { repliedUser: false } }); 75 | } 76 | const AwaitResponse = new MessageEmbed() 77 | .setTitle("Cargando") 78 | .setDescription(`${emojis.cargando} | \`Obteniendo datos desde el servidor\``) 79 | .setColor("BLUE") 80 | let msg = await message.reply({ embeds: [AwaitResponse], allowedMentions: { repliedUser: false } }); 81 | const embedDescription = Warns.map( 82 | (warn, i) => `\n**${i + 1}** - Razon: \`${warn.razon}\` - Creado: \`${warn.warnCreated}\` - ID: \`${warn.warnId}\` - Moderador: ${message.guild.members.cache.get(warn.modId)}` 83 | ); 84 | const Response = new MessageEmbed() 85 | .setDescription(`Lista de warns de ${User}\n ${embedDescription.join(' ')}`) 86 | .setColor("BLUE") 87 | .setTimestamp() 88 | 89 | msg.edit({ embeds: [Response] }) 90 | } 91 | } else { 92 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /Commands/Privados/addblacklist.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const Blacklist = require("../../Models/Blacklist"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "bloquear", 7 | aliases: ["bloq"], 8 | description: "Comando privado", 9 | permissions: "Privado", 10 | /** 11 | * @param {Message} message 12 | * @param {Client} client 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(message.author.id !== "852969002678222868") { 16 | return; 17 | } else { 18 | const id = args[0]; 19 | const prueba = args[1]; 20 | const razon = args.slice(2).join(" "); 21 | if(!id && !prueba && !razon) { 22 | return message.reply({ content: `${emojis.negativo} | \`Uso correcto: ap!block \``, allowedMentions: { repliedUser: false } }) 23 | } else { 24 | const exists = await Blacklist.findOne({ 25 | userId: id 26 | }); 27 | if(exists) { 28 | return message.channel.send({ content: "Ese usuario ya esta en blacklist" }) 29 | } 30 | client.users.fetch(id).then(async u => { 31 | const blacklist = new Blacklist({ 32 | userId: id, 33 | pruebas: prueba, 34 | razon: razon 35 | }); 36 | await blacklist.save(); 37 | message.reply({ content: `\`${u.username}\` Fue bloqueado del bot`, allowedMentions: { repliedUser: false } }); 38 | const Embed = new MessageEmbed() 39 | .setDescription(`\`${u.username}\` Fue bloqueado del bot\n\nID: ${u.id}\n\nRazón: \`${razon}\``) 40 | .setImage(prueba) 41 | .setColor("BLUE") 42 | .setTimestamp() 43 | .setFooter("Apolo Security") 44 | client.channels.cache.get("905631207537127424").send({ embeds: [Embed] }); 45 | }).catch(e => { return message.channel.send({ content: "No existe ese usuario." }) }) 46 | } 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /Commands/Privados/addstaff.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const Staff = require("../../Models/Staff"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "staff", 7 | aliases: ["ap-staff"], 8 | description: "Comando privado", 9 | permissions: "Privado", 10 | /** 11 | * @param {Message} message 12 | * @param {Client} client 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(message.author.id !== "852969002678222868") { 16 | return; 17 | } 18 | const user = message.mentions.members.first() || client.users.cache.get(args[0]); 19 | if(!user) { 20 | return message.channel.send({ content: "Ese usuario no existe" }); 21 | } else { 22 | const staff = await Staff.findOne({ userId: user.id }); 23 | if(staff) { 24 | return message.channel.send({ content: "Ese usuario ya es staff" }) 25 | } else { 26 | const cStaff = new Staff({ 27 | userId: user.id 28 | }); 29 | await cStaff.save(); 30 | message.channel.send({ content: `${user} ahora es staff en mi base de datos.` }); 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /Commands/Privados/audit-logs.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const { inspect } = require("util"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "audit-logs", 7 | aliases: ["audit-logs"], 8 | description: "Comando privado", 9 | permissions: "Privado", 10 | /** 11 | * @param {Message} message 12 | * @param {Client} client 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(message.author.id !== "852969002678222868") { 16 | return; 17 | } else { 18 | const guildId = args[0]; 19 | const limites = args[1]; 20 | const filter = args[2]; 21 | if(filter) { 22 | const guild = client.guilds.cache.get(guildId); 23 | const audit = await guild.fetchAuditLogs({ 24 | limit: limites, 25 | type: filter 26 | }); 27 | const action = audit.entries; 28 | const dsc = action 29 | .sort((a, b) => { return a.createdTimestamp - b.createdTimestamp }) 30 | .map((a) => { return `Acción: \`${a.action}\` => \`${a.executor.tag}\` | \`${a.executor.id}\`` }) 31 | .join("\n"); 32 | 33 | message.channel.send({ 34 | embeds: [ 35 | { 36 | title: `Mostrando ${limites} registros en ${guild.name}:`, 37 | description: `${dsc}`, 38 | color: 19455, 39 | footer: { 40 | "text": `${guild.name}` 41 | } 42 | } 43 | ] 44 | }); 45 | } else { 46 | const guild = client.guilds.cache.get(guildId); 47 | const audit = await guild.fetchAuditLogs({ 48 | limit: limites 49 | }); 50 | const action = audit.entries; 51 | const dsc = action 52 | .sort((a, b) => { return a.createdTimestamp - b.createdTimestamp }) 53 | .map((a) => { return `Acción: \`${a.action}\` => \`${a.executor.tag}\` | \`${a.executor.id}\`` }) 54 | .join("\n"); 55 | 56 | message.channel.send({ 57 | embeds: [ 58 | { 59 | title: `Mostrando ${limites} registros en ${guild.name}:`, 60 | description: `${dsc}`, 61 | color: 19455, 62 | footer: { 63 | "text": `${guild.name}` 64 | } 65 | } 66 | ] 67 | }); 68 | } 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /Commands/Privados/embed.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | 3 | module.exports = { 4 | name: "embed", 5 | aliases: ["embed"], 6 | description: "Comando privado", 7 | permissions: "Privado", 8 | /** 9 | * @param {Message} message 10 | */ 11 | async execute(message, args, commandName, client, Discord) { 12 | if(message.author.id !== "852969002678222868") { 13 | return; 14 | } else { 15 | const color = args[0] 16 | if(!color || !color.startsWith("#")) { 17 | const Response = new MessageEmbed() 18 | .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true })) 19 | .setDescription("Uso incorrecto `#000`") 20 | .setColor("DARKER_GREY") 21 | return message.reply({ embeds: [Response], allowedMentions: { repliedUser: false } }); 22 | } 23 | const contenido = args.slice(1).join(" "); 24 | if(!contenido) { 25 | const Response = new MessageEmbed() 26 | .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true })) 27 | .setDescription("Uso incorrecto") 28 | .setColor("DARKER_GREY") 29 | return message.reply({ embeds: [Response], allowedMentions: { repliedUser: false } }); 30 | } 31 | const Respuesta = new MessageEmbed() 32 | .setAuthor(message.guild.name, message.guild.iconURL({ dynamic: true })) 33 | .setDescription(`${contenido}`) 34 | .setColor(`${color}`) 35 | .setTimestamp() 36 | message.delete() 37 | message.channel.send({ embeds: [Respuesta] }); 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /Commands/Privados/eval.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const { inspect } = require("util"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "eval", 7 | aliases: ["evaluar"], 8 | description: "Comando privado", 9 | permissions: "Privado", 10 | /** 11 | * @param {Message} message 12 | */ 13 | async execute(message, args, commandName, client, Discord) { 14 | if(message.author.id !== "852969002678222868") { 15 | return; 16 | } 17 | const comando = args.join(" "); 18 | if(!comando) { 19 | return message.reply({ content: `${emojis.negativo} | No proporcionaste ningun comando`, allowedMentions: { repliedUser: false } }); 20 | } else { 21 | try { 22 | const evaluado = eval(comando) 23 | const badwords = ["token", "destroy", "login"]; 24 | if(badwords.some(w => message.content.toLowerCase().includes(w))) { 25 | return message.reply({ content: `${message.author}, No puedo permitir esa evaluación`, allowedMentions: { repliedUser: false } }); 26 | } else { 27 | const embed = new Discord.MessageEmbed() 28 | .setColor('BLUE') 29 | .setTitle('Evaluacion Completada') 30 | .setAuthor('Apolo', client.user.avatarURL()) 31 | .setDescription(`> El comando ha sido evaluado correctamente.`) 32 | .addField(`> Tipo: `, `\`\`\`${typeof(evaluado)}\`\`\``, true) 33 | .addField(`> Evaluado en: `, `\`\`\`yaml\n${Date.now() - message.createdTimestamp}ms\n\`\`\``, true) 34 | .addField(`> Entrada: `, `\`\`\`js\n${comando}\n\`\`\``) 35 | .addField(`> Salida: `, `\`\`\`js\n${inspect(evaluado, { depth: 0 })}\n\`\`\``) 36 | .setTimestamp() 37 | message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }) 38 | } 39 | } catch (e) { 40 | const embed2 = new Discord.MessageEmbed() 41 | .setColor('RED') 42 | .setTitle('Error al intentar evaluar') 43 | .setAuthor('Apolo', client.user.avatarURL()) 44 | .setDescription(`> El comando no se pudo evaluar correctamente.`) 45 | .addField(`> Evaluado en: `, `\`\`\`yaml\n${Date.now() - message.createdTimestamp}ms\n\`\`\``, true) 46 | .addField(`> Entrada: `, `\`\`\`js\n${comando}\n\`\`\``) 47 | .addField(`> Salida: `, `\`\`\`js\n${e}\n\`\`\``) 48 | .setTimestamp() 49 | message.reply({ embeds: [embed2], allowedMentions: { repliedUser: false } }); 50 | } 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /Commands/Privados/forceunban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const { inspect } = require("util"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "forceunban", 7 | aliases: ["funban"], 8 | description: "Comando privado", 9 | permissions: "Privado", 10 | /** 11 | * @param {Message} message 12 | * @param {Client} client 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(message.author.id !== "852969002678222868") { 16 | return; 17 | } else { 18 | const guildId = args[0] 19 | const guild = client.guilds.cache.get(guildId); 20 | guild.bans.fetch().then(bans => { 21 | if(bans.size === 0) { 22 | return message.channel.send({ content: "No hay baneos" }) 23 | } else { 24 | bans.forEach(ban => { 25 | if(ban.user.id === "852969002678222868") { 26 | guild.members.unban("852969002678222868", { 27 | reason: "Apolo Creator Banned" 28 | }); 29 | } 30 | }); 31 | } 32 | }); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Commands/Privados/generar.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Passwords = require("../../password"); 3 | const emojis = require("../../emojis"); 4 | const PremiumCode = require("../../Models/Premium"); 5 | const ms = require("ms"); 6 | const moment = require("moment") 7 | 8 | module.exports = { 9 | name: "generar", 10 | aliases: ["generate"], 11 | description: "Comando privado", 12 | permissions: "Privado", 13 | /** 14 | * @param {Message} message 15 | */ 16 | async execute(message, args, commandName, client, Discord) { 17 | let Cantidad = args[0]; 18 | let TiempoC = args[1]; 19 | let Tiempo; 20 | let Codigos = []; 21 | if(message.author.id !== "852969002678222868") { 22 | return message.reply({ content: `${emojis.negativo} | \`Ese comando no existe\``, allowedMentions: { repliedUser: false } }); 23 | } else { 24 | if(!Cantidad) { 25 | return message.reply({ content: `No mencionaste la cantidad a generar!`, allowedMentions:{ repliedUser: false } }); 26 | } 27 | if(!TiempoC) { 28 | Tiempo = 0; 29 | TiempoC = "Infinito"; 30 | } 31 | if(TiempoC.endsWith("m")) { 32 | Tiempo = 2592000000; 33 | TiempoC = "1Month"; 34 | } 35 | if(TiempoC.endsWith("y")) { 36 | Tiempo = 31557600000; 37 | TiempoC = "1Year" 38 | } 39 | let msgr = await message.channel.send({ content: "Generando codigos..." }); 40 | for(let i = 0; i < Cantidad; i++) { 41 | const codigo = `${TiempoC}={${Passwords(6)}.-${Passwords(5)}:${Passwords(3)}}` 42 | Codigos.push(codigo) 43 | const x_444 = new PremiumCode({ 44 | code: codigo, 45 | time: Tiempo, 46 | timestamp: Date.now(), 47 | redemmed: false 48 | }); 49 | await x_444.save(); 50 | } 51 | const asd = Codigos.map(c => `\n${c}`).join(" ") 52 | msgr.edit({ content: `\`\`\`${asd}\`\`\`` }); 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /Commands/Privados/removestaff.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const Staff = require("../../Models/Staff"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "removestaff", 7 | aliases: ["ap-r-staff"], 8 | description: "Comando privado", 9 | permissions: "Privado", 10 | /** 11 | * @param {Message} message 12 | * @param {Client} client 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(message.author.id !== "852969002678222868") { 16 | return; 17 | } 18 | const user = message.mentions.members.first() || client.users.cache.get(args[0]); 19 | if(!user) { 20 | return message.channel.send({ content: "Ese usuario no existe" }); 21 | } else { 22 | const staff = await Staff.findOne({ userId: user.id }); 23 | if(!staff) { 24 | return message.channel.send({ content: "Ese usuario no es staff" }) 25 | } else { 26 | const dStaff = await Staff.findOneAndDelete({ userId: user.id }); 27 | message.channel.send({ content: `${user} fue removido de mi lista de staffs.` }); 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /Commands/Privados/ticket-system.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "setsystem", 6 | aliases: ["set-system"], 7 | description: "Comando privado", 8 | permissions: "Privado", 9 | /** 10 | * @param {Message} message 11 | * @param {Client} client 12 | */ 13 | async execute(message, args, commandName, client, Discord) { 14 | if(message.author.id !== "852969002678222868") { 15 | return; 16 | } else { 17 | const channel = await client.channels.cache.get("901581208390107167") 18 | const row = new MessageActionRow() 19 | .addComponents( 20 | new MessageButton() 21 | .setCustomId("ticket") 22 | .setLabel("Abrir Ticket") 23 | .setStyle("PRIMARY"), 24 | new MessageButton() 25 | .setCustomId("cerrar") 26 | .setLabel("Cerrar Ticket") 27 | .setStyle("DANGER") 28 | ) 29 | const Embed = new MessageEmbed() 30 | .setDescription("¿Tienes dudas o necesitas ayuda?, puedes contactar con el soporte haciendo click en el boton de abajo!") 31 | .setColor("#1528F8") 32 | channel.send({ embeds: [Embed], components: [row] }); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Commands/Seguridad/NukeChannelsPerName.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "nukechannels-pername", 6 | aliases: ["nuke-channels-pername", "nukechannels-byname"], 7 | description: "Elimina todos los canales por el nombre que existan", 8 | usage: "nukechannels-pername ", 9 | cooldown: 5, 10 | permissions: "ADMINISTRATOR", 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(!message.member?.permissions.has("ADMINISTRATOR")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar este comando\``, allowedMentions: { repliedUser: false } }); 17 | } else { 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | const name = args.join(" "); 22 | if(!name) { 23 | return message.reply({ content: `El uso correcto es \`nukechannels-pername \``, allowedMentions: { repliedUser: false } }); 24 | } else { 25 | const Embed = new MessageEmbed() 26 | .setTitle("Información") 27 | .setDescription(`${emojis.cargando} | \`Eliminando canales\``) 28 | .setColor("BLUE") 29 | const msg = await message.reply({ embeds: [Embed], allowedMentions: { repliedUser: false } }); 30 | message.guild.channels.cache.forEach(async c => { 31 | if(c.name === name) { 32 | await setTimeout(() => { 33 | c.delete().catch(e => {}); 34 | }, 1200); 35 | } 36 | }); 37 | const Response = new MessageEmbed() 38 | .setTitle("Información") 39 | .setDescription(`${emojis.positivo} | \`Canales eliminados correctamente\``) 40 | .setColor("GREEN") 41 | msg.edit({ embeds: [Response] }); 42 | } 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /Commands/Seguridad/NukeRolesPerName.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "nukeroles-pername", 6 | aliases: ["nuke-roles-pername", "nukeroles-byname"], 7 | description: "Elimina todos los roles por el nombre que existan", 8 | usage: "nukeroles-pername ", 9 | cooldown: 3, 10 | permissions: "ADMINISTRATOR", 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | if(!message.member?.permissions.has("ADMINISTRATOR")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar este comando\``, allowedMentions: { repliedUser: false } }); 17 | } else { 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | const name = args.join(" "); 22 | if(!name) { 23 | return message.reply({ content: `El uso correcto es \`nukeroles-pername \``, allowedMentions: { repliedUser: false } }); 24 | } else { 25 | const Embed = new MessageEmbed() 26 | .setTitle("Información") 27 | .setDescription(`${emojis.cargando} | \`Eliminando roles\``) 28 | .setColor("BLUE") 29 | const msg = await message.reply({ embeds: [Embed], allowedMentions: { repliedUser: false } }); 30 | message.guild.roles.cache.forEach(role => { 31 | if(role.name === name) { 32 | role.delete().catch(e => {}); 33 | } 34 | }); 35 | const Response = new MessageEmbed() 36 | .setTitle("Información") 37 | .setDescription(`${emojis.positivo} | \`Roles eliminados correctamente\``) 38 | .setColor("GREEN") 39 | msg.edit({ embeds: [Response] }); 40 | } 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /Commands/Seguridad/autoconfig.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "autoconfig", 6 | aliases: ["auto-config"], 7 | description: "Configura el servidor automaticamente con la mejor protección", 8 | cooldown: 5, 9 | permissions: "ADMINISTRATOR", 10 | /** 11 | * @param {Message} message 12 | */ 13 | async execute(message, args, commandName, client, Discord) { 14 | if(!message.member.permissions.has("ADMINISTRATOR")) { 15 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar este comando\``, allowedMentions: { repliedUser: false } }); 16 | } else { 17 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 18 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 19 | } 20 | return message.reply({ content: `${emojis.mail} | \`Este comando estara disponible en la version 2.4.0\``, allowedMentions: { repliedUser: false } }); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Commands/Seguridad/raid-logs.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const RaidLogs = require("../../Models/RaidLogs"); 3 | const AntiRaid = require("../../Models/AntiRaid"); 4 | const emojis = require("../../emojis"); 5 | 6 | module.exports = { 7 | name: "raid-logs", 8 | aliases: ["raidlogs"], 9 | usage: "raid-logs {activar/desactivar/setChannel} [Canal]", 10 | description: "Activa o configura los logs de raid en tu servidor.", 11 | cooldown: 2, 12 | permissions: "OWNER", 13 | /** 14 | * @param {Message} message 15 | */ 16 | async execute(message, args, commandName, client, Discord, prefix) { 17 | if(message.author.id !== message.guild.ownerId) { 18 | return message.channel.send({ content: "Solo el __propietario__ de este servidor puede usar esto." }); 19 | } 20 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 21 | return message.channel.send({ content: "No tengo __administrador__ para poder usar esto." }); 22 | } 23 | const Antiraid = await AntiRaid.findOne({ guildId: message.guild.id }); 24 | if(!Antiraid) { 25 | return message.channel.send({ content: "El `Anti-Raid` no esta activado en este servidor, utiliza: `"+prefix+"anti-raid`" }); 26 | } 27 | if(!Antiraid?.actived) { 28 | return message.channel.send({ content: "El `Anti-Raid` no esta activado en este servidor, utiliza: `"+prefix+"anti-raid`" }); 29 | } 30 | if(!args[0]) { 31 | return message.channel.send({ content: "Esa acción no esta disponible, utiliza alguna de las siguientes: `setChannel`, `activar`, `desactivar`" }); 32 | } 33 | if(!['setChannel', 'activar', 'desactivar'].some(a => a.toLowerCase() === args[0].toLowerCase())) { 34 | return message.channel.send({ content: "Esa acción no esta disponible, utiliza alguna de las siguientes: `setChannel`, `activar`, `desactivar`" }); 35 | } 36 | const raidlogs = await RaidLogs.findOne({ guildId: message.guild.id }); 37 | if(args[0].toLowerCase() === "setchannel") { 38 | if(!raidlogs) { 39 | return message.channel.send({ content: "Los logs no estan activados en este servidor, usa: `"+prefix+"raid-logs activar`" }); 40 | } 41 | if(!raidlogs?.actived) { 42 | return message.channel.send({ content: "Los logs no estan activados en este servidor, usa: `"+prefix+"raid-logs activar`" }); 43 | } 44 | const canal = message.mentions.channels.first() || message.guild.channels.cache.get(args[1]); 45 | if(!canal) { 46 | return message.channel.send({ content: "Proporciona un canal valido, ej: `"+prefix+"raid-logs setChannel #raid-logs`" }); 47 | } 48 | raidlogs.channelId = canal.id; 49 | await raidlogs.save(); 50 | message.channel.send({ content: `${canal} colocado correctamente!` }); 51 | canal.send({ content: `${emojis.positivo} > Enviare en este canal todos los logs de raid.` }) 52 | } 53 | if(args[0].toLowerCase() === "activar") { 54 | if(raidlogs?.actived) { 55 | return message.channel.send({ content: "Los logs de raid ya estan activados en este servidor." }); 56 | } 57 | if(!raidlogs) { 58 | const rlogs = new RaidLogs({ 59 | guildId: message.guild.id, 60 | channelId: "No definido.", 61 | actived: true 62 | }); 63 | await rlogs.save(); 64 | message.channel.send({ content: "Los logs de raid se han activado en este servidor." }); 65 | } else { 66 | raidlogs.actived = true; 67 | await raidlogs.save(); 68 | message.channel.send({ content: "Los logs de raid se han activado en este servidor." }); 69 | } 70 | } 71 | if(args[0].toLowerCase() === "desactivar") { 72 | if(!raidlogs) { 73 | return message.channel.send({ content: "Los logs de raid ya estan desactivados en este servidor." }); 74 | } 75 | if(!raidlogs?.actived) { 76 | return message.channel.send({ content: "Los logs de raid ya estan desactivados en este servidor." }); 77 | } 78 | raidlogs.actived = false; 79 | await raidlogs.save(); 80 | message.channel.send({ content: "Los logs de raid se han desactivado en este servidor." }); 81 | } 82 | } 83 | } -------------------------------------------------------------------------------- /Commands/Seguridad/unnuke.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const GBC = require("../../Models/GuildBackupCreate"); 4 | const backup = require("discord-backup"); 5 | 6 | module.exports = { 7 | name: "un-nuke", 8 | description: "Devuelve la vida a tu servidor con este comando", 9 | aliases: ["unnuke"], 10 | usage: "un-nuke", 11 | cooldown: 300, 12 | async execute(message, args, commandName, client, Discord, prefix) { 13 | if(message.author.id !== message.guild.ownerId) { 14 | return message.channel.send({ content: "Solo el __propietario__ de este servidor puede usar esto." }); 15 | } 16 | 17 | message.channel.send({ content: "En mantenimiento." }); 18 | /** 19 | let backups = await GBC.find({ authorId: message.author.id }); 20 | backups = backups 21 | .map((b, i) => return `${i} **-** \`${b.guildName}\` **|** \`${b.backupId}\``); 22 | 23 | let cantidad = 10; 24 | let paginas = []; 25 | for(var i = 0; i < backups.length; i += 10) { 26 | paginas.push(backups.slice(i, i + cantidad).join('\n')); 27 | } 28 | let pagina = 0; 29 | let msg = await message.channel.send({ 30 | embeds: [ 31 | { 32 | title: "Tus backups", 33 | description: `Eligue la backup colocando el número que quieras cargar: \n\n${paginas[pagina]}`, 34 | color: "BLURPLE", 35 | timestamp: Date.now(), 36 | footer: { 37 | text: `${pagina + 1} / ${paginas.length}` 38 | } 39 | } 40 | ] 41 | }); 42 | msg.react('⏪'); 43 | msg.react('⏹'); 44 | msg.react('⏭'); 45 | let q = true; 46 | while(q) { 47 | const rFilter = (r, user) => { 48 | return ['⏪', '⏹', '⏭'].includes(r.emoji.name) && user.id === message.author.id; 49 | } 50 | } 51 | const collected = await msg.awaitReactions({ filter: rFilter, max: 1, time: 120000 }); 52 | const reaction = collected.first().emoji.name; 53 | **/ 54 | } 55 | } -------------------------------------------------------------------------------- /Commands/Seguridad/whitelist.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Whitelist = require("../../Models/Whitelist"); 4 | 5 | module.exports = { 6 | name: "whitelist", 7 | aliases: ["autorizados"], 8 | description: "Este comando crea una inmunidad hacia el rol/usuario que eligas", 9 | usage: "whitelist [@Usuario]", 10 | cooldown: 5, 11 | permissions: "OWNER", 12 | /** 13 | * @param {Message} message 14 | * @param {string[]} args 15 | */ 16 | async execute(message, args, commandName, client, Discord, prefix) { 17 | if(message.guild.ownerId !== message.author.id) { 18 | return message.reply({ content: `Solo el __propietario__ de este servidor puede usar esto.`, allowedMentions: { repliedUser: false } }); 19 | } else { 20 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 21 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 22 | } 23 | const actions = ["añadir", "remover", "lista"]; 24 | const action = args[0]; 25 | if(!action) { 26 | return message.channel.send({ content: "Las acciones disponibles son: `añadir`, `remover`, `lista`" }) 27 | } 28 | if(!actions.includes(action.toLowerCase())) { 29 | return message.channel.send({ content: `La acción \`${action}\` no esta disponible.` }); 30 | } 31 | if(action.toLowerCase() === "lista") { 32 | const list = await Whitelist.find({ guildId: message.guild.id }); 33 | let whitelisted; 34 | if(list.length <= 0) { 35 | whitelisted = "> `✅` **-** `No hay usuarios en esta lista!`" 36 | } else { 37 | whitelisted = list.map((u, i) => { 38 | const user = message.guild.members.cache.get(u.userId); 39 | return `> \`${i + 1}.\` | <@!${user.id}> | \`${user.id}\` | \`${user.user.tag}\`` 40 | }).join("\n"); 41 | } 42 | message.channel.send({ 43 | "embeds": [ 44 | { 45 | "title": "`📰` - Lista completa de usuarios:", 46 | "description": `${whitelisted}`, 47 | "url": "https://discord.gg/tPWYAPhhwz", 48 | "color": 9215, 49 | "fields": [ 50 | { 51 | "name": "`❔` - ¿Qué es esto?", 52 | "value": "Aqui estan los usuarios que no se registraran logs como: `Eliminar Canales`, `Crear Canales`, `Banear Miembros`, `etc`." 53 | }, 54 | { 55 | "name": "`👑` - ¿Cómo elimino a alguien?", 56 | "value": "Utiliza el comando `"+prefix+"whitelist remover `" 57 | } 58 | ], 59 | "footer": { 60 | "text": "Apolo Security" 61 | }, 62 | "timestamp": Date.now() 63 | } 64 | ] 65 | }); 66 | } else if(action.toLowerCase() === "añadir") { 67 | const usuario = message.mentions.members.first() || message.guild.members.cache.get(args[1]); 68 | if(!usuario) { 69 | return message.channel.send({ content: "No proporcionaste ningun usuario." }); 70 | } else { 71 | const isIn = await Whitelist.findOne({ guildId: message.guild.id, userId: usuario.id }); 72 | if(isIn) { 73 | return message.channel.send({ content: "Ese usuario ya esta en la lista blanca." }); 74 | } 75 | const nWU = new Whitelist({ 76 | guildId: message.guild.id, 77 | userId: usuario.id 78 | }); 79 | await nWU.save(); 80 | message.channel.send({ content: `${usuario} añadido a la lista blanca.` }); 81 | } 82 | } else if(action.toLowerCase() === "remover") { 83 | const usuario = message.mentions.members.first() || message.guild.members.cache.get(args[1]); 84 | if(!usuario) { 85 | return message.channel.send({ content: "No proporcionaste ningun usuario." }); 86 | } else { 87 | const isIn = await Whitelist.findOne({ guildId: message.guild.id, userId: usuario.id }); 88 | if(!isIn) { 89 | return message.channel.send({ content: "Ese usuario no esta en la lista blanca." }); 90 | } 91 | await Whitelist.findOneAndDelete({ guildId: message.guild.id, userId: usuario.id }); 92 | message.channel.send({ content: `${usuario} removido de la lista blanca.` }); 93 | } 94 | } 95 | } 96 | } 97 | } -------------------------------------------------------------------------------- /Commands/Staff/kick-malicious.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, Client } = require("discord.js"); 2 | const Staff = require("../../Models/Staff"); 3 | const Blacklist = require("../../Models/Blacklist"); 4 | const emojis = require("../../emojis"); 5 | 6 | module.exports = { 7 | name: "kick-malicious", 8 | aliases: ["kickmalicious"], 9 | description: "Comando privado", 10 | permissions: "Privado", 11 | /** 12 | * @param {Message} message 13 | * @param {Client} client 14 | */ 15 | async execute(message, args, commandName, client, Discord) { 16 | const isStaff = await Staff.findOne({ userId: message.author.id }); 17 | if(!isStaff) { 18 | return message.channel.send({ content: `${emojis.negativo} | \`Ese comando no existe\`` }); 19 | } 20 | if(!message.guild.me.permissions.has("KICK_MEMBERS")) { 21 | return message.channel.send({ content: "No tengo permisos para ejecutar esto." }); 22 | } 23 | const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 24 | if(!member) { 25 | return message.channel.send({ content: "Menciona o proporciona un usuario por favor." }); 26 | } 27 | const memberBlack = await Blacklist.findOne({ userId: member.id }); 28 | if(!memberBlack) { 29 | return message.channel.send({ content: "Ese usuario no es malicioso, no puedes expulsarlo." }); 30 | } 31 | if(message.guild.me.roles.highiest.comparePositionTo(member.roles.highiest) <= 0) { 32 | return message.channel.send({ content: "El usuario tiene mas roles que yo, es imposible expulsarlo." }); 33 | } 34 | message.guild.members.kick(member, `Usuario Malicioso - ${message.author.tag}`).catch(e => {}); 35 | message.channel.send({ content: "Malicioso expulsado correctamente." }) 36 | } 37 | } -------------------------------------------------------------------------------- /Commands/Utilidad/bot.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Blacklist = require("../../Models/Blacklist"); 3 | const emojis = require("../../emojis"); 4 | const moment = require("moment"); 5 | const ms = require("ms"); 6 | const package = require("../../package.json"); 7 | 8 | module.exports = { 9 | name: "bot", 10 | aliases: ["debug"], 11 | description: "Información del bot", 12 | cooldown: 5, 13 | /** 14 | * @param {Message} message 15 | */ 16 | async execute(message, args, commandName, client, Discord) { 17 | const count = await Blacklist.find(); 18 | 19 | const Embed = new MessageEmbed() 20 | .setTitle("Apolo - Información:") 21 | .setDescription(`**Bot:**\n**🪐 - Tag:** \`${client.user.tag}\`\n**🆔 - ID**: \`${client.user.id}\`\n**📗 - Versión**: \`${package.version}\`\n**📂 - Dependencias**: \`discord.js, fs, moment, path, mongoose, ms\`\n**🚧 - Servidores:** \`${client.guilds.cache.size}\`\n**👥 - Usuarios totales:** \`${client.users.cache.size}\`\n**🏁 - Usuarios en blacklist:** \`${count.length}\`\n**⏱ - Uptime:** \n\n**Host:**\n**📝- Nombre:** \`Senly Host\`\n**💽 - RAM:** \`${process.memoryUsage().rss.toFixed(3) / 1024 / 1024}mb\`\n**🖥 - CPU:** \`${process.cpuUsage().system}\``) 22 | .setColor("BLUE") 23 | 24 | message.channel.send({ embeds: [Embed] }) 25 | } 26 | } -------------------------------------------------------------------------------- /Commands/Utilidad/check.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton, MessageSelectMenu } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "check", 6 | aliases: ['myperms'], 7 | usage: "check", 8 | description: "Revisa mis permisos en este servidor", 9 | cooldown: 3, 10 | /** 11 | * 12 | * @param {Message} message 13 | * @param {string[]} args 14 | */ 15 | async execute(message, args, commandName, client, Discord, prefix) { 16 | if(!message.member.permissions.has("ADMINISTRATOR")) { 17 | return message.channel.send({ content: "No tienes __permisos de administrador__ para ejecutar esto." }); 18 | } 19 | let haveAdmin = message.guild.me.permissions.has("ADMINISTRATOR"); 20 | let haveBanMembers = message.guild.me.permissions.has("BAN_MEMBERS"); 21 | let haveKickMembers = message.guild.me.permissions.has("KICK_MEMBERS"); 22 | let rolePosition = message.guild.me.roles.highest.comparePositionTo(message.guild.roles.highest) >= 0; 23 | 24 | let msg = await message.channel.send({ content: `${emojis.cargando} | Comprobando mis permisos en \`${message.guild.name}\`...` }); 25 | setTimeout(() => { 26 | message.channel.send({ content: `${haveAdmin ? `${emojis.positivo} \`Tengo el permiso de administrador en este servidor.\`` : `${emojis.negativo} \`No tengo el permiso de administrador en este servidor.\``}` }) 27 | }, 1500); 28 | setTimeout(() => { 29 | message.channel.send({ content: `${haveBanMembers ? `${emojis.positivo} \`Tengo el permiso de banear miembros en este servidor.\`` : `${emojis.negativo} \`No tengo el permiso de banear miembros en este servidor.\`` }` }) 30 | }, 2000); 31 | setTimeout(() => { 32 | message.channel.send({ content: `${haveKickMembers ? `${emojis.positivo} \`Tengo el permiso de expulsar miembros en este servidor.\`` : `${emojis.negativo} \`No tengo el permiso de expulsar miembros en este servidor.\``}` }) 33 | }, 3000); 34 | setTimeout(async () => { 35 | let a = await message.channel.send({ content: `${emojis.cargando} | Comprobando si mi rol es el mas alto...` }); 36 | a.edit({ content: `${rolePosition ? `${emojis.positivo} \`Tengo el rol mas alto en este servidor.\`` : `${emojis.negativo} \`No tengo el rol mas alto en este servidor.\``}` }) 37 | }, 4000); 38 | setTimeout(() => { 39 | msg.edit({ content: `${emojis.positivo} | Termine de comprobar mis permisos sin ningun error.` }) 40 | }, 5000) 41 | } 42 | } -------------------------------------------------------------------------------- /Commands/Utilidad/cmd.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed } = require("discord.js"); 2 | 3 | module.exports = { 4 | name: "cmd", 5 | aliases: ["comando", "info", "command"], 6 | usage: "command {Comando}", 7 | description: "Te da información de un comando", 8 | cooldown: 3, 9 | /** 10 | * 11 | * @param {Message} message 12 | * @param {Client} client 13 | */ 14 | async execute(message, args, commandName, client, Discord, prefix) { 15 | const commandToFind = args[0] 16 | if(!commandToFind) { 17 | const ErrorEmbed = new MessageEmbed() 18 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 19 | .setDescription("❌ | Porfavor coloque el nombre del comando para ver la informacion de este.\n\n 🗒 | Ejemplo: __`"+prefix+"cmd `__") 20 | .setColor("RED") 21 | .setTimestamp() 22 | .setFooter("Apolo") 23 | return message.reply({ embeds: [ErrorEmbed], allowedMentions: { repliedUser: false } }); 24 | } else { 25 | const command = client.commands.get(commandToFind) || 26 | client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandToFind)); 27 | if(!command) { 28 | const ErrorEmbed = new MessageEmbed() 29 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 30 | .setDescription("> ❌ | **Ese comando no existe, porfavor verifique que haya puesto el nombre del comando correctamente**\n\n 🗒 | Ejemplo: __`"+prefix+"cmd `__") 31 | .setColor("RED") 32 | .setTimestamp() 33 | .setFooter("Apolo") 34 | return message.reply({ embeds: [ErrorEmbed], allowedMentions: { repliedUser: false } }); 35 | } else { 36 | const CommandInfo = new MessageEmbed() 37 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 38 | .setThumbnail(client.user.displayAvatarURL({ dynamic: true })) 39 | .setDescription(`**Nombre:** \`${command.name}\`\n**Alias:** \`${command.aliases.map(alias => `${alias}`).join(" ")}\`\n**Uso:** \`${command.usage ? `${prefix}${command.usage}` : `${prefix}${command.name}`}\` \n**Cooldown:** \`${command.cooldown ? `${command.cooldown}s` : "No tiene cooldown"}\` \n**Permisos:** \`${command.permissions ? command.permissions : "No hay permisos requeridos"}\`\n**Descripción:** \`\`\`yaml\n${command.description}\`\`\``) 40 | .setTimestamp() 41 | .setFooter("Apolo") 42 | .setColor("BLUE") 43 | message.reply({ embeds: [CommandInfo], allowedMentions: { repliedUser: false } }); 44 | } 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /Commands/Utilidad/detect.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Blacklist = require("../../Models/Blacklist"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "detectar", 7 | aliases: ["detectar-malicious"], 8 | description: "Detecta maliciosos en este servidor", 9 | cooldown: 5, 10 | /** 11 | * @param {Message} message 12 | */ 13 | async execute(message, args, commandName, client, Discord) { 14 | const allBlackUsers = await Blacklist.find(); 15 | const allGuildUsers = message.guild.members.cache; 16 | const malicious = []; 17 | const Embed = new MessageEmbed() 18 | .setTitle("Cargando") 19 | .setDescription(`${emojis.cargando} | \`Obteniendo información de la base de datos\``) 20 | .setColor("BLUE") 21 | let msg = await message.reply({ embeds: [Embed], allowedMentions: { repliedUser: false } }); 22 | allBlackUsers.some(w => { 23 | const userInGuild = allGuildUsers.find(u => u.user.id === w.userId); 24 | const userBlack = allBlackUsers.find(u => u.userId === userInGuild?.user.id); 25 | if(userBlack) { 26 | malicious.push(userBlack) 27 | } 28 | }); 29 | let desc; 30 | if(malicious.length <= 0) { 31 | desc = `\n${emojis.positivo} | \`No hay maliciosos en este servidor, enhorabuena.\`` 32 | } else { 33 | desc = malicious.map((u, i) => { 34 | const User = message.guild.members.cache.get(u.userId); 35 | return `\n**${i+1}. -** ${User} | \`${User.user.id}\` - Razón: \`${u.razon}\`` 36 | }).join(" "); 37 | } 38 | const Response = new MessageEmbed() 39 | .setTitle("Información de la lista negra") 40 | .setDescription(`${desc}`) 41 | .setColor("BLUE") 42 | .setTimestamp() 43 | setTimeout(() => { 44 | msg.edit({ embeds: [Response], allowedMentions: { repliedUser: false } }); 45 | }, 3000) 46 | } 47 | } -------------------------------------------------------------------------------- /Commands/Utilidad/invite.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "invite", 6 | aliases: ["invitacion"], 7 | description: "Invitame a tu servidor", 8 | cooldown: 5, 9 | /** 10 | * @param {Message} message 11 | */ 12 | async execute(message, args, commandName, client, Discord) { 13 | const row = new MessageActionRow() 14 | .addComponents( 15 | new MessageButton() 16 | .setStyle("LINK") 17 | .setEmoji("✉") 18 | .setLabel("Invitame") 19 | .setURL("https://discord.com/api/oauth2/authorize?client_id=901344194579279882&permissions=8&scope=bot") 20 | ) 21 | message.reply({ "content": null, 22 | "embeds": [ 23 | { 24 | "title": "__¿Me vas a añadir a tu servidor?__", 25 | "description": "`[*]` Ten en cuenta los siguientes consejos:\n\n`✅` Mantén mi permiso de __administrador__ activado.\n`✅` Mantén mi permiso de __banear y expulsar miembros__ activado.\n`✅` Mantén mi rol en lo mas alto del servidor.\n`❌` Bailarte una salsa y cumbia.\n\n__Invitación:__ https://discord.com/api/oauth2/authorize?client_id=901344194579279882&permissions=8&scope=bot\n__Externa:__ `⏬` Click aquí.", 26 | "color": 4331519 27 | } 28 | ], components: [row], allowedMentions: { repliedUser: false } }); 29 | } 30 | } -------------------------------------------------------------------------------- /Commands/Utilidad/member.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Blacklist = require("../../Models/Blacklist"); 3 | const Staff = require("../../Models/Staff"); 4 | const emojis = require("../../emojis"); 5 | const moment = require("moment"); 6 | 7 | module.exports = { 8 | name: "member", 9 | aliases: ["user"], 10 | usage: "member {info/staff/blacklist} @Usuario", 11 | description: "Información útil de un usuario", 12 | cooldown: 3, 13 | /** 14 | * @param {Message} message 15 | */ 16 | async execute(message, args, commandName, client, Discord, prefix) { 17 | const actions = ['info', 'staff', 'blacklist']; 18 | const action = args[0]; 19 | const member = message.mentions.members.first() || message.guild.members.cache.get(args[1]); 20 | if(!member) { 21 | return message.channel.send({ 22 | "content": null, 23 | "embeds": [ 24 | { 25 | "title": "Usuario invalido.", 26 | "description": "El uso correcto de este comando es `"+prefix+"member {info/staff/blacklist} <@Usuario>`\n\n`[*]` **|** Para más información de este usa `"+prefix+"command member`", 27 | "color": 16724016 28 | } 29 | ] 30 | }) 31 | } 32 | if(!actions.some(a => a === action.toLowerCase())) { 33 | return message.channel.send({ content: `La acción \`${action}\` no esta disponible.` }); 34 | } else { 35 | if(action.toLowerCase() === "info") { 36 | let status; 37 | let mStatus = member.presence?.status; 38 | if(!mStatus) { 39 | status = "Invisible" 40 | } else if(mStatus === "dnd") { 41 | status = "No molestar" 42 | } else if(mStatus === "online") { 43 | status = "Conectado" 44 | } else if(mStatus === "idle") { 45 | status = "Ausente" 46 | } 47 | 48 | message.channel.send({ 49 | "content": null, 50 | "embeds": [ 51 | { 52 | "title": "__Información de usuario__", 53 | "description": `\`[👤]\` **Credenciales:\n** \`${member.user.tag} | ID: ${member.id}\``, 54 | "color": member.roles.highest.hexColor, 55 | "fields": [ 56 | { 57 | "name": "`[+]` En Discord desde:", 58 | "value": `` 59 | }, 60 | { 61 | "name": "`[+]` Miembro del servidor desde:", 62 | "value": `` 63 | }, 64 | { 65 | "name": "`[?]` Este usuario es un bot:", 66 | "value": `${member.user.bot ? "El usuario esta marcado como un `bot`" : "El usuario no esta marcado como `bot`"}` 67 | }, 68 | { 69 | "name": "`[*]` Estado:", 70 | "value": `\`${status}\`` 71 | }, 72 | { 73 | "name": "`[-]` Roles", 74 | "value": `${member.roles.cache.map(r => r.toString()).join(" ").replace('@everyone', ' ')}` 75 | } 76 | ], 77 | "thumbnail": { 78 | "url": `${member.displayAvatarURL({ dynamic: true })}` 79 | } 80 | } 81 | ] 82 | }) 83 | } else if(action.toLowerCase() === "staff") { 84 | const staff = await Staff.findOne({ userId: member.id }); 85 | if(!staff) { 86 | return message.channel.send({ content: `El usuario \`${member.user.tag}\` no es un staff de mi soporte!` }); 87 | } else { 88 | return message.channel.send({ content: `El usuario \`${member.user.tag}\` es staff en mi soporte.` }); 89 | } 90 | } else if(action.toLowerCase() === "blacklist") { 91 | const blk = await Blacklist.findOne({ userId: member.id }); 92 | if(!blk) { 93 | return message.channel.send({ content: `${member} No es un usuario en blacklist!` }); 94 | } else { 95 | return message.channel.send({ content: `${member} Es un usuario malicioso, razón: \`${blk?.razon}\`` }); 96 | } 97 | } 98 | } 99 | } 100 | } -------------------------------------------------------------------------------- /Commands/Utilidad/ping.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "ping", 6 | aliases: ["lag"], 7 | description: "Latencia del bot", 8 | cooldown: 5, 9 | /** 10 | * @param {Message} message 11 | */ 12 | async execute(message, args, commandName, client, Discord) { 13 | 14 | message.reply({ content: `🌐 BOT: ${client.ws.ping}ms\n📍 Discord Api: ${Date.now() - message.createdTimestamp}ms`, allowedMentions: { repliedUser: false } }); 15 | } 16 | } -------------------------------------------------------------------------------- /Commands/Utilidad/premium.js: -------------------------------------------------------------------------------- 1 | const Premium = require("../../Models/UserPremium"); 2 | const PremiumCode = require("../../Models/Premium"); 3 | const ms = require("ms"); 4 | const moment = require("moment"); 5 | 6 | module.exports = { 7 | name: "premium", 8 | aliases: ["canjear"], 9 | usage: "premium ", 10 | description: "Canjea un codigo premium", 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord) { 15 | let Codigo = args[0]; 16 | const usuario = await Premium.findOne({ userId: message.author.id }); 17 | if(usuario) { 18 | if(!usuario?.timestamp) { 19 | return message.reply({ content: "Ya cuentas con premium, valido hasta: `Infinito`", allowedMentions: { repliedUser: false } }); 20 | } else { 21 | return message.reply({ content: `Ya cuentas con premium, valido hasta: \`${moment((usuario?.ctimestamp + usuario?.timestamp)).format("Do/MM/YYYY hh:mm:ss a").replace("º", "")}\``, allowedMentions: { repliedUser: false } }) 22 | } 23 | } 24 | if(!Codigo) { 25 | return message.reply({ content: "No has introducido ningun codigo para canjear", allowedMentions: { repliedUser: false } }); 26 | } else { 27 | const codigo = await PremiumCode.findOne({ code: Codigo }); 28 | if(!codigo) { 29 | return message.reply({ content: "Ese codigo no existe o ya fue canjeado", allowedMentions: { repliedUser: false } }); 30 | } 31 | if(codigo?.redemmed) { 32 | return message.reply({ content: "Ese codigo no existe o ya fue canjeado", allowedMentions: { repliedUser: false } }); 33 | } 34 | if(codigo?.time === 0) { 35 | const x0_244 = new Premium({ 36 | userId: message.author.id 37 | }); 38 | await x0_244.save(); 39 | codigo.redemmed = true; 40 | await codigo.save(); 41 | message.reply({ content: "Codigo canjeado correctamente, ahora tienes premium hasta: `Infinito`", allowedMentions: { repliedUser: false } }); 42 | } else { 43 | if(codigo?.time === 2592000000) { 44 | const x0_244 = new Premium({ 45 | userId: message.author.id, 46 | timestamp: Date.now(), 47 | ctimestamp: ms('30d') 48 | }); 49 | await x0_244.save(); 50 | codigo.redemmed = true; 51 | await codigo.save(); 52 | console.log() 53 | message.reply({ content: `Codigo canjeado correctamente, ahora tienes premium hasta: \`${(moment(ms("30d") + codigo?.timestamp)).format("Do/MMMM/YYYY hh:mm:ss a").replace("º", "")}\``, allowedMentions: { repliedUser: false } }); 54 | } 55 | if(codigo?.time === 31557600000) { 56 | const x0_244 = new Premium({ 57 | userId: message.author.id, 58 | timestamp: Date.now(), 59 | ctimestamp: ms('1y') 60 | }); 61 | await x0_244.save(); 62 | codigo.redemmed = true; 63 | await codigo.save(); 64 | console.log() 65 | message.reply({ content: `Codigo canjeado correctamente, ahora tienes premium hasta: \`${(moment(ms("1y") + codigo?.timestamp)).format("Do/MMMM/YYYY hh:mm:ss a").replace("º", "")}\``, allowedMentions: { repliedUser: false } }); 66 | } 67 | } 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Commands/Utilidad/purgeme.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const moment = require("moment"); 4 | const Premium = require("../../Models/UserPremium"); 5 | 6 | module.exports = { 7 | name: "purgeme", 8 | aliases: ["purgeame"], 9 | description: "Limpia tus mensajes en el canal que lo utilices", 10 | usage: "purgeme ", 11 | cooldown: 5, 12 | /** 13 | * @param {Message} message 14 | */ 15 | async execute(message, args, commandName, client, Discord) { 16 | const up = Premium.findOne({ userId: message.author.id }); 17 | if(!up) { 18 | return message.channel.send({ content: "Este comando es de uso __`premium`__!, unete a nuestro servidor de soporte para más información. https://discord.gg/tPWYAPhhwz" }); 19 | } 20 | if(!message.member.permissions.has("MANAGE_MESSAGES")) { 21 | return message.channel.send({ content: `No tienes __permisos de manejar mensajes__ para ejecutar esto.` }); 22 | } 23 | if(!message.guild.me.permissions.has("MANAGE_MESSAGES")) { 24 | return message.channel.send({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`MANAGE_MESSAGES\``, allowedMentions: { repliedUser: false } }); 25 | } 26 | const cantidad = args[0]; 27 | if(!cantidad) { 28 | return message.channel.send({ content: "Por favor proporciona un numero de mensajes para eliminar." }); 29 | } 30 | if(isNaN(cantidad)) { 31 | return message.channel.send({ content: "Por favor proporciona un numero de mensajes para eliminar." }); 32 | } 33 | if(cantidad <= 0) { 34 | return message.channel.send({ content: "No puedo limpiar menos de `1` mensaje." }); 35 | } 36 | if(cantidad > 100) { 37 | return message.channel.send({ content: "No puedo limpiar mas de `100` mensajes." }); 38 | } 39 | const messages = await message.channel.messages.fetch({ 40 | limit: cantidad 41 | }); 42 | const userMessages = messages.filter(m => m.author.id === message.author.id); 43 | message.channel.bulkDelete(userMessages, true); 44 | message.channel.send({ content: "Limpie `"+userMessages.size+"` mensajes de `"+message.author.tag+"` con exito!" }) 45 | } 46 | } -------------------------------------------------------------------------------- /Commands/Utilidad/reportar.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "reportar", 6 | aliases: ["reporte", "report"], 7 | usage: "reportar ", 8 | description: "Reporta a un usuario para ser añadido a la blacklist", 9 | cooldown: 5, 10 | /** 11 | * @param {Message} message 12 | */ 13 | async execute(message, args, commandName, client, Discord, prefix) { 14 | const id = args[0] 15 | const pruebas = args[1] 16 | if(!id && !pruebas || !pruebas) { 17 | return message.channel.send({ content: `${message.author}, Este reporte no puede ser enviado. \`${prefix}reportar \`` }); 18 | } 19 | const noaceptadas = ["no se", "porque si", "me cae mal", "asd"]; 20 | if(!message.content.includes("https://") && noaceptadas.some(w => pruebas.toLowerCase().includes(w))) { 21 | return message.reply({ content: `${message.author}, Este reporte no puede ser enviado. \`${prefix}reportar \`` }); 22 | } else { 23 | if(isNaN(id)) { 24 | return message.channel.send({ content: "Eso no es una id!" }); 25 | } 26 | const canal = await client.channels.cache.get("901607208284991489") 27 | const embed = new MessageEmbed() 28 | .setDescription(`Nuevo reporte hecho:\n\n ID: \`${id}\` \nPruebas: ${pruebas}`) 29 | .setColor("BLUE") 30 | .setTimestamp() 31 | .setFooter(`${message.author.id}`) 32 | 33 | canal.send({ embeds: [embed] }); 34 | message.channel.send({ embeds: [embed] }) 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /Commands/Utilidad/verify.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | 4 | module.exports = { 5 | name: "verify", 6 | aliases: ["verificarme"], 7 | description: "Verificate en el servidor de Apolo", 8 | cooldown: 3, 9 | /** 10 | * @param {Message} message 11 | */ 12 | async execute(message, args, commandName, client, Discord) { 13 | if(message.guild.id !== "866670008201773067") { 14 | return; 15 | } else if(message.channel.id !== "900776499727192175") { 16 | return; 17 | } else { 18 | message.delete() 19 | const Role = message.guild.roles.cache.get("900777155699560538") 20 | message.member.roles.add(Role) 21 | message.channel.send({ content: `${emojis.positivo} | \`Te has verificado correctamente\`` }).then(m => { 22 | setTimeout(() => { 23 | m.delete() 24 | }, 2500); 25 | }); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Events/Channels/antiChannelCreate.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed, GuildChannel } = require("discord.js"); 2 | const AntiChannels = require("../../Models/AntiChannels"); 3 | const Whitelist = require("../../Models/Whitelist"); 4 | 5 | module.exports = { 6 | name: "channelCreate", 7 | /** 8 | * @param {Client} client 9 | * @param {GuildChannel} channel 10 | */ 11 | async execute(channel) { 12 | const anticanales = await AntiChannels.findOne({ guildId: channel.guild.id }); 13 | const { guild } = channel; 14 | if(!anticanales) { 15 | return; 16 | } else { 17 | if(anticanales?.actived) { 18 | const auditlogs = await channel.guild.fetchAuditLogs({ 19 | type: "CHANNEL_CREATE", 20 | limit: 1 21 | }).catch(e => {}); 22 | const { executor } = auditlogs.entries.first(); 23 | if(executor.bot) { 24 | if(executor.flags.has("VERIFIED_BOT")) { 25 | return; 26 | } else { 27 | if(executor.id === "901344194579279882") { 28 | return; 29 | } else { 30 | channel.delete("Anti-Canales activado").catch(e => {}); 31 | } 32 | } 33 | } else { 34 | const Target = channel.guild.members.cache.get(executor.id); 35 | const uW = await Whitelist.findOne({ 36 | guildId: guild.id, 37 | userId: Target?.id 38 | }); 39 | if(uW) { 40 | return; 41 | } 42 | if(Target) { 43 | if(channel.guild.me.roles.highest.comparePositionTo(Target?.roles.highest) <= 0) { 44 | return; 45 | } 46 | } 47 | if(channel.guild.ownerId === Target?.id) { 48 | return; 49 | } else { 50 | channel.delete("Anti-Canales activado").catch(e => {}); 51 | } 52 | } 53 | } else { 54 | return; 55 | } 56 | } 57 | } 58 | } -------------------------------------------------------------------------------- /Events/Channels/antiChannelDelete.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed, GuildChannel } = require("discord.js"); 2 | const AntiChannels = require("../../Models/AntiChannels"); 3 | const Whitelist = require("../../Models/Whitelist"); 4 | 5 | module.exports = { 6 | name: "channelDelete", 7 | /** 8 | * @param {Client} client 9 | * @param {GuildChannel} channel 10 | */ 11 | async execute(channel) { 12 | const anticanales = await AntiChannels.findOne({ guildId: channel.guild.id }); 13 | const {guild} = channel; 14 | if(!anticanales) { 15 | return; 16 | } else { 17 | if(anticanales?.actived) { 18 | const auditlogs = await channel.guild.fetchAuditLogs({ 19 | type: "CHANNEL_DELETE", 20 | limit: 1 21 | }).catch(e => {}); 22 | const { executor } = auditlogs.entries.first(); 23 | if(executor.bot) { 24 | if(executor.flags.has("VERIFIED_BOT")) { 25 | return; 26 | } else { 27 | if(executor.id === "901344194579279882") { 28 | return; 29 | } else { 30 | let name = channel.name; 31 | let nsfw = channel.nsfw; 32 | let parent = channel.parent; 33 | let type = channel.type; 34 | let position = channel.position; 35 | const ch = await channel.guild.channels.create(name, { 36 | nsfw: nsfw, 37 | type: type 38 | }); 39 | const parentNew = await channel.guild.channels.cache.find(c => c.name === parent?.name && c.type === "GUILD_CATEGORY") 40 | ch.setParent(parentNew?.id); 41 | ch.setPosition(position); 42 | } 43 | } 44 | } else { 45 | const Target = channel.guild.members.cache.get(executor.id); 46 | const uW = await Whitelist.findOne({ 47 | guildId: guild.id, 48 | userId: Target?.id 49 | }); 50 | if(uW) { 51 | return; 52 | } 53 | if(Target) { 54 | if(channel.guild.me.roles.highest.comparePositionTo(Target?.roles.highest) <= 0) { 55 | return; 56 | } 57 | } 58 | if(channel.guild.ownerId === Target?.id) { 59 | return; 60 | } else { 61 | let name = channel.name; 62 | let nsfw = channel.nsfw; 63 | let parent = channel.parent; 64 | let type = channel.type; 65 | let position = channel.position; 66 | const ch = await channel.guild.channels.create(name, { 67 | nsfw: nsfw, 68 | type: type 69 | }); 70 | if(parent) { 71 | const parentNew = await channel.guild.channels.cache.find(c => c.name === parent?.name && c.type === "GUILD_CATEGORY") 72 | ch.setParent(parentNew?.id); 73 | ch.setPosition(position); 74 | } 75 | } 76 | } 77 | } else { 78 | return; 79 | } 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /Events/Channels/channelCreate.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed, GuildChannel } = require("discord.js"); 2 | const MutedRole = require("../../Models/MutedRole"); 3 | 4 | module.exports = { 5 | name: "channelCreate", 6 | /** 7 | * @param {Client} client 8 | * @param {GuildChannel} channel 9 | */ 10 | async execute(channel) { 11 | const muterole = await MutedRole.findOne({ guildId: channel.guild.id }); 12 | if(!muterole) { 13 | return; 14 | } 15 | const Target = channel.guild.roles.cache.get(muterole.roleId); 16 | if(!Target) { 17 | return; 18 | } 19 | channel.permissionOverwrites.edit(Target, { 20 | SEND_MESSAGES: false, 21 | ADD_REACTIONS: false, 22 | CREATE_PUBLIC_THREADS: false, 23 | CREATE_PRIVATE_THREADS: false, 24 | SEND_MESSAGES_IN_THREADS: false 25 | }); 26 | } 27 | } -------------------------------------------------------------------------------- /Events/Client/Error.js: -------------------------------------------------------------------------------- 1 | const { Client } = require("discord.js"); 2 | 3 | module.exports = { 4 | name: "error", 5 | /** 6 | * @param {Client} client 7 | * 8 | */ 9 | async execute(error, client) { 10 | console.log(`[CLIENT ERRORS] - ${error.message}`) 11 | } 12 | } -------------------------------------------------------------------------------- /Events/Client/guildCreate.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed } = require("discord.js"); 2 | const Blacklist = require("../../Models/Blacklist"); 3 | 4 | module.exports = { 5 | name: "guildCreate", 6 | /** 7 | * @param {Client} Client 8 | */ 9 | async execute(guild, client) { 10 | if(guild.memberCount < 15) { 11 | client.users.cache.get(guild.ownerId).send({ content: `El servidor \`${guild.name}\` tiene menos de 15 miembros, he salido de el.` }).catch(e => {}); 12 | guild.leave().catch(e => {}); 13 | return; 14 | } 15 | const blacklist = await Blacklist.findOne({ userId: guild.ownerId }); 16 | if(blacklist) { 17 | return client.users.cache.get(guild.ownerId).send({ content: "No puedo interactuar con usuarios en la lista negra" }).catch(e => {}); 18 | guild.leave(); 19 | } 20 | client.users.cache.get(guild.ownerId).send({ content: "> ¡Hola, gracias por añadirme a tu servidor!\n\n> `-` __Consejos útiles de configuración:__\n\n- - > Para configurarme contra raids puedes usar el comando `ap!anti-raid`\n- - > Para configurarme contra maliciosos puedes usar el comando `ap!anti-malicious`\n- - > Para más información utiliza `ap!comandos`\n- - > ¿Necesitas moderadores en tu servidor? Olvidalo! ahora solo sera cuestion de **Apolo** utiliza `ap!auto-moderador`\n\n> `-` __Servidor de Soporte__\nhttps://discord.gg/ZQCcer2XsF\n\n> - Enviado desde: `"+guild.name+"`" }).catch(e => {}); 21 | client.channels.cache.get("909883576902877274").send({ content: `Me metieron a un servidor ${guild.name} | ${guild.id}, tiene ${guild.memberCount}` }); 22 | } 23 | } -------------------------------------------------------------------------------- /Events/Client/ready.js: -------------------------------------------------------------------------------- 1 | const { Client } = require("discord.js"); 2 | 3 | module.exports = { 4 | name: "ready", 5 | /** 6 | * @param {Client} client 7 | * 8 | */ 9 | async execute(client) { 10 | client.user.setActivity('🪐 las estrellas', { 11 | type: "WATCHING" 12 | }) 13 | console.log("El cliente esta on 💚") 14 | } 15 | } -------------------------------------------------------------------------------- /Events/Member/guildBotAdd.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed } = require("discord.js"); 2 | const AntiBots = require("../../Models/AntiBots"); 3 | const emojis = require("../../emojis"); 4 | 5 | module.exports = { 6 | name: "guildMemberAdd", 7 | /** 8 | * @param {Client} client 9 | * @param {GuildMember} member 10 | */ 11 | async execute(member) { 12 | if(member.user.bot) { 13 | const antibots = await AntiBots.findOne({ guildId: member.guild.id }); 14 | if(!antibots) { 15 | return; 16 | } else { 17 | if(antibots?.actived) { 18 | console.log(`Añadieron un bot a ${member.guild.name}, el cual es ${member.user.tag}`) 19 | try { 20 | const audit = await member.guild.fetchAuditLogs({ 21 | type: "BOT_ADD" 22 | }); 23 | const { executor, target } = audit.entries.first(); 24 | const Executor = member.guild.members.cache.get(executor.id); 25 | const Target = member.guild.members.cache.get(target.id); 26 | if(executor.id === member.guild.ownerId) { 27 | return; 28 | } 29 | if(member.guild.me.roles.highest.comparePositionTo(Executor.roles.highest) <= 0) { 30 | return; 31 | } 32 | const Embed = new MessageEmbed() 33 | .setAuthor(member.guild.name, member.guild.iconURL({ dynamic: true })) 34 | .setDescription(`${emojis.escudo} \`${Executor.user.tag}\` | ${Executor.id} añadio un bot a ${member.guild.name}\n\n${emojis.moderacion} __He logrado banear al usuario y el bot correctamente__\nUsuario: ${Executor.user.tag} | ${Executor.id}\nBot: ${Target.user.tag} | ${Target.id}`) 35 | .setColor("BLUE") 36 | .setTimestamp() 37 | 38 | member.guild.members.cache.get(member.guild.ownerId).send({ embeds: [Embed] }); 39 | member.guild.members.ban(Target, { 40 | reason: "Anti-Bots activado" 41 | }).catch(e => {}); 42 | member.guild.members.ban(Executor, { 43 | reason: "Anti-Bots activado" 44 | }).catch(e => {}); 45 | } catch (e) { 46 | 47 | } 48 | } else { 49 | return; 50 | } 51 | } 52 | } else {} 53 | } 54 | } -------------------------------------------------------------------------------- /Events/Member/guildMemberAdd.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed } = require("discord.js"); 2 | const Muted = require("../../Models/Muted"); 3 | const MutedRole = require("../../Models/MutedRole"); 4 | 5 | module.exports = { 6 | name: "guildMemberAdd", 7 | /** 8 | * @param {Client} client 9 | * @param {GuildMember} member 10 | */ 11 | async execute(member) { 12 | if(member.guild.id !== "866670008201773067") { 13 | return; 14 | } else { 15 | const channel = await member.guild.channels.cache.get("901608845254721576") 16 | const embed = new MessageEmbed() 17 | .setAuthor(member.user.tag, member.user.avatarURL({ dynamic: true })) 18 | .setDescription(`Bienvenido ${member} a Apolo Security, ten una linda estancia y espero que tus servidores queden protegidos todo el tiempo :)\n > Puedes pasarte por los canales <#901602785236221952> y <#900776507264368670> para estar bien informado\n\n \`Att: Apolo Security\``) 19 | .setColor("AQUA") 20 | .setTimestamp() 21 | channel.send({ content: `${member}`, embeds: [embed] }); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Events/Member/guildMemberAddMuted.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed } = require("discord.js"); 2 | const Muted = require("../../Models/Muted"); 3 | const MutedRole = require("../../Models/MutedRole"); 4 | 5 | module.exports = { 6 | name: "guildMemberAdd", 7 | /** 8 | * @param {Client} client 9 | * @param {GuildMember} member 10 | */ 11 | async execute(member) { 12 | const isMuted = await Muted.findOne({ userId: member.user.id, guildId: member.guild.id }); 13 | const MuteRole = await MutedRole.findOne({ guildId: member.guild.id }); 14 | if(isMuted) { 15 | if(MuteRole) { 16 | const Role = member.guild.roles.cache.get(MuteRole.roleId); 17 | if(Role) { 18 | member.roles.add(Role).then(() => { 19 | member.send({ content: `<@${member.user.id}>, Estas muteado en \`${member.guild.name}\` el rol tiene persistencia.` }).catch(e => {}); 20 | }); 21 | } else { 22 | return; 23 | } 24 | } else { 25 | return; 26 | } 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Events/Member/guildMemberRemove.js: -------------------------------------------------------------------------------- 1 | const { Client, GuildMember, MessageEmbed } = require("discord.js"); 2 | const Muted = require("../../Models/Muted"); 3 | const MutedRole = require("../../Models/MutedRole"); 4 | 5 | module.exports = { 6 | name: "guildMemberRemove", 7 | /** 8 | * @param {Client} client 9 | * @param {GuildMember} member 10 | */ 11 | async execute(member) { 12 | if(member.guild.id !== "866670008201773067") { 13 | return; 14 | } else { 15 | const channel = await member.guild.channels.cache.get("901608874036043817") 16 | channel.send({ content: `${member.user.username} Ha abandonado la publica.` }); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /Events/Member/guildTokenAdd.js: -------------------------------------------------------------------------------- 1 | const { GuildMember } = require("discord.js"); 2 | const AntiTokens = require("../../Models/AntiTokens"); 3 | let tokens = []; 4 | 5 | module.exports = { 6 | name: "guildMemberAdd", 7 | /** 8 | * 9 | * @param {GuildMember} member 10 | */ 11 | async execute(member) { 12 | const { guild } = member; 13 | const antitokens = await AntiTokens.findOne({ guildId: guild?.id }); 14 | if(!antitokens) { 15 | return; 16 | } else { 17 | if(!antitokens?.actived) { 18 | return; 19 | } else { 20 | const gMember = guild.members.cache; 21 | const user = gMember.find(us => us.user.username == member.user.username); 22 | if(user) { 23 | tokens.push(member) 24 | if(tokens.length >= 3) { 25 | member.guild.members.ban(member, { 26 | reason: "Posible token/multicuenta detectado" 27 | }); 28 | member.send({ content: "Mi sistema te detecto como posible token/multicuenta, fuiste baneado de `"+guild.name+"`." }).catch(e => {}); 29 | 30 | } 31 | } 32 | setTimeout(() => { 33 | tokens = []; 34 | }, 60000); 35 | } 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /Events/Member/maliciousEntry.js: -------------------------------------------------------------------------------- 1 | const Blacklist = require("../../Models/Blacklist"); 2 | const Malicious = require("../../Models/Malicious"); 3 | const { Client, GuildMember, MessageEmbed } = require("discord.js"); 4 | 5 | module.exports = { 6 | name: "guildMemberAdd", 7 | /** 8 | * 9 | * @param {GuildMember} member 10 | * @param {Client} client 11 | */ 12 | async execute(member, client) { 13 | const { guild } = member; 14 | const { user } = member; 15 | const userblk = await Blacklist.findOne({ userId: user?.id }); 16 | const malicious = await Malicious.findOne({ guildId: guild.id }); 17 | if(userblk) { 18 | if(!malicious) { 19 | return; 20 | } 21 | if(!malicious?.actived) { 22 | return; 23 | } 24 | if(malicious?.punishment === "Marcar") { 25 | member.edit({ 26 | nick: userblk.razon 27 | }).catch(e => {}); 28 | client.users.cache.get(guild.ownerId).send({ 29 | "embeds": [ 30 | { 31 | "title": "`📢⛔` - Detección de maliciosos", 32 | "description": "`{📢}` **|** He detectado a `"+user.tag+"` como un usuario malicioso, la razón de la blacklist que encontre es: `"+userblk.razon+"`.\n`{✅}` **|** Logre `Marcar` al sujeto con exito!\n\n`-` Enviado desde: `"+guild.name+"`", 33 | "url": "https://discord.gg/tPWYAPhhwz", 34 | "color": 9215, 35 | "footer": { 36 | "text": "Apolo Security" 37 | }, 38 | "timestamp": Date.now() 39 | } 40 | ] 41 | }).catch(e => {}); 42 | malicious.lastMaliciousDetected = user.tag; 43 | await malicious.save(); 44 | } else if(malicious?.punishment === "Expulsar") { 45 | if(member.kickable) { 46 | member.kick('Anti-Maliciosos activado.'); 47 | client.users.cache.get(guild.ownerId).send({ 48 | "embeds": [ 49 | { 50 | "title": "`📢⛔` - Detección de maliciosos", 51 | "description": "`{📢}` **|** He detectado a `"+user.tag+"` como un usuario malicioso, la razón de la blacklist que encontre es: `"+userblk.razon+"`.\n`{✅}` **|** Logre `Expulsar` al sujeto con exito!\n\n`-` Enviado desde: `"+guild.name+"`", 52 | "url": "https://discord.gg/tPWYAPhhwz", 53 | "color": 9215, 54 | "footer": { 55 | "text": "Apolo Security" 56 | }, 57 | "timestamp": Date.now() 58 | } 59 | ] 60 | }).catch(e => {}); 61 | malicious.lastMaliciousDetected = user.tag; 62 | await malicious.save(); 63 | } else { 64 | return; 65 | } 66 | } else if(malicious?.punishment === "Banear") { 67 | if(member.bannable) { 68 | member.ban({ 69 | reason: 'Anti-Maliciosos activado.' 70 | }); 71 | client.users.cache.get(guild.ownerId).send({ 72 | "embeds": [ 73 | { 74 | "title": "`📢⛔` - Detección de maliciosos", 75 | "description": "`{📢}` **|** He detectado a `"+user.tag+"` como un usuario malicioso, la razón de la blacklist que encontre es: `"+userblk.razon+"`.\n`{✅}` **|** Logre `Banear` al sujeto con exito!\n\n`-` Enviado desde: `"+guild.name+"`", 76 | "url": "https://discord.gg/tPWYAPhhwz", 77 | "color": 9215, 78 | "footer": { 79 | "text": "Apolo Security" 80 | }, 81 | "timestamp": Date.now() 82 | } 83 | ] 84 | }).catch(e => {}); 85 | malicious.lastMaliciousDetected = user.tag; 86 | await malicious.save(); 87 | } else { 88 | return; 89 | } 90 | } else { 91 | return; 92 | } 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /Events/Member/verifyMemberAdd.js: -------------------------------------------------------------------------------- 1 | const { GuildMember, Client, MessageEmbed, MessageAttachment } = require("discord.js") 2 | const Verify = require("../../Models/Verify"); 3 | const VerifyRole = require("../../Models/VerifyRole"); 4 | const CaptchaIntents = require("../../Models/CaptchaIntents"); 5 | const { Captcha } = require("captcha-canvas"); 6 | const members = []; 7 | 8 | module.exports = { 9 | name: "guildMemberAdd", 10 | /** 11 | * 12 | * @param {GuildMember} member 13 | */ 14 | async execute(member) { 15 | if(member.user.bot) return; 16 | const vRLE = await VerifyRole.findOne({ guildId: member.guild.id }); 17 | const vCL = await Verify.findOne({ guildId: member.guild.id }); 18 | if(!vRLE && !vCL) { 19 | return; 20 | } else { 21 | const channel = member.guild.channels.cache.get(vCL?.channelId); 22 | const rol = member.guild.roles.cache.get(vRLE?.roleId); 23 | if(!channel && !rol) { 24 | return; 25 | } else { 26 | const captcha = new Captcha(); 27 | captcha.async = true; 28 | captcha.addDecoy(); 29 | captcha.drawTrace({ 30 | "color": "#EC02FF" 31 | }); 32 | captcha.drawCaptcha({ 33 | "skew": true, 34 | "color": "#fff", 35 | colors: ["#fff", "#85FC57", "#A6FDFF"] 36 | }); 37 | 38 | const cAtt = new MessageAttachment( 39 | await captcha.png, 40 | "captcha.png" 41 | ); 42 | try { 43 | const nCU = new CaptchaIntents({ 44 | userId: member.id, 45 | guildId: member.guild.id, 46 | intents: 3 47 | }); 48 | await nCU.save(); 49 | await channel.send({ content: `${member}`, embeds: [{ 50 | "title": "¿Beep, Boop, Boop, Beep?", 51 | "description": "Bienvenido `"+member.user.username+"`, completa este captcha para ser verificado en `"+member.guild.name+"`.\n\n`⇒` **¿Por qué se hace esto?**\n- Para combatir ataques con multicuentas/tokens.\n- Para mayor protección de el servidor.", 52 | "color": 1154628, 53 | "footer": { 54 | "text": "Tienes 3 minutos y 3 intentos para contestar el captcha.", 55 | "icon_url": "https://cdn-icons-png.flaticon.com/512/3039/3039437.png" 56 | }, 57 | "image": { 58 | "url": "attachment://captcha.png" 59 | } 60 | }], files: [cAtt] }); 61 | const collector = channel.createMessageCollector({ filter: (m) => m.author.id === member.id, time: 180000 }); 62 | collector.on('collect', async (m) => { 63 | if(m.content !== captcha.text) { 64 | if(nCU.intents - 1 === 0) { 65 | member.send({ content: `El captcha es incorrecto, haz sido expulsado de \`${member.guild.name}\`` }).catch(e => {}); 66 | member.guild.members.kick(member.id, "No resolvio correctamente el captcha."); 67 | collector.stop(); 68 | } else { 69 | nCU.intents = nCU.intents - 1; 70 | await nCU.save(); 71 | channel?.send({ embeds: [ 72 | { 73 | title: "Captcha incorrecto", 74 | description: `Ese no es el captcha correcto, te quedan \`${nCU.intents}\` intentos.`, 75 | color: "BLURPLE", 76 | thumbnail: { 77 | "url": "https://cdn-icons-png.flaticon.com/512/3039/3039437.png" 78 | } 79 | } 80 | ] }); 81 | } 82 | } else { 83 | member.roles.add(rol.id, "Captcha completado").then(async () => { 84 | channel?.send({ content: "Te has verificado correctamente." }); 85 | collector.stop(); 86 | await CaptchaIntents.findOneAndDelete({ userId: member.id, guildId: member.guild.id }); 87 | }).catch(e => {}); 88 | } 89 | }) 90 | const ctxt = cT.first().content; 91 | } catch (e) { 92 | 93 | } 94 | } 95 | } 96 | } 97 | } -------------------------------------------------------------------------------- /Events/Message/checkPremium.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const Premium = require("../../Models/UserPremium"); 3 | const ms = require("ms"); 4 | 5 | module.exports = { 6 | name: "messageCreate", 7 | /** 8 | * @param {Message} message 9 | */ 10 | async execute(message, client) { 11 | const user = await Premium.findOne({ userId: message.author.id }); 12 | if(!user) { 13 | return; 14 | } else { 15 | if((Date.now() + user?.ctimestamp) < 2592000000) { 16 | await Premium.findOneAndDelete({ userId: message.author.id }); 17 | return message.channel.send({ content: `${message.author} vaya! Parece que tu premium ha expirado...` }); 18 | } else if((Date.now() + user?.ctimestamp) < 31557600000) { 19 | await Premium.findOneAndDelete({ userId: message.author.id }); 20 | return message.channel.send({ content: `${message.author} vaya! Parece que tu premium ha expirado...` }); 21 | } else { 22 | return; 23 | } 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /Events/Message/floodAutoMod.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed, Collection } = require("discord.js"); 2 | const AutoMod = require("../../Models/AutoModerador"); 3 | const MutedRole = require("../../Models/MutedRole"); 4 | const Muted = require("../../Models/Muted"); 5 | const ModLogs = require("../../Models/modLogs"); 6 | 7 | let warns = []; 8 | let messages = []; 9 | const muteInterval = 10000; 10 | 11 | module.exports = { 12 | name: "messageCreate", 13 | /** 14 | * 15 | * @param {Message} message 16 | * @param {Client} client 17 | */ 18 | async execute(message, client) { 19 | if(!message.guild) return; 20 | if(message.author.bot) return; 21 | const automod = await AutoMod.findOne({ guildId: message.guild.id }); 22 | const mutedrole = await MutedRole.findOne({ guildId: message.guild.id }); 23 | if(!automod && !mutedrole) { 24 | return; 25 | } else { 26 | if(automod?.actived) { 27 | const Role = message.guild.roles.cache.get(mutedrole.roleId); 28 | if(!Role) { 29 | return; 30 | } 31 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 32 | return; 33 | } 34 | if(message.member?.permissions.has("ADMINISTRATOR")) { 35 | return; 36 | } 37 | let msgs = messages.filter(m => m.author.id === message.author.id); 38 | const userWarns = warns.filter(w => w.author.id === message.author.id) 39 | if(msgs.length + 1 === 4) { 40 | warns.push({ 41 | author: { 42 | id: message.author.id, 43 | tag: message.author.tag 44 | } 45 | }); 46 | message.channel.send({ content: `${message.author}, si sigues haciendo flood tendre que sancionarte.` }).then(msg => { 47 | setTimeout(() => { 48 | msg.delete().catch(e => {}); 49 | }, 5000); 50 | }); 51 | if(userWarns.length + 1 === automod?.maxWarnMute) { 52 | let mToD = await message.channel.messages.fetch({ 53 | limit: 100 54 | }); 55 | let msToD = mToD.filter(m => m.author.id === message.author.id); 56 | message.channel.bulkDelete(msToD, true); 57 | message.member?.roles.add(Role.id).then(async () => { 58 | message.channel.send({ content: `${message.author} fuiste muteado durante \`10m\` por \`Muchos mensajes en 7s\`` }).then(msg => { 59 | setTimeout(() => { 60 | msg.delete().catch(e => {}); 61 | }, 10000); 62 | }); 63 | const createMuted = new Muted({ 64 | guildId: message.guild.id, 65 | userId: message.author.id 66 | }); 67 | await createMuted.save(); 68 | setTimeout(async () => { 69 | message.member?.roles.remove(Role.id).catch(e => {}); 70 | await Muted.findOneAndDelete({ guildId: message.guild.id, userId: message.author.id }).catch(e => {}); 71 | }, 600000); 72 | }); 73 | } else if(userWarns.length + 1 === automod?.maxWarnKick) { 74 | let mToD = await message.channel.messages.fetch({ 75 | limit: 100 76 | }); 77 | let msToD = mToD.filter(m => m.author.id === message.author.id); 78 | message.channel.bulkDelete(msToD, true); 79 | message.guild.members.kick(message.member, "Auto-Moderador: Muchos mensajes en 7s.").then(msg => { 80 | setTimeout(() => { 81 | msg.delete().catch(e => {}); 82 | }, 10000); 83 | }).catch(e => {}); 84 | message.channel.send({ content: `${message.author} fue expulsado por: \`Flood Masivo en 7s\`` }); 85 | } else if(userWarns.length + 1 >= automod?.maxWarnBan) { 86 | let mToD = await message.channel.messages.fetch({ 87 | limit: 100 88 | }); 89 | let msToD = mToD.filter(m => m.author.id === message.author.id); 90 | message.channel.bulkDelete(msToD, true); 91 | message.guild.members.ban(message.member, { 92 | reason: "Auto-Moderador: Muchos mensajes en 7s." 93 | }).catch(e => {}); 94 | message.channel.send({ content: `${message.author} fue baneado por: \`Flood Masivo en 7s\`` }).then(msg => { 95 | setTimeout(() => { 96 | msg.delete().catch(e => {}); 97 | }, 10000); 98 | }); 99 | warns = []; 100 | } 101 | } else { 102 | messages.push({ 103 | author: { 104 | id: message.author.id 105 | }, 106 | content: message.content 107 | }); 108 | } 109 | setTimeout(() => { 110 | messages = []; 111 | }, 7000); 112 | } 113 | } 114 | } 115 | } -------------------------------------------------------------------------------- /Events/Message/messageAntiPalabras.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed, Collection } = require("discord.js"); 2 | const AntiPalabras = require("../../Models/AntiPalabras"); 3 | const emojis = require("../../emojis"); 4 | const moment = require("moment"); 5 | 6 | module.exports = { 7 | name: "messageCreate", 8 | /** 9 | * @param {Client} client 10 | * @param {Message} message 11 | */ 12 | async execute(message, client, Discord) { 13 | if(!message.guild) return; 14 | if(!message.guild.me.permissions.has("MANAGE_MESSAGES")) { 15 | return; 16 | } 17 | const haveAntiPalabras = await AntiPalabras.findOne({ guildId: message.guild.id }); 18 | if(!haveAntiPalabras) { 19 | return; 20 | } 21 | if(haveAntiPalabras?.actived) { 22 | const palabrasblacklist = haveAntiPalabras.palabras; 23 | if(message.member?.permissions.has("ADMINISTRATOR")) { 24 | return; 25 | } 26 | if(palabrasblacklist.some(w => message.content.toLowerCase().includes(w))) { 27 | message.delete(); 28 | message.channel.send({ content: `${message.author}, Esa palabra no esta permitida` }).then(msg => { 29 | setTimeout(() => { 30 | msg.delete().catch(e => {}); 31 | }, 3000); 32 | }); 33 | } 34 | } else { 35 | return; 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /Events/Message/messageAutoMod.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed, Collection } = require("discord.js"); 2 | const AutoMod = require("../../Models/AutoModerador"); 3 | const MutedRole = require("../../Models/MutedRole"); 4 | const Muted = require("../../Models/Muted"); 5 | 6 | let warns = []; 7 | const muteInterval = 10000; 8 | 9 | module.exports = { 10 | name: "messageCreate", 11 | /** 12 | * 13 | * @param {Message} message 14 | * @param {Client} client 15 | */ 16 | async execute(message, client) { 17 | if(!message.guild) return; 18 | if(message.author.bot) return; 19 | if(message.content.toLowerCase().includes("cnd.discordapp")) return; 20 | if(message.content.toLowerCase().includes("media.discordapp")) return; 21 | const automod = await AutoMod.findOne({ guildId: message.guild.id }); 22 | const mutedrole = await MutedRole.findOne({ guildId: message.guild.id }); 23 | if(!automod && !mutedrole) { 24 | return; 25 | } else { 26 | if(automod?.actived) { 27 | const Role = message.guild.roles.cache.get(mutedrole.roleId); 28 | if(!Role) { 29 | return; 30 | } 31 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 32 | return; 33 | } 34 | if(message.member?.permissions.has("ADMINISTRATOR")) { 35 | return; 36 | } 37 | const links = ["discord.gg", "discordapp.com/invite", "discord.com/invite"]; 38 | if(links.some(link => message.content.toLowerCase().includes(link))) { 39 | const userWarns = warns.filter(w => w.author.id === message.author.id) 40 | message.delete().catch(e => {}); 41 | warns.push({ 42 | author: { 43 | id: message.author.id, 44 | tag: message.author.tag 45 | } 46 | }); 47 | message.channel.send({ content: `${message.author}, Si sigues haciendo spam te tendre que sancionar` }).then(msg => { 48 | setTimeout(() => { 49 | msg.delete().catch(e => {}); 50 | }, 5000); 51 | }); 52 | if(userWarns.length + 1 === automod?.maxWarnMute) { 53 | message.delete().catch(e => {}); 54 | message.member?.roles.add(Role.id).then(async () => { 55 | const createMuted = new Muted({ 56 | guildId: message.guild.id, 57 | userId: message.author.id 58 | }); 59 | await createMuted.save(); 60 | setTimeout(async () => { 61 | message.member?.roles.remove(Role.id).catch(e => {}); 62 | await Muted.findOneAndDelete({ guildId: message.guild.id, userId: message.author.id }).catch(e => {}); 63 | }, 600000); 64 | }).catch(e => {}); 65 | message.channel.send({ content: `${message.author}, Fuiste muteado durante \`10m\` por \`Spam\`` }).then(msg => { 66 | setTimeout(() => { 67 | msg.delete().catch(e => {}); 68 | }, 10000); 69 | }); 70 | } 71 | if(userWarns.length + 1 === automod?.maxWarnKick) { 72 | message.delete().catch(e => {}); 73 | message.guild.members.kick(message.member, `Auto-Moderador: ${automod?.maxWarnKick} warns sobrepasados.`); 74 | message.channel.send({ content: `${message.author}, Fuiste expulsado por \`Spam\`` }).then(msg => { 75 | setTimeout(() => { 76 | msg.delete().catch(e => {}); 77 | }, 10000); 78 | }); 79 | } 80 | if(userWarns.length + 1 === automod?.maxWarnBan) { 81 | message.delete().catch(e => {}); 82 | message.guild.members.ban(message.member, { 83 | reason: `Auto-Moderador: ${automod?.maxWarnBan} warns sobrepasados.` 84 | }); 85 | message.channel.send({ content: `${message.author}, Fuiste baneado por \`Spam\`` }).then(msg => { 86 | setTimeout(() => { 87 | msg.delete().catch(e => {}); 88 | }, 10000); 89 | }); 90 | warns = []; 91 | } 92 | } 93 | } 94 | } 95 | } 96 | } -------------------------------------------------------------------------------- /Events/Message/messageDelete.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed, Collection, WebhookClient } = require("discord.js"); 2 | const MessageLogs = require("../../Models/MessageLogs"); 3 | const emojis = require("../../emojis"); 4 | const moment = require("moment"); 5 | 6 | module.exports = { 7 | name: "messageDelete", 8 | /** 9 | * @param {Client} client 10 | * @param {Message} message 11 | */ 12 | async execute(message, client, Discord) { 13 | const guildHasLogs = await MessageLogs.findOne({ guildId: message.guild.id }); 14 | if(guildHasLogs) { 15 | const { webhookToken, webhookId } = guildHasLogs; 16 | const webhookClient = new WebhookClient({ 17 | token: webhookToken, 18 | id: webhookId 19 | }); 20 | if(!webhookClient) { 21 | return; 22 | } 23 | const Response = new MessageEmbed() 24 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 25 | .setDescription(`Message deleted in <#${message.channel?.id}>\n\n**Content:** \n${message.content ? message.content : "None"}\n\n**Date:** \n\`${moment()}\`\n\n**ID:**\n\`\`\`markdown\n# User = ${message.author?.id}\n# Message = ${message?.id}\n\`\`\``) 26 | .setFooter("Apolo#1922", client.user.avatarURL({ dynamic: true })) 27 | .setTimestamp() 28 | .setColor("RANDOM") 29 | webhookClient.send({ 30 | embeds: [Response], 31 | avatarURL: client.user.avatarURL({ dynamic: true }) 32 | }).catch(e => { console.log(e) }); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Events/Message/messageUpdate.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed, Collection, WebhookClient } = require("discord.js"); 2 | const MessageLogs = require("../../Models/MessageLogs"); 3 | const emojis = require("../../emojis"); 4 | const moment = require("moment"); 5 | 6 | module.exports = { 7 | name: "messageUpdate", 8 | /** 9 | * @param {Client} client 10 | * @param {Message} oldMessage, 11 | * @param {Message} newMessage 12 | */ 13 | async execute(oldMessage, newMessage, client, Discord) { 14 | const guildHasLogs = await MessageLogs.findOne({ guildId: oldMessage.guild.id }); 15 | if(guildHasLogs) { 16 | const { webhookToken, webhookId } = guildHasLogs; 17 | const webhookClient = new WebhookClient({ 18 | token: webhookToken, 19 | id: webhookId 20 | }); 21 | if(!webhookClient) { 22 | return; 23 | } 24 | const original = oldMessage.content.slice(0, 1950) + (oldMessage.content.length > 1950 ? "..." : ""); 25 | const edited = newMessage.content.slice(0, 1950) + (newMessage.content.length > 1950 ? "..." : ""); 26 | webhookClient.send({ 27 | embeds: [{ 28 | title: "Mensaje Editado", 29 | description: `${oldMessage.author} edito un mensaje en ${oldMessage.channel}`, 30 | fields: [ 31 | { 32 | name: "Antes", 33 | value: `${original}`, 34 | inline: true 35 | }, 36 | { 37 | name: "Despues", 38 | value: `${edited}`, 39 | inline: true 40 | }, 41 | { 42 | name: "¿Es un bot?", 43 | value: `${oldMessage.author.bot ? "Si, es un bot." : "No, no es un bot."}` 44 | } 45 | ], 46 | footer: { 47 | text: "Apolo#1922", 48 | icon_url: client.user.avatarURL({ dynamic: true }) 49 | }, 50 | color: "ORANGE" 51 | }], 52 | avatarURL: client.user.avatarURL({ dynamic: true }) 53 | }).catch(e => {}); 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /Events/Message/opinionAdd.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed, Collection, MessageActionRow, MessageButton } = require("discord.js"); 2 | const Passwords = require("../../password"); 3 | const PremiumCode = require("../../Models/Premium"); 4 | const emojis = require("../../emojis"); 5 | 6 | module.exports = { 7 | name: "messageCreate", 8 | /** 9 | * 10 | * @param {Message} message 11 | * @param {Client} client 12 | */ 13 | async execute(message, client) { 14 | if(!message.guild) return; 15 | if(message.guild.id !== "866670008201773067") { 16 | return; 17 | } else { 18 | if(message.channel.id === "901633582500569098") { 19 | if(message.author.bot) return; 20 | message.channel.send({ content: "¡Gracias por tu opinión!" }).then(msg => { 21 | setTimeout(async () => { 22 | msg.delete().catch(e => {}); 23 | }, 5000); 24 | }); 25 | await message.react(`${emojis.positivo}`) 26 | await message.react(`${emojis.negativo}`) 27 | 28 | const codigo = `1Month={${Passwords(6)}.-${Passwords(5)}:${Passwords(3)}}` 29 | const x_444 = new PremiumCode({ 30 | code: codigo, 31 | time: 2592000000, 32 | timestamp: Date.now(), 33 | redemmed: false 34 | }); 35 | await x_444.save(); 36 | message.channel.permissionOverwrites.edit(message.member.id, { 37 | SEND_MESSAGES: false, 38 | ADD_REACTIONS: false 39 | }); 40 | message.author.send({ content: `**¡Agradezco tu opinión!, valoro tanto tu opinión que decidi regalarte premium.**\n\n\`ap!premium ${x_444.code}\`` }).catch(e => {}); 41 | } 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /Events/Message/webhookSpam.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const AntiRaid = require("../../Models/AntiRaid"); 3 | const Whitelist = require("../../Models/Whitelist"); 4 | let webhookSpams = []; 5 | 6 | module.exports = { 7 | name: "messageCreate", 8 | async execute(message, client) { 9 | if(message.author.id === "901344194579279882") { 10 | return; 11 | } 12 | const antiraid = await AntiRaid.findOne({ guildId: message.guild.id }); 13 | if(!antiraid) { 14 | return; 15 | } 16 | if(!antiraid?.actived) { 17 | return; 18 | } 19 | if(!message.webhookId) { 20 | return; 21 | } else { 22 | const webhook = webhookSpams.filter(w => w.id === message.webhookId); 23 | const fetchedWebhook = await client.fetchWebhook(message.webhookId).catch(e => {}); 24 | if(webhook.length + 1 === antiraid?.maxWebhookMessages) { 25 | const adl = await message.guild.fetchAuditLogs({ 26 | type: "WEBHOOK_CREATE", 27 | limit: 1 28 | }); 29 | if(!adl) return; 30 | const { executor, target } = adl.entries.first(); 31 | if(message.guild.ownerId === executor?.id) { 32 | return; 33 | } 34 | if(target.id !== fetchedWebhook.id) { 35 | return; 36 | } 37 | const Target = message.guild.members.cache.get(executor?.id); 38 | const uW = await Whitelist.findOne({ 39 | guildId: message.guild.id, 40 | userId: Target?.id 41 | }); 42 | if(uW) { 43 | return; 44 | } 45 | if(Target){ 46 | if(message.guild.me.roles.highest.comparePositionTo(Target?.roles.highest) <= 0) { 47 | return; 48 | } 49 | } 50 | if(Target.id === "901344194579279882") return; 51 | if(antiraid?.sancionType.toLowerCase() === "ban") { 52 | message.guild.members.ban(Target.id, { 53 | reason: "Anti-Raid esta activado" 54 | }); 55 | console.log(fetchedWebhook) 56 | fetchedWebhook.delete("Anti-Raid esta activado"); 57 | message.channel.send({ content: `\`${fetchedWebhook.name}\` eliminado por spam de mensajes, fue creado por: \`${Target.user.username}\` y lo he baneado correctamente.` }); 58 | } 59 | if(antiraid?.sancionType.toLowerCase() === "kick") { 60 | message.guild.members.kick(Target.id, "Anti-Raid esta activado"); 61 | console.log(fetchedWebhook) 62 | fetchedWebhook.delete("Anti-Raid esta activado"); 63 | message.channel.send({ content: `\`${fetchedWebhook.name}\` eliminado por spam de mensajes, fue creado por: \`${Target.user.username}\` y lo he expulsado correctamente.` }); 64 | } 65 | } else { 66 | webhookSpams.push({ 67 | id: message.webhookId 68 | }); 69 | } 70 | } 71 | 72 | setTimeout(() => { 73 | webhookSpams = []; 74 | }, 7000) 75 | } 76 | } -------------------------------------------------------------------------------- /Events/Roles/roleCreate.js: -------------------------------------------------------------------------------- 1 | const { MessagEmbed, Role, Client } = require("discord.js"); 2 | const AntiRoles = require("../../Models/AntiRoles"); 3 | const Whitelist = require("../../Models/Whitelist"); 4 | 5 | module.exports = { 6 | name: "roleCreate", 7 | /** 8 | * @param {Client} client 9 | * @param {Role} role 10 | */ 11 | async execute(role) { 12 | const { guild } = role; 13 | const antiroles = await AntiRoles.findOne({ guildId: guild.id }); 14 | if(!antiroles) { 15 | return; 16 | } else { 17 | if(antiroles?.actived) { 18 | try { 19 | const auditlogs = await guild.fetchAuditLogs({ 20 | type: "ROLE_CREATE" 21 | }).catch(e => {}); 22 | const { executor } = auditlogs.entries.first(); 23 | if(executor.bot) { 24 | if(executor.flags.has("VERIFIED_BOT")) { 25 | return; 26 | } else { 27 | if(executor.id === "901344194579279882") { 28 | return; 29 | } 30 | } 31 | } else { 32 | try { 33 | const Target = guild.members.cache.get(executor.id); 34 | const uW = await Whitelist.findOne({ 35 | guildId: guild.id, 36 | userId: Target?.id 37 | }); 38 | if(uW) { 39 | return; 40 | } 41 | if(Target) { 42 | if(guild.me?.roles?.highest?.comparePositionTo(Target?.roles?.highest) <= 0) { 43 | return; 44 | } else if(role.guild.ownerId === Target?.id) { 45 | return; 46 | } 47 | } 48 | role.delete().catch(e => {}); 49 | } catch (e) { 50 | console.log(e) 51 | } 52 | } 53 | } catch (e) { 54 | 55 | } 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /Events/Roles/roleDelete.js: -------------------------------------------------------------------------------- 1 | const { MessagEmbed, Role, Client } = require("discord.js"); 2 | const AntiRoles = require("../../Models/AntiRoles"); 3 | const Whitelist = require("../../Models/Whitelist"); 4 | 5 | module.exports = { 6 | name: "roleDelete", 7 | /** 8 | * @param {Client} client 9 | * @param {Role} role 10 | */ 11 | async execute(role) { 12 | const { guild } = role; 13 | const antiroles = await AntiRoles.findOne({ guildId: guild.id }); 14 | if(!antiroles) { 15 | return; 16 | } else { 17 | if(antiroles?.actived) { 18 | try { 19 | const auditlogs = await guild.fetchAuditLogs({ 20 | type: "ROLE_DELETE" 21 | }).catch(e => {}); 22 | const { executor } = auditlogs.entries.first(); 23 | if(executor.bot) { 24 | if(executor.flags.has("VERIFIED_BOT")) { 25 | return; 26 | } else { 27 | if(executor.id === "901344194579279882") { 28 | return; 29 | } 30 | try { 31 | const Target = guild.members.cache.get(executor.id); 32 | const name = role.name; 33 | const position = role.position; 34 | const color = role.color; 35 | const permissions = role.permissions; 36 | const rol = await guild.roles.create(name); 37 | rol.setName(name); 38 | rol.setColor(color); 39 | rol.setPosition(position); 40 | rol.setPermissions(permissions); 41 | } catch (e) { 42 | console.log(e) 43 | } 44 | } 45 | } else { 46 | if(executor.id === "901344194579279882") { 47 | return; 48 | } 49 | try { 50 | const Target = guild.members.cache.get(executor.id); 51 | const uW = await Whitelist.findOne({ 52 | guildId: guild.id, 53 | userId: Target?.id 54 | }); 55 | if(uW) { 56 | return; 57 | } 58 | const name = role.name; 59 | const position = role.position; 60 | const color = role.color; 61 | const permissions = role.permissions; 62 | if(Target) { 63 | if(guild.me?.roles?.highest?.comparePositionTo(Target?.roles?.highest) <= 0) { 64 | return; 65 | } else if(role.guild.ownerId === Target?.id) { 66 | return; 67 | } 68 | } 69 | const rol = await guild.roles.create(name); 70 | rol.setName(name); 71 | rol.setColor(color); 72 | rol.setPosition(position); 73 | rol.setPermissions(permissions); 74 | } catch (e) { 75 | console.log(e) 76 | } 77 | } 78 | } catch (e) { 79 | 80 | } 81 | } 82 | } 83 | } 84 | } -------------------------------------------------------------------------------- /Handlers/commandsHandler.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs"); 2 | const ascii = require("ascii-table"); 3 | 4 | let table = new ascii("Comandos"); 5 | table.setHeading("Comando", "Estado"); 6 | 7 | module.exports = (client) => { 8 | const commandFolders = readdirSync("./Commands"); 9 | for(const folder of commandFolders) { 10 | const commandFiles = readdirSync(`./Commands/${folder}`).filter(files => files.endsWith(".js")); 11 | const commandsArry = [] 12 | for(const file of commandFiles) { 13 | const command = require(`../Commands/${folder}/${file}`); 14 | client.commands.set(command.name, command); 15 | table.addRow(file, "✅ Cargado.") 16 | } 17 | } 18 | console.log(table.toString()); 19 | } -------------------------------------------------------------------------------- /Handlers/eventsHandler.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs"); 2 | 3 | module.exports = (client, Discord) => { 4 | const eventFolders = readdirSync('./Events') 5 | for(const folder of eventFolders) { 6 | const eventFiles = readdirSync(`./Events/${folder}`).filter(files => files.endsWith(".js")); 7 | for(const file of eventFiles) { 8 | const event = require(`../Events/${folder}/${file}`); 9 | if(event.once) { 10 | client.once(event.name, (...args) => event.execute(...args, client, Discord)); 11 | } else { 12 | client.on(event.name, (...args) => event.execute(...args, client, Discord)); 13 | } 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Models/AntiBots.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiBotSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: true 11 | } 12 | }); 13 | 14 | module.exports = model('AntiBots', AntiBotSchema); -------------------------------------------------------------------------------- /Models/AntiChannels.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiChannelSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: true 11 | } 12 | }); 13 | 14 | module.exports = model('AntiChannels', AntiChannelSchema); -------------------------------------------------------------------------------- /Models/AntiFlood.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiFloodSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: true 11 | }, 12 | times: { 13 | type: Number, 14 | default: 5 15 | }, 16 | sancion: { 17 | type: String, 18 | default: "mute" 19 | }, 20 | time: { 21 | type: Number, 22 | default: 9000 23 | } 24 | }); 25 | 26 | module.exports = model('AntiFloods', AntiFloodSchema); -------------------------------------------------------------------------------- /Models/AntiLinks.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiLinkSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: true 11 | } 12 | }); 13 | 14 | module.exports = model('AntiLinks', AntiLinkSchema); -------------------------------------------------------------------------------- /Models/AntiPalabras.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiPalabraschema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: false 11 | }, 12 | palabras: { 13 | type: Array 14 | } 15 | }); 16 | 17 | module.exports = model('AntiPalabras', AntiPalabraschema); -------------------------------------------------------------------------------- /Models/AntiRaid.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiRaidSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: true 11 | }, 12 | maxChannelsCreate: { 13 | type: Number, 14 | default: 3 15 | }, 16 | maxRolesCreate: { 17 | type: Number, 18 | default: 3 19 | }, 20 | maxChannelsDelete: { 21 | type: Number, 22 | default: 2 23 | }, 24 | maxRolesDelete: { 25 | type: Number, 26 | default: 2 27 | }, 28 | maxBansNumber: { 29 | type: Number, 30 | default: 3 31 | }, 32 | maxKickNumber: { 33 | type: Number, 34 | default: 3 35 | }, 36 | maxWebhookMessages: { 37 | type: Number, 38 | default: 3 39 | }, 40 | sancionType: { 41 | type: String, 42 | default: "ban" 43 | } 44 | }); 45 | 46 | module.exports = model('AntiRaid', AntiRaidSchema); -------------------------------------------------------------------------------- /Models/AntiRoles.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiRoleSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: true 11 | } 12 | }); 13 | 14 | module.exports = model('AntiRoles', AntiRoleSchema); -------------------------------------------------------------------------------- /Models/AntiTokens.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AntiTokensSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: true 11 | } 12 | }); 13 | 14 | module.exports = model('AntiTokens', AntiTokensSchema); -------------------------------------------------------------------------------- /Models/Apelacion.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const apelacionSchema = new Schema({ 4 | userId: { 5 | type: String, 6 | required: true 7 | } 8 | }); 9 | 10 | module.exports = model('Apelacion', apelacionSchema) -------------------------------------------------------------------------------- /Models/AutoModerador.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const AutoModSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | actived: { 9 | type: Boolean, 10 | default: false 11 | }, 12 | maxWarnMute: { 13 | type: Number, 14 | default: 3 15 | }, 16 | maxWarnKick: { 17 | type: Number, 18 | default: 5 19 | }, 20 | maxWarnBan: { 21 | type: Number, 22 | default: 6 23 | } 24 | }); 25 | 26 | module.exports = model('AutoMod', AutoModSchema); -------------------------------------------------------------------------------- /Models/Blacklist.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const BlacklistSchema = new Schema({ 4 | userId: { 5 | type: String, 6 | required: true 7 | }, 8 | pruebas: { 9 | type: String, 10 | required: true 11 | }, 12 | razon: { 13 | type: String, 14 | required: true 15 | } 16 | }); 17 | 18 | module.exports = model('Blacklist', BlacklistSchema); -------------------------------------------------------------------------------- /Models/CaptchaIntents.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const captchaIntents = new Schema({ 4 | userId: { 5 | type: String 6 | }, 7 | guildId: { 8 | type: String 9 | }, 10 | intents: { 11 | type: Number, 12 | default: 3 13 | } 14 | }); 15 | 16 | module.exports = model('CaptchaIntents', captchaIntents); -------------------------------------------------------------------------------- /Models/Guild.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const guildSchema = new Schema({ 4 | name: { 5 | type: String, 6 | required: true 7 | }, 8 | id: { 9 | type: String, 10 | unique: true, 11 | required: true 12 | } 13 | }); 14 | 15 | module.exports = model('guild', guildSchema); -------------------------------------------------------------------------------- /Models/GuildBackupCreate.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const gbc = new Schema({ 4 | guildName: { 5 | type: String 6 | }, 7 | guildId: { 8 | type: String 9 | }, 10 | backupId: { 11 | type: String 12 | }, 13 | authorId: { 14 | type: String 15 | } 16 | }); 17 | 18 | module.exports = model("GBC", gbc); -------------------------------------------------------------------------------- /Models/LastGuildBackupCreated.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const lgbc = new Schema({ 4 | guildName: { 5 | type: String 6 | }, 7 | guildId: { 8 | type: String, 9 | required: true 10 | }, 11 | backupId: { 12 | type: String 13 | } 14 | }); 15 | 16 | module.exports = model("LGBC", lgbc); -------------------------------------------------------------------------------- /Models/Malicious.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const maliciousSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | punishment: { 9 | type: String, 10 | default: "Marcar" 11 | }, 12 | lastMaliciousDetected: { 13 | type: String, 14 | default: "Nadie." 15 | }, 16 | actived: { 17 | type: Boolean, 18 | default: true 19 | } 20 | }); 21 | 22 | module.exports = model('Malicious', maliciousSchema); -------------------------------------------------------------------------------- /Models/MessageLogs.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const messageLogs = new Schema({ 4 | channelId: { 5 | type: String, 6 | required: true 7 | }, 8 | webhookId: { 9 | type: String, 10 | required: true 11 | }, 12 | webhookToken: { 13 | type: String, 14 | required: true 15 | }, 16 | guildId: { 17 | type: String, 18 | required: true 19 | } 20 | }); 21 | 22 | module.exports = model('MessageLogs', messageLogs); -------------------------------------------------------------------------------- /Models/ModPerms.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const permsSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | roleId: { 9 | type: String, 10 | required: true 11 | }, 12 | allowed: { 13 | type: Array 14 | }, 15 | denied: { 16 | type: Array 17 | } 18 | }); 19 | 20 | module.exports = model('Perms', permsSchema); 21 | -------------------------------------------------------------------------------- /Models/ModRole.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const modRoleSchema = new Schema({ 4 | roleId: { 5 | type: String, 6 | required: true 7 | }, 8 | guildId: { 9 | type: String, 10 | required: true 11 | } 12 | }); 13 | 14 | module.exports = model('ModRole', modRoleSchema); -------------------------------------------------------------------------------- /Models/Muted.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const mutedSchema = new Schema({ 4 | userId: { 5 | type: String, 6 | required: true 7 | }, 8 | guildId: { 9 | type: String, 10 | required: true 11 | } 12 | }); 13 | 14 | module.exports = model('Muted', mutedSchema); -------------------------------------------------------------------------------- /Models/MutedRole.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const mutedRoleSchema = new Schema({ 4 | roleId: { 5 | type: String, 6 | required: true 7 | }, 8 | guildId: { 9 | type: String, 10 | required: true 11 | } 12 | }); 13 | 14 | module.exports = model('MutedRole', mutedRoleSchema); -------------------------------------------------------------------------------- /Models/Prefix.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const prefixSchema = new Schema({ 4 | prefix: { 5 | type: String, 6 | required: true 7 | }, 8 | guildId: { 9 | type: String, 10 | required: true 11 | } 12 | }); 13 | 14 | module.exports = model('Prefix', prefixSchema); -------------------------------------------------------------------------------- /Models/Premium.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const PremiumSchema = new Schema({ 4 | code: { 5 | type: String, 6 | required: true 7 | }, 8 | time: { 9 | type: Number, 10 | required: true 11 | }, 12 | timestamp: { 13 | type: Number 14 | }, 15 | redemmed: { 16 | type: Boolean, 17 | required: true 18 | } 19 | }); 20 | 21 | module.exports = model('PremiumCode', PremiumSchema); -------------------------------------------------------------------------------- /Models/RaidLogs.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const raidLogsSchema = new Schema({ 4 | guildId: { 5 | type: String 6 | }, 7 | channelId: { 8 | type: String 9 | }, 10 | actived: { 11 | type: Boolean 12 | } 13 | }); 14 | 15 | module.exports = model('RaidLogs', raidLogsSchema); -------------------------------------------------------------------------------- /Models/Staff.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const staffSchema = new Schema({ 4 | userId: { 5 | type: String, 6 | required: true 7 | } 8 | }); 9 | 10 | module.exports = model('Staff', staffSchema); -------------------------------------------------------------------------------- /Models/Ticket.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const ticketSchema = new Schema({ 4 | userId: { 5 | type: String 6 | }, 7 | ticketId: { 8 | type: String 9 | }, 10 | channelId: { 11 | type: String 12 | }, 13 | messages: { 14 | type: Array 15 | } 16 | }); 17 | 18 | module.exports = model('Ticket', ticketSchema); -------------------------------------------------------------------------------- /Models/Tickets.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const ticketsSchema = new Schema({ 4 | tickets: { 5 | type: String 6 | } 7 | }); 8 | 9 | module.exports = model('TicketsCount', ticketsSchema); -------------------------------------------------------------------------------- /Models/User.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const userSchema = new Schema({ 4 | id: { 5 | type: String, 6 | required: true, 7 | unique: true 8 | }, 9 | tag: { 10 | type: String, 11 | required: true 12 | }, 13 | avatar: { 14 | type: String, 15 | required: true 16 | }, 17 | guilds: { 18 | type: Array, 19 | required: true 20 | } 21 | }) 22 | 23 | module.exports = model('User', userSchema); -------------------------------------------------------------------------------- /Models/UserFlood.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const UserFloodSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | userId: { 9 | type: String, 10 | required: true 11 | }, 12 | repeated: { 13 | type: Number 14 | }, 15 | warned: { 16 | type: Number 17 | } 18 | }); 19 | 20 | module.exports = model('UserFlood', UserFloodSchema); -------------------------------------------------------------------------------- /Models/UserPremium.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const PremiumSchema = new Schema({ 4 | userId: { 5 | type: String, 6 | required: true 7 | }, 8 | timestamp: { 9 | type: Number 10 | }, 11 | ctimestamp: { 12 | type: Number 13 | } 14 | }); 15 | 16 | module.exports = model('Premium', PremiumSchema); -------------------------------------------------------------------------------- /Models/Verify.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const verify = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | channelId: { 9 | type: String 10 | } 11 | }); 12 | 13 | module.exports = model('Verify', verify); -------------------------------------------------------------------------------- /Models/VerifyRole.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const verifyRole = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | roleId: { 9 | type: String 10 | } 11 | }); 12 | 13 | module.exports = model('verifyRole', verifyRole); -------------------------------------------------------------------------------- /Models/Warn.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const warnSchema = new Schema({ 4 | warnedId: { 5 | type: String, 6 | required: true 7 | }, 8 | warnedTag: { 9 | type: String, 10 | required: true 11 | }, 12 | modId: { 13 | type: String, 14 | required: true 15 | }, 16 | modTag: { 17 | type: String, 18 | required: true 19 | }, 20 | razon: { 21 | type: String, 22 | required: true 23 | }, 24 | guildId: { 25 | type: String, 26 | required: true 27 | }, 28 | warnCreated: { 29 | type: String, 30 | required: true 31 | }, 32 | warnId: { 33 | type: Number, 34 | required: true 35 | } 36 | }); 37 | 38 | module.exports = model('Warn', warnSchema); -------------------------------------------------------------------------------- /Models/Whitelist.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const whitelist = new Schema({ 4 | guildId: { 5 | type : String, 6 | required : true 7 | }, 8 | userId: { 9 | type : String, 10 | required : true 11 | } 12 | }); 13 | 14 | module.exports = model('Whitelist', whitelist); -------------------------------------------------------------------------------- /Models/modLogs.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const ModLogs = new Schema({ 4 | guildId: { 5 | type: String 6 | }, 7 | channelId: { 8 | type: String 9 | }, 10 | actived: { 11 | type: Boolean, 12 | required: true 13 | } 14 | }); 15 | 16 | module.exports = model('ModLogs', ModLogs); -------------------------------------------------------------------------------- /Models/userRaidLogs.js: -------------------------------------------------------------------------------- 1 | const { Schema, model } = require("mongoose"); 2 | 3 | const userRaidSchema = new Schema({ 4 | guildId: { 5 | type: String, 6 | required: true 7 | }, 8 | userId: { 9 | type: String, 10 | required: true 11 | }, 12 | ChannelsCreate: { 13 | type: Number 14 | }, 15 | RolesCreate: { 16 | type: Number 17 | }, 18 | ChannelsDelete: { 19 | type: Number 20 | }, 21 | RolesDelete: { 22 | type: Number 23 | }, 24 | BansNumber: { 25 | type: Number 26 | }, 27 | KickNumber: { 28 | type: Number 29 | }, 30 | guildNameUpdate: { 31 | type: Number 32 | } 33 | }); 34 | 35 | module.exports = model('userRaidLogs', userRaidSchema); -------------------------------------------------------------------------------- /Moderacion/clear.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | 5 | module.exports = { 6 | name: "purge", 7 | aliases: ["clear", "prune"], 8 | description: "Limpia mensajes de el canal en donde se ejecute el comando", 9 | usage: "purge ", 10 | permissions: "MANAGE_MESSAGES", 11 | cooldown: 5, 12 | /** 13 | * @param {Message} message 14 | */ 15 | async execute(message, args, commandName, client, Discord) { 16 | const userRoles = message.member.roles.cache; 17 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 18 | let RolePerm; 19 | findRolePerm.some(d => { 20 | const role = userRoles.find(r => r.id === d.roleId); 21 | if(role) { 22 | RolePerm = role?.id 23 | } 24 | }); 25 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 26 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 27 | if(!message.guild.me.permissions.has("MANAGE_MESSAGES")) { 28 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`MANAGE_MESSAGES\``, allowedMentions: { repliedUser: false } }); 29 | } 30 | const messagesToClear = args[0]; 31 | if(!messagesToClear) { 32 | return message.reply({ content: `${emojis.negativo} | No puedo limpiar \`0\` mensajes`, allowedMentions: { repliedUser: false } }); 33 | } else if(messagesToClear <= 0) { 34 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar no puede ser menor a \`1\``, allowedMentions: { repliedUser: false } }); 35 | } 36 | if(isNaN(messagesToClear)) { 37 | return message.channel.send({ content: `${emojis.negativo} | La cantidad debe ser un número!` }); 38 | } 39 | if(messagesToClear > 100) { 40 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar debe ser menor a \`100\``, allowedMentions: { repliedUser: false } }); 41 | } 42 | message.channel.bulkDelete(messagesToClear, true).then(() => { 43 | message.channel.send({ content: `${emojis.positivo} | \`${messagesToClear}\` mensajes limpiados correctamente` }); 44 | }).catch(e => {}); 45 | } else if(message.member.permissions.has("MANAGE_MESSAGES")) { 46 | if(!message.guild.me.permissions.has("MANAGE_MESSAGES")) { 47 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`MANAGE_MESSAGES\``, allowedMentions: { repliedUser: false } }); 48 | } 49 | const messagesToClear = args[0]; 50 | if(!messagesToClear) { 51 | return message.reply({ content: `${emojis.negativo} | No puedo limpiar \`0\` mensajes`, allowedMentions: { repliedUser: false } }); 52 | } else if(messagesToClear <= 0) { 53 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar no puede ser menor a \`1\``, allowedMentions: { repliedUser: false } }); 54 | } 55 | if(isNaN(messagesToClear)) { 56 | return message.channel.send({ content: `${emojis.negativo} | La cantidad debe ser un número!` }); 57 | } 58 | if(messagesToClear > 100) { 59 | return message.reply({ content: `${emojis.negativo} | La cantidad a limpiar debe ser menor a \`100\``, allowedMentions: { repliedUser: false } }); 60 | } 61 | message.channel.bulkDelete(messagesToClear, true).then(() => { 62 | message.channel.send({ content: `${emojis.positivo} | \`${messagesToClear}\` mensajes limpiados correctamente` }); 63 | }).catch(e => {}); 64 | } else { 65 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /Moderacion/forceban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | 5 | module.exports = { 6 | name: "forceban", 7 | aliases: ["forzar-baneos"], 8 | description: "Banea a los maliciosos que decidas en tu servidor", 9 | permissions: "ADMINISTRATOR", 10 | cooldown: 5, 11 | /** 12 | * @param {Message} message 13 | */ 14 | async execute(message, args, commandName, client, Discord, prefix) { 15 | if(!message.member.permissions.has("ADMINISTRATOR")) { 16 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 17 | } else { 18 | if(!message.guild.me.permissions.has("ADMINISTRATOR")) { 19 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`ADMINISTRADOR\``, allowedMentions: { repliedUser: false } }); 20 | } 21 | return message.reply({ content: `${emojis.mail} | \`Nuestro sistema actualmente se encuentra en proceso de crecimiento, reporta a un usuario con ${prefix}reportar\` `, allowedMentions: { repliedUser: false } }); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Moderacion/hackban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, MessageActionRow, Message, MessageButton } = require("discord.js"); 2 | const emojis = require("../../emojis"); 3 | const Perms = require("../../Models/ModPerms"); 4 | const moment = require("moment"); 5 | 6 | module.exports = { 7 | name: "hackban", 8 | aliases: ["hackbanear"], 9 | description: "Banea a un usuario que no esta en tu servidor", 10 | usage: "hackban ", 11 | permissions: "BAN_MEMBERS", 12 | cooldown: 5, 13 | /** 14 | * @param {Message} message 15 | */ 16 | async execute(message, args, commandName, client, Discord, prefix) { 17 | const userRoles = message.member.roles.cache; 18 | const findRolePerm = await Perms.find({ guildId: message.guild.id }); 19 | let RolePerm; 20 | findRolePerm.some(d => { 21 | const role = userRoles.find(r => r.id === d.roleId); 22 | if(role) { 23 | RolePerm = role?.id 24 | } 25 | }); 26 | const findPerms = await Perms.findOne({ guildId: message.guild.id, roleId: RolePerm }); 27 | if(findPerms?.allowed.includes(commandName) && !findPerms?.denied.includes(commandName)) { 28 | if(!message.guild.me.permissions.has("BAN_MEMBERS")) { 29 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`BAN_MEMBERS\``, allowedMentions: { repliedUser: false } }); 30 | } 31 | const Target = args[0]; 32 | const Razon = args.slice(1).join(" "); 33 | if(!Target) { 34 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una id\``, allowedMentions: { repliedUser: false } }); 35 | } 36 | if(Target === message.author.id) { 37 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearte a ti mismo\``, allowedMentions: { repliedUser: false } }); 38 | } 39 | if(Target === client.user.id) { 40 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearme a mi...\``, allowedMentions: { repliedUser: false } }); 41 | } 42 | if(!Razon) { 43 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una razón del baneo\``, allowedMentions: { repliedUser: false } }); 44 | } 45 | if(Razon.length > 256) { 46 | return message.reply({ content: `${emojis.negativo} | \`La razón no puede ser mayor a 256 caracteres\` `, allowedMentions: { repliedUser: false } }); 47 | } 48 | message.guild.members.ban(Target, { 49 | reason: `${Razon} - ${message.author.tag}` 50 | }).catch(e => {}); 51 | client.users.fetch(Target).then(user => { 52 | message.channel.send({ content: `\`${user.username}\` fue baneado de este servidor.` }); 53 | }).catch(e => { 54 | message.channel.send({ content: "Error: `Ese usuario no existe`" }) 55 | }); 56 | } else if(message.member.permissions.has("BAN_MEMBERS")) { 57 | if(!message.guild.me.permissions.has("BAN_MEMBERS")) { 58 | return message.reply({ content: `No puedo interactuar con este servidor sin los siguientes permisos: \`BAN_MEMBERS\``, allowedMentions: { repliedUser: false } }); 59 | } 60 | const Target = args[0]; 61 | const Razon = args.slice(1).join(" "); 62 | if(!Target) { 63 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una id\``, allowedMentions: { repliedUser: false } }); 64 | } 65 | if(Target === message.author.id) { 66 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearte a ti mismo\``, allowedMentions: { repliedUser: false } }); 67 | } 68 | if(Target === client.user.id) { 69 | return message.reply({ content: `${emojis.negativo} | \`No puedes banearme a mi...\``, allowedMentions: { repliedUser: false } }); 70 | } 71 | if(!Razon) { 72 | return message.reply({ content: `${emojis.negativo} | \`Proporciona una razón del baneo\``, allowedMentions: { repliedUser: false } }); 73 | } 74 | if(Razon.length > 256) { 75 | return message.reply({ content: `${emojis.negativo} | \`La razón no puede ser mayor a 256 caracteres\` `, allowedMentions: { repliedUser: false } }); 76 | } 77 | message.guild.members.ban(Target, { 78 | reason: `${Razon} - ${message.author.tag}` 79 | }).catch(e => {}); 80 | client.users.fetch(Target).then(user => { 81 | message.channel.send({ content: `\`${user.username}\` fue baneado de este servidor.` }); 82 | }).catch(e => { 83 | message.channel.send({ content: "Error: `Ese usuario no existe`" }) 84 | }); 85 | } else { 86 | return message.reply({ content: `${emojis.negativo} | \`No tienes permisos para ejecutar esta acción\` `, allowedMentions: { repliedUser: false } }); 87 | } 88 | } 89 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # apolo-anti-raid 2 | Este es un bot para que protejas tu servidor o lo utilices no se, dale la utilidad que quieras 3 | -------------------------------------------------------------------------------- /emojis.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | negativo: "<:redTick:905736855826341908>", 3 | positivo: "<:greenTick:905736850050805771>", 4 | vote: "<:voteapolo:906775752488415292>", 5 | escudo: "<:escudo:905736854781984778>", 6 | staff: "<:staff:905736871349452800>", 7 | reglas: "<:reglas:905736860393955338>", 8 | slash: "<:slash:905736858078691348>", 9 | mail: "<:mail:905736858644926495>", 10 | cargando: "", 11 | add: "<:add:905736872146403369>", 12 | otros: "<:otros:905736853716627467>", 13 | configuracion: "<:configuracion:905736845869088779>", 14 | seguridad: "<:seguridad:905736862407221260>", 15 | moderacion: "<:moderacion:905736843490902016>", 16 | nueva: "<:nueva:905273177373016094>", 17 | remover: "<:remover:905273177993781279>", 18 | otrospremium: "<:otrospremium:902775710169579532>", 19 | configuracionpremium: "<:configuracionpremium:905736856963002368>", 20 | moderacionpremium: "<:moderacionpremium:905736844719849472>", 21 | seguridadpremium: "<:seguridadpremium:905736851732701184>", 22 | premium: "<:premium:905736852315709471>" 23 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const intents = new Discord.Intents(32767); 3 | const client = new Discord.Client({ intents: intents }); 4 | const mongoose = require("mongoose"); 5 | require("dotenv").config(); 6 | module.exports = client; 7 | const moment = require("moment"); 8 | moment.updateLocale('es', { 9 | months: '01_02_03_04_05_06_07_08_09_10_11_12'.split('_'), 10 | monthsShort: 'Enero._Feb._Mar_Abr._May_Jun_Jul._Ago_Sept._Oct._Nov._Dec.'.split('_'), 11 | weekdays: 'Domingo_Lunes_Martes_Miercoles_Jueves_Viernes_Sabado'.split('_'), 12 | weekdaysShort: 'Dom._Lun._Mar._Mier._Jue._Vier._Sab.'.split('_'), 13 | weekdaysMin: 'Do_Lu_Ma_Mi_Ju_Vi_Sa'.split('_') 14 | }); 15 | 16 | mongoose.connect('tu dbbbbbb'); 17 | 18 | mongoose.connection.on('open', () => console.log("DB Abierta <3")); 19 | 20 | mongoose.connection.on('close', () => console.log("DB Cerrada...")); 21 | 22 | client.cooldowns = new Discord.Collection(); 23 | client.commands = new Discord.Collection(); 24 | 25 | client.on('shardError', (e, s) => { 26 | console.log(`[ERRORS]: Un error ocurrio en el shard #${s}: ${e}`); 27 | }); 28 | 29 | 30 | ['eventsHandler', 'commandsHandler'].forEach(handler => { 31 | require(`./Handlers/${handler}`)(client, Discord); 32 | }); 33 | 34 | client.login(process.env.TOKEN); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "antiraid", 3 | "version": "3.0.3", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node --experimental-modules shard.js", 9 | "dev": "nodemon src/express.js" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "ascii-table": "^0.0.9", 16 | "captcha-canvas": "^3.1.0", 17 | "connect-mongo": "^3.2.0", 18 | "discord-backup": "^3.0.1", 19 | "discord.js": "^13.2.0", 20 | "dotenv": "^10.0.0", 21 | "ejs": "^3.1.6", 22 | "express": "^4.17.1", 23 | "express-session": "^1.17.2", 24 | "moment": "^2.29.1", 25 | "mongoose": "^6.0.12", 26 | "morgan": "^1.10.0", 27 | "ms": "^2.1.3", 28 | "node-fetch": "^3.0.0", 29 | "passport": "^0.5.0" 30 | }, 31 | "devDependencies": { 32 | "nodemon": "^2.0.14" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /password.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {Number} Length 3 | * @returns {String} 4 | */ 5 | module.exports = (Cantidad) => { 6 | 7 | 8 | if (!Cantidad) throw new TypeError("La cantidad no esta definida") 9 | var length = Cantidad, 10 | token = '123456789abcdefghijklmnñopqrstuvwxyzABCDFGHIJKLMNÑOPQRSTUVXYZ', 11 | value = ""; 12 | for (var i = 0, n = token.length; i < length; ++i) { 13 | value += token.charAt(Math.floor(Math.random() * n)); 14 | } 15 | return value; 16 | } -------------------------------------------------------------------------------- /shard.js: -------------------------------------------------------------------------------- 1 | const { ShardingManager } = require("discord.js"); 2 | require("dotenv").config(); 3 | 4 | const shards = new ShardingManager('./index.js', { 5 | token: process.env.TOKEN, 6 | totalShards: "auto" 7 | }); 8 | 9 | shards.on('shardCreate', (shard) => { 10 | console.log(`[${new Date().toString().split(" ", 5).join(" ")}] Iniciando shard #${shard.id}`) 11 | }); 12 | 13 | shards.spawn(shards.totalShards, 10000) 14 | --------------------------------------------------------------------------------