Estoy construyendo un bot de Discord, más específico, un comando rolecolor. Hice una versión de este comando, que funcionó. El único problema fue que era extremadamente ineficiente, tardó como 5 minutos en responder. Esto se debió a que había muchas declaraciones 'if' y otras cosas que el bot tenía que verificar antes de ejecutar algo. El archivo tenía más de 129 000 líneas y todo mi programa de edición estaba retrasado. Ahora tengo un nuevo plan, que probablemente sea mucho más eficiente:
El bot verifica si un miembro tiene algún rol que comience con "SRC -". SRC significa color del rol del servidor, solo un nombre que tiene cada rol que se dedica a ser cosmético. Todos mis nombres de rol de color comienzan con "SRC - nombre ". Si detecta alguno, elimínelo. Espere este proceso y luego agregue el nuevo color. Tengo como 205 roles para los colores. PUEDO simplemente hacer:
message.guild.members.cache .get(user.id) .roles.remove(roleone); message.guild.members.cache .get(user.id) .roles.remove(roletwo);Esto funciona, pero de nuevo, ineficiente. Discord no es tan rápido eliminando y agregando roles. Cuando realicé una prueba, no me dio ningún error. A pesar de esto, pensé que algo andaba mal porque mis roles no cambiaban. Cuando estaba ejecutando una depuración y verifiqué nuevamente, los roles finalmente se actualizaron. Solo toma un tiempo antes de actualizar. Me gustaría tener esto más eficiente. Aquí hay algunos ejemplos de código:
Adición de funciones, después de la eliminación de funciones:
if (args[0] === "1") { message.guild.members.cache .get(user.id) .roles.add(roleone); message.channel.send(errmsg); console.log(logmsg); else if (args[0] === "2") //etc Entonces, mi pregunta es, ¿alguien sabe cómo detectar si el miembro tiene roles que comienzan con name , de modo que solo se puedan eliminar esos roles?
.remove() toma un RoleResolvable , Array of RoleResolvable s o una Collection de RoleResolvable s. Puedes filtrar los roles y pasarlo
const member = message.guild.members.resolve(user.id) const roles = member.roles.cache.filter(r => r.name.startsWith(`SRC -`)) await member.roles.remove(roles) // remove all roles from the member that start with "SRC -"