如何让discord.js机器人加入新服务器时自动更新「Watching X Servers」状态?
解决Discord.js机器人自动更新服务器数量状态的方法
嘿,我来帮你搞定这个问题!其实不用每次重启机器人,我们只需要监听机器人加入/离开服务器的事件,实时触发状态更新就可以了,具体做法如下:
第一步:封装状态更新函数
先把设置状态的逻辑抽成一个可复用的函数,这样不管是机器人启动时,还是服务器数量变化时,都能直接调用:
function updateServerCountActivity(client) { const currentServerCount = client.guilds.cache.size; client.user.setActivity(`${currentServerCount} Servers | ^help`, { type: 'WATCHING' }) .then(presence => console.log(`Activity updated to: ${presence.activities[0].name}`)) .catch(error => console.error('Failed to update activity:', error)); }
第二步:在Ready事件中初始化状态
保留原来的启动逻辑,调用上面的函数设置初始状态:
client.on('ready', () => { console.log('Ready!'); updateServerCountActivity(client); // 机器人启动时设置初始状态 });
第三步:监听服务器变动事件
添加两个事件监听,当机器人加入新服务器或者离开服务器时,立刻更新状态:
// 加入新服务器时触发更新 client.on('guildCreate', () => { console.log('Joined a new server!'); updateServerCountActivity(client); }); // 离开服务器时触发更新 client.on('guildDelete', () => { console.log('Left a server!'); updateServerCountActivity(client); });
原理说明
guildCreate和guildDelete是Discord.js提供的原生事件,会在机器人加入/离开服务器时实时触发,不需要重启机器人就能捕获到服务器数量变化。- 每次触发事件时,函数都会重新获取最新的服务器缓存数量(
client.guilds.cache.size),再更新机器人的活动状态,确保显示的数字始终准确。
这样设置后,以后机器人被添加到新服务器,状态会自动更新成最新的服务器数量,再也不用手动重启啦!
内容的提问来源于stack exchange,提问作者Najmul190
相关产品推荐
相关产品推荐

