无法在 Member.set [as avatar] 处设置未定义的属性“头像”-Discord Bot

我最近没有使用过我的 Discord,但我上次运行它时,它仍然运行良好。但是,这些天我不断收到此错误 Cannot set property 'avatar' of undefined at Member.set [as avatar]

enter image description here

有人能帮我吗?

stack overflow Cannot set property 'avatar' of undefined at Member.set [as avatar] - Discord Bot
原文答案

答案:

作者头像

我在这个问题上挣扎,并最终弄清楚了。这是因为“此”关键字在对象中的代码中以某种方式被劫持。defineProperty调用成员构造函数(我的Index.js中的行2606中的行2606),但是我已经进行了一些其他修复程序,所以您的修复程序可能是不同的,所以您可能是不同的。)。我能够通过将“此”参考引入私人成员并引用该来解决。感觉很骇人听闻,但起作用。像这样:

function Member(client, server, data) {
    copyKeys(data, this, ['user', 'joined_at',]);
    this.id = data.user.id;
    this.joined_at = Date.parse(data.joined_at);
    this.color = colorFromRole(server, this);
    var tempThis = this;
    ['username', 'discriminator', 'bot', 'avatar', 'game'].forEach(function(k) {
        if (k in Member.prototype) return;
        Object.defineProperty(Member.prototype, k, {
            get: function() { return client.users[tempThis.id][k]; },
            set: function(v) { client.users[tempThis.id][k] = v; },
            enumerable: true,
        });
    });
}
作者头像

我刚刚遇到了同样的错误,我自己的机器人完全出乎意料。经过一番调查,我检查了 DiscordClient.handleWSMessage 的代码(在我的错误中,它显示在 index.js:1871:31 而不是 index.js:1891:31,但是我不确定这是否是一个问题安装了不同版本的 discord.io)-无论如何,错误似乎源于响应 GUILD_CREATE 事件的事件切换语句-这对您来说可能有所不同:

case "GUILD_CREATE":
            /*The lib will attempt to create the server using the response from the
            REST API, if the user using the lib creates the server. There are missing keys, however.
            So we still need this GUILD_CREATE event to fill in the blanks.
            If It's not our created server, then there will be no server with that ID in the cache,
            So go ahead and create one.*/
            client.servers[_data.id] = new Server(client, _data);
            return emit(client, message, client.servers[_data.id]);

我不明白为什么会收到 GUILD_CREATE 事件,我的机器人从未被编程来处理这些事件,但是 注释掉上面 switch 案例中的可执行行并用空的 return 语句替换它们 似乎停止了错误发生,并且我的机器人保持连接(到目前为止,我只测试了几分钟)。

作者头像

可能对每个人都不起作用,但是在我的计算机上,此问题由 saving 解决,并且仅在保存后才运行。有点烦人,但奏效了!