así que hago un comando AFK simple como este
client.on('message', message => { if (message.content.includes('!afk')) { message.member.setNickname(`[AFK] ${message.member.displayName} `).catch(error => console.log(error)); } if (message.content === '!back') { message.member.setNickname(message.member.displayName.replace('[AFK] ', )).catch(error => console.log(error)); } });
y quiero Si el usuario es afk y luego el usuario chatea como "hola", el [AFK] se ha ido sin decir el prefijo "! Atrás"
¿Cómo puedo hacer eso?
Gracias por ayudarme (:
Si entiendo correctamente, está solicitando eliminar el estado AFK cuando el jugador escribe algo nuevamente. Hice una solución aproximada usando JS Set que debería funcionar bien con un pequeño conjunto de usuarios, pero puede requerir ajustes adicionales para servidores grandes.
Básicamente, cuando un jugador escribe !afk
, se incluye en el conjunto de jugadores AFK y cuando regresa y escribe algo, su nombre se elimina del conjunto y su apodo se actualiza. No estoy seguro de si existe ( EDITAR : Sí, lo es ), pero la idea principal es mantener un registro de algo único para cada jugador afk.message.member.id
y es el campo correcto para rastrear al jugador
const afkPlayers = new Set(); client.on('message', message => { if (message.content.includes('!afk')) { afkPlayers.add(message.member.id); message.member.setNickname(`[AFK] ${message.member.displayName} `).catch(error => console.log(error)); } if(afkPlayers.member.has(message.member.id)){ afkPlayers.member.delete(message.member.id); message.member.setNickname(message.member.displayName.replace('[AFK] ', )).catch(error => console.log(error)); } });
Realmente no sé cómo funciona Discord y cuándo se activa exactamente el evento de "mensaje", pero me parece que probablemente podría hacerlo incluso sin el set
, como lo propone @ TheCave3:
client.on('message', message => { const pref='[AFK] '; if (message.content.includes('!afk')) message.member.setNickname(pref+message.member.displayName).catch(error => console.log(error)); else if (message.member.displayName.slice(0,pref.length)===pref) message.member.setNickname(message.member.displayName.slice(pref.length)).catch(error => console.log(error)); });