(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.users
和Guild.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”