获取过去消息的功能停止工作。有啥办法解决吗?

Posted

技术标签:

【中文标题】获取过去消息的功能停止工作。有啥办法解决吗?【英文标题】:Function that gets past messages stopped working. Any way to fix?获取过去消息的功能停止工作。有什么办法解决吗? 【发布时间】:2021-05-02 04:53:04 【问题描述】:

我从另一个*** question 获得了这个功能。我通过将 channel.fetchMessages 更改为 channel.messages.fetch 将其修复为与 Discord.js v12 一起使用。该函数一开始工作并且一切都很好,但是当我启动我的程序时它开始显示这个错误:“TypeError:无法读取未定义的属性'id'”这个错误发生在第55行,即last_id = messages.last().id;我根本没有改变功能,它只是停止工作。有什么想法吗?

    async function lots_of_messages_getter(channel, limit = 6000) 
        const sum_messages = [];
        let last_id;

        while (true) 
            const options =  limit: 100 ;
            if (last_id) 
                options.before = last_id;
            

            const messages = await channel.messages.fetch(options);
            sum_messages.push(...messages.array());
            last_id = messages.last().id;

            if (messages.size != 100 || sum_messages >= limit) 
                break;
            
        

        return sum_messages;
    

【问题讨论】:

【参考方案1】:

因为sum_messages 永远不会大于或等于limit,因为它不是一个数字,它必须是sum_messages.length 并且在收到if(messages.size === 0) 的消息后检查也不会受到伤害

async function lots_of_messages_getter(channel, limit = 6000) 
    const sum_messages = [];
    let last_id;

    while (true) 
        const options =  limit: 100 ;
        if (last_id) 
            options.before = last_id;
        

        const messages = await channel.messages.fetch(options);
        if (messages.size === 0) 
            break;
        
        sum_messages.push(...messages.array());
        last_id = messages.last().id;

        if (messages.size != 100 || sum_messages.length >= limit) 
            break;
        
    

    return sum_messages;

【讨论】:

谢谢,确实帮了我大忙,但我还是不明白它是如何工作的,然后就停止工作了。

以上是关于获取过去消息的功能停止工作。有啥办法解决吗?的主要内容,如果未能解决你的问题,请参考以下文章

Windows资源管理器已停止工作解决办法

更新到 watchOS 6 后,滚动视图停止工作,有啥变化吗?

PayPal Mass Payments 已停止。有啥选择吗? [关闭]

“停止”和“退出”容器有啥区别?

声音剪辑过去可以工作,但现在不行了!有啥问题?

万维网发布服务(w3svc)已停止解决办法