(Discord.js)TypeError:无法读取未定义的属性“添加”

Posted

技术标签:

【中文标题】(Discord.js)TypeError:无法读取未定义的属性“添加”【英文标题】:(Discord.js) TypeError: Cannot read property 'add' of undefined 【发布时间】:2020-12-04 00:13:57 【问题描述】:

代码如下:

const mutedRole = message.guild.roles.cache.find(role => role.name === "Muted");
        
        if (!mutedUser) return message.channel.send()
        if (!message.author) return;
   
        if (!mutedRole) 
            message.guild.roles.create(
                data: 
                  name: 'Muted',
                  color: '#6C877C',
                  permissions: ["CREATE_INSTANT_INVITE", "VIEW_CHANNEL"],
                ,
              )
                .catch(console.error);
        
        mutedUser.roles.add(mutedRole).catch(console.error);

当我运行机器人时,我得到了错误:

2020-08-14T05:22:08.731213+00:00 app[Worker.1]: TypeError: Cannot read property 'add' of undefined
2020-08-14T05:22:08.731236+00:00 app[Worker.1]:     at Object.execute (/app/commands/mute.js:69:29)
2020-08-14T05:22:08.731236+00:00 app[Worker.1]:     at Client.<anonymous> (/app/bread.js:111:14)
2020-08-14T05:22:08.731238+00:00 app[Worker.1]:     at Client.emit (events.js:315:20)
2020-08-14T05:22:08.731239+00:00 app[Worker.1]:     at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
2020-08-14T05:22:08.731241+00:00 app[Worker.1]:     at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
2020-08-14T05:22:08.731242+00:00 app[Worker.1]:     at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
2020-08-14T05:22:08.731242+00:00 app[Worker.1]:     at WebSocketShard.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
2020-08-14T05:22:08.731242+00:00 app[Worker.1]:     at WebSocketShard.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:293:10)
2020-08-14T05:22:08.731243+00:00 app[Worker.1]:     at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:125:16)
2020-08-14T05:22:08.731244+00:00 app[Worker.1]:     at WebSocket.emit (events.js:315:20)

如代码所示,我添加了机器人将扮演角色的部分,就像角色不可用时一样。但是,它仍然认为该角色永远不存在。

在复制之前,我也写了这样的代码:

            if (!mutedRole) 
                guild.roles.create(
                    data: 
                      name: 'Muted',
                      color: '#6C877C',
                      permissions: ["CREATE_INSTANT_INVITE", "VIEW_CHANNEL"],
                    ,
                  )
                    .catch(console.error);
            

结果还是一样。 我还将机器人的角色放在我的测试服务器上所有角色的最顶端。谁能找出原因?

我目前正在使用 discord.js v12 和稳定版本的 node。

注意:完整代码在这里:https://github.com/centralomd/breadbot/blob/master/commands/mute.js

【问题讨论】:

mutedUser 定义在哪里? 完整代码之上:github.com/centralomd/breadbot/blob/master/commands/mute.js 【参考方案1】:

错误来自第 14 行:

const mutedUser = message.mentions.users.first() || message.guild.members.get(args[0])

如果message.mentions.users 集合中没有提及,则您正在尝试使用message.guild.members.get() 获取GuildMember

Discord JS v12 引入了管理器的概念,您将无法再对Client.usersGuild.members 等数据结构直接使用Collection.get() 等Collection 方法。

你必须改变它:

const mutedUser = message.mentions.users.first() || message.guild.members.cache.get(args[0])
if (!mutedUser) return message.channel.send("Invalid user.");

注意:message.mentions.users 也会获得其他公会的用户。我建议你使用message.mentions.members

【讨论】:

以上是关于(Discord.js)TypeError:无法读取未定义的属性“添加”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义的“获取”函数(discord.js)

Discord.js:TypeError:无法读取未定义的属性“删除”

(Discord.js)TypeError:无法读取未定义的属性“添加”

Discord.js:TypeError:无法读取未定义的属性“get”

node.js/discord.js:TypeError:无法读取 null 的属性“setPresence”

discord.js v13 TypeError:无法读取未定义的属性“createMessageCollector”