javascript - Discord JS - 当我加入更多公会时,使用 client.guilds 的 .cache 属性是否会导致错误?

标签 javascript caching discord.js future-proof

我正在尝试查找我所有公会的公会所有者 ID,以便在给定时间向他们发送直接消息。在我当前的实现中,我已经知道所有的 guildID,只需迭代它们即可: message.client.guilds.cache.get(guildID).ownerID这目前有效并且很好,但当我增加公会数量时,我想知道它的稳健性。我目前只在 2 个公会进行测试,但可能会达到 1000 个以上。

此网站上的许多旧教程和问题表明不需要使用 .cache message.client.guilds的属性(property)并像这样获得您想要的属性(property) message.client.guilds.get(desired_property)然而,当我尝试遵循他们的建议时,我收到了错误。 This问题与我遇到的问题有类似的问题,但当我使用 .cache 时修复了它。 message.client的属性(property)这解决了我之前的问题。然后我想我找到了原因 this类似问题的回答告诉我all user objects have been cached

当我的公会数量超过 1000 个时,这意味着什么? 不用担心分片,这是我稍后可以考虑的事情。

我对缓存的工作原理不太了解,但是当我进入更多的公会时,这是否会崩溃,因为并非所有的公会都会被缓存,因此当我使用message.client.guilds.cache.get(guildID).ownerID时我是否只能获取那些已缓存的公会的所有者ID,或者机器人所​​在的所有公会一直都被缓存?如果当机器人开始拥有数千个公会时,这并不总是返回所有所有者 ID,因此可能并非所有公会都被缓存,是否有一种方法可以修复它,以便它始终返回所有公会?

最佳答案

您还可以使用.map:

let list = bot.guilds.cache.map(g => g.ownerID).join('\n');
message.channel.send(list)

虽然不确定缓存错误,但我和用户遇到过一些错误,但这是预料之中的。 (使用 .users.fetch 代替,这是一个 promise ,所以如果您要尝试的话,请确保使用 await)

关于javascript - Discord JS - 当我加入更多公会时,使用 client.guilds 的 .cache 属性是否会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62042403/

相关文章:

javascript - jQuery Mobile - 移至下一页/上一页 - 单击后执行操作两次

javascript - mustache 在服务器(rails)和客户端(javascript)上呈现

javascript - React App - 我的警告窗口出现两次

javascript - Discord.js 嵌入图片剧透

javascript - 如何禁止不在服务器中的人

javascript - 如何获取启动文件中的客户端对象?

javascript - 在 Drupal 中使用 Javascript

c++ - 以编程方式获取缓存行大小?

algorithm - 与缓存引用与缓存未命中的比率相比,为什么缓存未命中与指令的比率是缓存性能的更好指标?

performance - 如何清除 MacOSX 上的目录/inode 缓存