【问题标题】:Discord JS - Will using the .cache property of client.guilds cause an error further down the line when I am in more guilds?Discord JS - 当我在更多公会中时,使用 client.guilds 的 .cache 属性会导致错误吗?
【发布时间】:2020-09-14 10:51:03
【问题描述】:

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

本网站上的许多较旧的教程和问题都建议不需要使用message.client.guilds.cache 属性,而只需像message.client.guilds.get(desired_property) 这样获得所需的属性但是当我尝试按照他们的建议进行操作时,我得到了一个错误。 This 问题与我遇到的问题有类似的问题,但是当我使用 message.client.cache 属性时修复了它,这解决了我以前的问题。然后我想我找到了原因,因为this 对类似问题的回答告诉我all user objects have been cached

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

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

【问题讨论】:

    标签: javascript caching discord.js future-proof


    【解决方案1】:

    你也可以使用.map:

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

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

    【讨论】:

    • 谢谢,现在一切都整理好了。事实证明,您可以在客户端类上设置缓存设置,并始终从您需要的 API 中获取,以确保您 .fetch 带有承诺
    猜你喜欢
    • 2015-07-08
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2012-05-18
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多