discord.js Role Manager角色不显示 成员角色校验缓存不同步问题
问题原因说明
这个不是框架bug,是discord.js的缓存机制导致的。discord.js默认会缓存所有已经拉取过的成员数据,默认配置下不会自动和服务端同步成员的角色变更信息,所以你修改成员角色后,本地缓存的成员数据还是旧的,才会出现查询结果和实际情况不符的问题,重启机器人会全量重新拉取数据,所以才会恢复正常。
快捷解决方案
你只需要在拉取成员数据时,添加参数强制跳过本地缓存,直接从Discord服务端拉取最新的成员信息即可,修改后的代码如下:
let author = message.author.id let guild = await client.guilds.fetch("guild") // 新增force参数强制拉取最新数据,不走本地缓存 let member = await guild.members.fetch({ user: author, force: true }) member.roles.cache.has("role")
高并发场景优化方案
如果你的机器人需要高频校验成员角色,频繁拉取服务端数据会触发接口限流,可以通过监听成员更新事件自动维护缓存,不需要每次都强制拉取:
// 全局监听成员信息更新事件,自动更新缓存 client.on('guildMemberUpdate', (oldMember, newMember) => { newMember.guild.members.cache.set(newMember.id, newMember) })
配置完成后,你原来的校验代码不需要修改,查询缓存就能拿到最新的角色状态。
内容的提问来源于stack exchange,提问作者Prism
相关产品推荐
相关产品推荐

