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

Posted

技术标签:

【中文标题】无法在 Member.set [as avatar] 处设置未定义的属性“头像”-Discord Bot【英文标题】:Cannot set property 'avatar' of undefined at Member.set [as avatar] - Discord Bot 【发布时间】:2021-08-12 15:42:18 【问题描述】:

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

有人可以帮我吗?

【问题讨论】:

【参考方案1】:

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

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 语句替换它们 似乎停止了错误的发生,并且我的机器人保持连接(到目前为止,我只测试了几分钟)。

【讨论】:

【参考方案2】:

我一直在努力解决这个问题,最终弄明白了。这是因为“this”关键字在成员构造函数内的 Object.defineProperty 调用中的代码中以某种方式被劫持(我的 index.js 版本中的第 2606 行,但我已经进行了一些其他修复,所以你的可能不同)。我能够通过将“this”引用缓存到私有成员并改为引用它来修复它。感觉很hacky,但它有效。像这样:

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,
        );
    );

【讨论】:

很好,为我节省了很多时间。是否已向软件包报告此错误?【参考方案3】:

可能不适用于所有人,但在我的计算机上,此问题已通过 保存 解决,并且仅在我保存后运行。有点烦人,但它有效!

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于无法在 Member.set [as avatar] 处设置未定义的属性“头像”-Discord Bot的主要内容,如果未能解决你的问题,请参考以下文章

展开 Optional 值时意外发现 nil

无法释放对象

在 Laravel 中更新用户配置文件

从服务器 SMACK Android XMPP 获取 VCard Avatar iq 数据包

discord.py 2.0 url 作为函数不起作用

Unity Avatar Cover System - 如何实现一个Avatar角色的智能掩体系统