Home⌘ PROJECTS

[🇪🇸] Cler Discord Bot Version 4.7

Multiprospose Discord Bot for Node and PostgreSQL
Oct 01 2024
JavaScript, PostgreSQL
Cler 14 Discord

Cler

Cler

Cler Discord multipurpose bot

Cler es una bot de Discord para administrar tu servidor, cuenta con multiples comandos como de administración, utilidad y de diversión.

Cler's Monitor

Invite Cler on your server

Cler_Info

Lastest Version and What's New

v4.7.20

(Asynchronous Transfer Mode)

  • Usa el prefix. c! o el Slash / Para comandos de moderación
  • Bot en Discord.js v14.16.2

Postdata: Si abandoné este proyecto es porque me aburrí o hice una mejor versión.

ClerAPPS

💻 Installation

Para instalar y ejecutar Cler localmente, sigue estos pasos:

  1. Clona el repositorio:

    #BASH
    1git clone git@github.com:Rawierdt/Cler.git
    2
  2. Navega al directorio del proyecto:

    #BASH
    1cd Cler
    2
  3. Crea un archivo de configuración .env dentro del directorio:

    #BASH
    1BOT_TOKEN=YOUR_BOT_TOKEN
    2CLIENT_ID=YOUR_CLIENT_ID
    3GUILD_ID=YOUR_GUILD_ID
    4PREFIX='YOUR_PREFIX'
    5COLOR='0x5e10f8'
    6OWNER=YOUR_DISCORD_ID
    7
  4. Instala las dependencias:

    #BASH
    1npm install
    2
  5. Ejecuta el comando de carga global:

    #BASH
    1npm deploy-commands.js
    2
  6. Ejecuta el comando de inicio:

    #BASH
    1npm start
    2

    Dirigete a tu servidor de discord al que invitaste a tu bot y ejecuta el comando de /help.

Comandos

Lista completa de comandos en Documentación

Estructura y Diagramación en Repositorio de Github

Admin / Mod

  • /mute <@member> <reason> Silencia al miembro etiquetado.
  • /unmute <@member> <reason> Quita el Silenco del miembro etiquetado.
  • /set_mute <@rol> Define el rol de Mute en el servidor Importante.
  • /ban <@member> <reason> Expulsa del servidor de manera difinitiva al miembro etiquetado.
  • /unban <@member> Revoca la prohibición del comando anterior.
  • /kick <@member> <reason> Expulsa del servidor al miembro etiquetado.
  • /softban <@member> <reason> Expulsa del servidor al miembro etiquetado de manera temporal por 7 dias.
  • /warn <@member> <reason> Notifica al miembro seleccionado

Lista completa de comandos en Documentación

Comandos contextuales

  • Ver Avatar Envia el avatar de un usuario Gif / Imagen.

Lista completa de comandos en Documentación


COMMAND WARN SLASH Y PREFIX

