Quiero que la actividad de mi bot diga "Mirando + Recuento de miembros (no incluye bots)" .
Hice algunos pasos, aquí está mi código:
client.once('ready', () => { setInterval(() => { targetGuild = client.guilds.cache.get('My Guild ID Here') client.user.setPresence({ activities: [{ name: `${targetGuild.memberCount} Users`, type: 'WATCHING' }], status: 'online' }); }, 1000 * 60 * 5); });Lo que necesito es establecer un filtro que calcule solo miembros, no bots.
Usa GuildMemberManager#fetch() para buscar a todos los miembros, luego usa Collection#partition() para dividir la colección de miembros en bots y humans . Use humans.size para mostrar el número de usuarios como desee. También puede usar Collection#filter() para filtrar la colección de miembros solo para los humanos, sin embargo, uso la partición en este ejemplo para tener acceso a ambas partes en una llamada de función.
client.once('ready', async() => { targetGuild = client.guilds.cache.get('My Guild ID Here'); try { const [bots, humans] = (await targetGuild.members.fetch()) .partition(member => member.user.bot); setInterval(() => { client.user.setPresence({ activities: [ { name: `${humans.size} Users`, type: 'WATCHING' } ], status: 'online' }); }, 1000 * 60 * 5); } catch (err) { console.error(err); } });En discord.js v13, el miembro que cuenta con filtrado de bot debería verse así:
setInterval(() => { const guild = client.guilds.cache.get('GUILD_ID'); let humanMembers = guild.members.cache.filter( (user) => !user.user.bot ); const channel = guild.channels.cache.get('CHANNEL_ID'); channel.setName(`👤Member Count Test: ${humanMembers.size.toString()}`); }, 60000); });