[英]Discord.js Guild Member Count in Status will not be updated if someone leaves
我有一个统计服务器成员的状态。 只要有人进来,机器人就会更新。 但是如果有人离开,则不会发生更新。
client.on('ready', () => {
// Auto Change Status
function picksStatus() {
let status = [`mit ${client.users.cache.filter(u => !u.bot).size} User`, `${prefix}help für Hilfe`];
let statusRotate = Math.floor(Math.random() * status.length);
client.user.setActivity(status[statusRotate], {
type: 'PLAYING'
})
}
client.user.setStatus('dnd')
setInterval(picksStatus, 5000)
console.log(`Logged in as ${client.user.tag} ${client.users.cache.filter(u => !u.bot).size} Member auf ceqoX`);
});
我认为这是由于用户缓存(当新用户加入并且机器人没有缓存它们时,它会缓存它们=> 增加缓存大小,但据我所知,用户离开机器人的所有服务器in 不会导致机器人将其从缓存中删除)。 此外,您的代码似乎显示了机器人缓存的所有用户,因此在机器人所在的所有服务器中(如果机器人是仅用于一台服务器的个人机器人,这可能不是问题)。
但是假设你想显示一个特定服务器的成员数量(这就是阅读你的问题的方式),你可以使用这样的东西:
client.on('ready', async() => {
const timer = (ms) => new Promise((res) => setTimeout(res, ms));
// Auto Change Status
async function statusChanging() {
let guild = await client.guilds.fetch("your_guild_id");
let members = (await guild.members.fetch()).filter(m => !m.user.bot);
let membersAmount = members.size;
let status = [`mit ${membersAmount} User`, `${prefix}help für Hilfe`];
let statusRotate = Math.floor(Math.random() * status.length);
client.user.setActivity(status[statusRotate], {
type: 'PLAYING'
});
};
client.user.setStatus('dnd');
console.log(`Logged in as ${client.user.tag} ${client.users.cache.filter(u => !u.bot).size} Member auf ceqoX`);
//Someone may have a better way of doing this, but basically this should basically run the function 5 seconds after it finishes (so if it takes 6 seconds to execute, it won't be started in the meantime, but it will be restarted 5 seconds after it finishes executing
while(true) {
await statusChanging();
await timer(5000);
};
});
这应该可以解决问题。
此外,如果您在开发人员页面中打开了服务器成员意图,则可以使用此功能:
function statusChanging() {
const guild = client.guilds.cache.get("845590775450304512");
const members = guild.members.cache.filter(m => !m.user.bot);
const membersAmount = members.size;
let status = [`mit ${membersAmount} User`, `${prefix}help für Hilfe`];
let statusRotate = Math.floor(Math.random() * status.length);
client.user.setActivity(status[statusRotate], {
type: 'PLAYING'
});
};
它直接扫描缓存,并且机器人应该缓存所有成员(在您的机器人位于 100 个服务器后,意图需要将其列入白名单,但很容易被列入白名单 + 看起来这是一个个人机器人,所以它应该')。 .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .不是问题)。 我只是建议它,因为现在为我执行提取函数需要很长时间,而缓存函数在几毫秒内完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.