微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 `msg.mentions.users.first` 导致 TypeError `member.roles.map is not a function`?

如何解决为什么 `msg.mentions.users.first` 导致 TypeError `member.roles.map is not a function`?

我想创建一个列出用户当前角色的命令。

但是当我尝试 member.roles.map(roles => `${roles}`).join(',') 或者 message.member.roles.map(role => role.name).slice(1).join(","),它会抛出这个错误

TypeError: member.roles.map is not a function
    at Object.exports.run (c:\Users\Flo\Desktop\discord_Bot\commands\test.js:18:42)
    at Client.<anonymous> (c:\Users\Flo\Desktop\discord_Bot\index.js:32:14)
    at Client.emit (c:\Users\Flo\Desktop\discord_Bot\lib\events.js:388:22)
    at MessageCreateAction.handle (c:\Users\Flo\Desktop\discord_Bot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (c:\Users\Flo\Desktop\discord_Bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (c:\Users\Flo\Desktop\discord_Bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (c:\Users\Flo\Desktop\discord_Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (c:\Users\Flo\Desktop\discord_Bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
    at WebSocket.onMessage (c:\Users\Flo\Desktop\discord_Bot\node_modules\ws\lib\event-target.js:132:16)
    at WebSocket.emit (node:events:376:20) {stack: 'TypeError: member.roles.map is not a function…6)
    at WebSocket.emit (node:events:376:20)',message: 'member.roles.map is not a function'}

这是造成此错误代码

let user;

if (msg.mentions.users.first()) {
  user = msg.mentions.users.first();
} else {
  user = msg.author;
}

解决方法

从 v12 开始,你需要在一些管理器之前添加 .cache,比如 guild#members.cache & client#users.cache。您所要做的就是在 .map 之前添加 .cache ,它就会起作用!

在此处阅读更多相关信息: https://discordjs.guide/additional-info/changes-in-v12.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。