README
Discord-AntiFlood
Discord-AntiFlood es un modulo para evitar el flood y spam en Discord.
Modulo completamente configurable y facil de entender.
El modulo ha sido desarrollado por
tnfAngel
#8642.
Documentación
Definir
- Para declararlo en tu codigo puedes poner lo siguiente:
// Node.js / CommonJS
const antiFlood = require('discord-antiflood');
// TypeScript / ES6
import antiFlood from 'discord-antiflood';
Instanciar
- función
Necesario para que el modulo funcione. Hay que ponerlo debajo de la clase Client de discord.js.
Client
: Instancia de la clase Client de discord.js.
AntiFloodAjustes
: Objeto para configurar el modulo, explicado abajo.
const antiFlood = require('discord-antiflood');
antiFlood(client, antiFloodAjustes); // client es una instancia de Discord.Client, antiFloodAjustes es un objeto explicado justo abajo.
Opciones
- debug
Si el modulo creará mensajes informativos en la consola.
Boolean
: true / false
debug: true
- ignorarBots
Si el modulo ignorará los mensajes de los bots.
Boolean
: true / false
ignorarBots: true
- usuariosIgnorados
Array de IDs de usuarios que el modulo ignorará. Lo puedes dejar en blanco para que no ignore nada (Array vacio).
Array
: [<IDs>]
usuariosIgnorados: [
"ID-USUARIO",
"ID-USUARIO"
]
- servidoresIgnorados
Array de IDs de servidores que el modulo ignorará. Lo puedes dejar en blanco para que no ignore nada (Array vacio).
Array
: [<IDs>]
servidoresIgnorados: [
"ID-SERVIDOR",
"ID-SERVIDOR"
]
- canalesIgnorados
Array de IDs de canales que el modulo ignorará. Lo puedes dejar en blanco para que no ignore nada (Array vacio).
Array
: [<IDs>]
canalesIgnorados: [
"ID-CANAL",
"ID-CANAL"
]
- permisosIgnorados
Array de permisos que el modulo ignorará. Lo puedes dejar en blanco para que no ignore nada (Array vacio).
Array
: [<Permisos>]
permisosIgnorados: [
"MANAGE_MESSAGES",
"MANAGE_GUILD"
]
- infracciones
Array de objetos que se usarán como infracciones. Cada uno debe tener una ID diferente.
Array
: [<Objetos>]
infracciones: [
{
id: "ID-QUE-QUIERAS",
mensajes: 5,
tiempo: 5000,
args: {
nombre: "Argumento que quieras",
sas: "Fresca",
lo: "que quieras"
}
},
{
id: "ID-QUE-QUIERAS-QUE-NO-SE-REPITA",
mensajes: 10,
tiempo: 6000,
args: {
nombre: "Argumento que quieras"
}
}
]
Infracciones
- id
ID unica de la infracción. Puedes poner lo que quieras mientras no se repita.
String
: "ID"
id: "ID-AQUI"
- mensajes
Numero de mensajes en los que esta infracción se activará.
Number
: 123
mensajes: 5
- tiempo
Tiempo en milisegundos que pasará hasta que se resetee el numero de mensajes del usuario.
Number
: 123
tiempo: 5000
- args
Objeto para pasar argumentos desde el evento, puede llevar lo que quieras.
Object
: { }
args: {
hola: "si"
}
Ejemplo de opciones del modulo
let antiFloodAjustes = {
debug: true,
ignorarBots: true,
usuariosIgnorados: [
"ID-USUARIO",
"ID-USUARIO"
],
servidoresIgnorados: [
"ID-SERVIDOR",
"ID-SERVIDOR"
],
canalesIgnorados: [
"ID-CANAL",
"ID-CANAL"
],
permisosIgnorados: [
"MANAGE_MESSAGES",
"MANAGE_GUILD"
],
infracciones: [
{
id: "WARN",
mensajes: 5,
tiempo: 5000,
args: {
nombre: "Advertencia",
sas: "Fresca"
}
},
{
id: "MUTE",
mensajes: 10,
tiempo: 5000,
args: {
nombre: "Muteo"
}
},
{
id: "KICK",
mensajes: 10,
tiempo: 5000,
args: {
nombre: "Expulsión"
}
}
]
};
Eventos
- antiflood-infraccion
Evento emitido cuando un usuario sobrepasa el limite de mensajes de una infracción en el tiempo dado en los ajustes del modulo.
message
: Objeto message de discord.js, el objeto es del mensaje que se consideró flood, da toda la información del miembro, canal y mensaje.
infraccion
: Objeto de infracción, visto anteriormente. Proporciona la id, los mensajes, el tiempo y los argumentos de la infracción.
client.on('antiflood-infraccion', async (message, infraccion) => {
console.log(message, infraccion);
})
Ejemplo de bot completo usando el modulo
const Discord = require('discord.js');
const client = new Discord.Client();
const antiFlood = require('discord-antiflood');
let antiFloodAjustes = {
debug: true,
ignorarBots: true,
usuariosIgnorados: [
"ID-USUARIO",
"ID-USUARIO"
],
servidoresIgnorados: [
"ID-SERVIDOR",
"ID-SERVIDOR"
],
canalesIgnorados: [
"ID-CANAL",
"ID-CANAL"
],
permisosIgnorados: [
"MANAGE_MESSAGES",
"MANAGE_GUILD"
],
infracciones: [
{
id: "WARN",
mensajes: 3,
tiempo: 4000,
args: {
nombre: "Warn",
sas: "Fresca"
}
},
{
id: "MUTE",
mensajes: 6,
tiempo: 5000,
args: {
nombre: "Muteo"
}
},
{
id: "KICK",
mensajes: 10,
tiempo: 6000,
args: {
nombre: "Kick"
}
}
]
};
antiFlood(client, antiFloodAjustes); // Activar el modulo para que reciba y emita eventos.
client.on('antiflood-infraccion', async (message, infraccion) => { // Evento emitido cuando se superan los limites de uno de los objetos del array de infracciones.
if (infraccion.id === "WARN") { // Filtrar las infracciones comprobando su id para dar la sanción correspondiente.
await message.channel.send(`<@${message.author.id}> ¡Deja de hacer flood! Has sido advertido.`);
console.log(`[${infraccion.args.nombre}] ${message.author.tag} Fue advertido por hacer flood en el canal #${message.channel.name}.`);
}
if (infraccion.id === "MUTE") {
if (message.guild.id == "ID-SERVER") {
// Ejemplo de muteo, este se puede ejecutar en cualquier
// servidor, pero solo podemos poner la id del rol de muteado
// de un servidor. Esto se puede solucionar con una base
// de datos que obtenga la id del rol de muteado del server.
if (message.guild.me.hasPermission('MANAGE_ROLES')) {
await message.member.roles.add('ID-ROL-MUTEADO');
await message.channel.send(`<@${message.author.id}> Ha sido muteado por hacer flood.`);
console.log(`[${infraccion.args.nombre}] ${message.author.tag} Fue muteado por hacer flood en el canal #${message.channel.name}.`);
}
}
}
if (infraccion.id === "KICK") {
if (message.guild.me.hasPermission('KICK_MEMBERS')) { // Comprobar que el bot tiene permisos para expulsar miembros.
await message.member.kick('Hacer flood');
await message.channel.send(`<@${message.author.id}> Ha sido expulsado por hacer flood.`);
console.log(`[${infraccion.args.nombre}] ${message.author.tag} Fue expulsado por hacer flood en el canal #${message.channel.name}.`);
}
}
});
// El bot inicia sesion
client.login('token');
Instalación
Si tienes problemas con el modulo puedes unirte al servidor de soporte.
Linux y Windows
- Abre: CMD
- Pon:
npm i discord-antiflood@latest
Mac
- Instala: XCode
- Pon:
npm i discord-antiflood@latest