#JAVASCRIPT
1const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js');
2const db = require('megadb');
3const warnDB = new db.crearDB('warnings'); // Usar crearDB para inicializar la base de datos
4
5module.exports = {
6  data: new SlashCommandBuilder()
7    .setName('warn')
8    .setDescription('Advierte a un miembro del servidor.')
9    .addUserOption(option =>
10      option.setName('user')
11        .setDescription('El usuario que deseas advertir')
12        .setRequired(true))
13    .addStringOption(option =>
14      option.setName('reason')
15        .setDescription('Razón de la advertencia')
16        .setRequired(false))
17    .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers), // Permisos de advertencia
18
19  name: 'warn', // Nombre para comandos con prefijo
20  description: 'Advierte a un miembro del servidor.',
21  
22  async executeSlash(interaction) {
23    const member = interaction.options.getMember('user');
24    const reason = interaction.options.getString('reason') || 'No se proporcionó razón.';
25    await this.warnMember(interaction, member, reason);
26  },
27  
28  async executePrefix(message, args) {
29    const member = message.mentions.members.first();
30    const reason = args.slice(1).join(' ') || 'No se proporcionó razón.';
31    if (!member) {
32      //<a:denyxbox:1287542408082358292> son emojis globales, subidos desde discord dev portal
33      return message.reply('<a:denyxbox:1287542408082358292> | Por favor menciona a un usuario válido.');
34    }
35    await this.warnMember(message, member, reason);
36  },
37
38  async warnMember(context, member, reason) {
39    const isInteraction = !!context.isCommand;
40
41    // Verificar si tiene permisos de advertencia (solo en prefijos)
42    if (!isInteraction && !context.member.permissions.has('MODERATE_MEMBERS')) {
43      return context.reply({ content: '<:win11erroicon:1287543137505378324> | No tienes permiso para advertir miembros.', ephemeral: true });
44    }
45
46    if (!member) {
47      return context.reply({ content: '<:440warning:1287542257985126501> | Por favor selecciona a un miembro válido.', ephemeral: true });
48    }
49
50    try {
51      // Intentar enviar un mensaje directo al usuario
52      try {
53        await member.send(`<a:1302moderatorprogramsalumnia:1287542225399709737> Has recibido una advertencia en el servidor ${context.guild.name} por ${context.user.tag}. Razón: ${reason}`);
54      } catch (error) {
55        console.log(`[LOG] No se pudo enviar un mensaje directo a ${member.user.tag}.`);
56      }
57
58      // Registrar advertencia en MegaDB
59      if (!await warnDB.has(`warnings.${member.id}`)) {
60        await warnDB.set(`warnings.${member.id}`, []);
61      }
62      await warnDB.push(`warnings.${member.id}`, { 
63        reason: reason, 
64        moderator: context.user.tag, 
65        timestamp: new Date().toISOString() 
66      });
67
68      // Crear embed para notificar al canal
69      const warnEmbed = new EmbedBuilder()
70        .setColor(0xffff00) // Amarillo
71        .setTitle('<a:1302moderatorprogramsalumnia:1287542225399709737> **ADVERTENCIA**')
72        .setDescription(`${member.user.tag} ha recibido una advertencia.`)
73        .addFields(
74          { name: '<a:9755discordstaffanimated:1287542237571321896> Moderador', value: `${context.user.tag}`, inline: true },
75          { name: '<:discordcopyid:1287542182080679997> Miembro', value: `${member.user.tag}`, inline: true },
76          { name: '<:discordeditprofile:1287542190926467094> Razón', value: reason, inline: false }
77        )
78        .setThumbnail(member.user.displayAvatarURL())
79        .setTimestamp()
80        .setFooter({ text: 'Advertencia registrada', iconURL: context.user.displayAvatarURL() });
81
82      // Enviar el embed como respuesta
83      await context.reply({ embeds: [warnEmbed] });
84
85      // Log en consola
86      console.log(`[LOG] ${context.user.tag} ha advertido a ${member.user.tag} en ${context.guild.name}`);
87    } catch (error) {
88      console.error(error);
89      context.reply({ content: 'Hubo un error al advertir a este miembro.', ephemeral: true });
90    }
91  },
92};
93

El apartado o modulo más complejo es el index.js, pero debido a que es muy largo no pienso ponerlo, recomiendo revisar el github del proyecto.

Pero en resumen el proyecto lo revivi, si lo abandono de nuevo es porque me aburri jajaja, asi que ahora tiene mas comandos y tiene una funcion de guardar, a si, lo aloje en un intel celeron con poca ram, de igual forma en otro blog daré las caracteristicas del NAS y de la PC.


🤝 Contributing

Contributions, issues and feature requests are welcome! Feel free to check issues page.

  1. Haz un Fork del Repositorio: Crea una copia del repositorio en tu cuenta de GitHub.

  2. Crea una Rama:

    #BASH
    1git checkout -b nombre-de-tu-rama
    2
  3. Haz tus Cambios: Realiza las modificaciones que deseas agregar.

  4. Commit y Push:

    #BASH
    1git add .
    2git commit -m "Descripción de los cambios"
    3git push origin nombre-de-tu-rama
    4
  5. Crea un Pull Request: Abre un Pull Request desde tu rama a la rama principal del repositorio.

❤️ Show your support

Give a ⭐️ if this project helped you!

💜 License

Copyright © 2024 Rawier. This project is AGPL licensed.

© 2025