2

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

该站点上的许多较旧的教程和问题都建议不需要使用的.cache属性,message.client.guilds只需像这样获得所需的属性message.client.guilds.get(desired_property)但是当我尝试按照他们的建议进行操作时,出现错误。这个问题与我遇到的问题有类似的问题,但是当我使用它解决了我之前的问题的.cache属性时解决了它。message.client然后我想我找到了原因,因为这个对类似问题的回答告诉我所有用户对象都已被缓存

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

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

4

1 回答 1

2

您还可以使用.map

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

虽然不确定缓存错误,但我与用户有过一些错误,但这是意料之中的。(改为使用,这是一个承诺,所以如果你要尝试,请.users.fetch确保使用await )

于 2020-11-12T09:56:08.370 回答