我正在尝试查找我所有公会的公会所有者 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/