You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新Discord bot的服务器成员缓存?

解决方案

问题原因

你当前的代码仅读取执行时刻本地已有的成员缓存快照,既不会主动从Discord服务端拉取最新的全量成员数据,也不会监听成员变动事件自动同步缓存,因此只会拿到一次静态数据。

方案1:手动触发全量缓存更新

如果需要主动拉取最新的成员数据更新缓存,可以调用GuildMemberManager.fetch()方法,使用前需确保:

  • 初始化Bot时已开启GUILD_MEMBERS意图
  • Discord开发者后台已给Bot开启Server Members Intent权限

代码示例:

const list = bot.guilds.cache.get('服务器ID')
// 主动拉取服务端全量成员,自动更新本地缓存
const allMembers = await list.members.fetch()
const allUsers = []
allMembers.each(member => allUsers.push(member.user.id))

方案2:监听事件实现自动缓存更新

如果需要缓存随服务器成员变动自动更新,可以监听以下三个核心事件同步数据:

  • guildMemberAdd:新成员加入服务器时触发
  • guildMemberRemove:成员离开服务器时触发
  • guildMemberUpdate:成员信息(昵称、角色等)变更时触发

代码示例:

// 新成员加入自动同步
bot.on('guildMemberAdd', member => {
  allUsers.push(member.user.id)
})

// 成员离开自动同步
bot.on('guildMemberRemove', member => {
  const targetIndex = allUsers.findIndex(id => id === member.user.id)
  if (targetIndex !== -1) {
    allUsers.splice(targetIndex, 1)
  }
})

// 成员信息变更按需处理
bot.on('guildMemberUpdate', (oldMember, newMember) => {
  // 业务需要感知成员信息变更时在此处编写逻辑
})

注意事项

成员数超过100的服务器默认不会在Bot启动时拉取全量成员缓存,首次获取全量成员必须主动调用fetch()方法

内容的提问来源于stack exchange,提问作者Noam Vardi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:30:05