【问题标题】:Cannot read property 'add' of undifined, Discord add role无法读取未定义的属性“添加”,不和谐添加角色
【发布时间】:2021-01-06 09:50:11
【问题描述】:

所以我决定开始制作一个非常简单的 Discord 机器人,如果不同的成员具有相同的角色,它应该给一个成员一个角色,

例如;

第一个人:我有被感染的角色

第 2 个人:我没有被感染的角色。

第 2 个人:@Person1 blah blah blah

现在第 2 个人应该接收到受感染的角色,但不会发生这种情况,而且我无法找到修复它的方法。

const Discord = require('discord.js');
const client = new Discord.Client();

client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
console.log("rerararararrederasd")

var infectionStarted = true; client.on("message", message => {
    if (infectionStarted) {
          try{ let role = message.guild.roles.cache.find(r => r.name === 'infected');
              client.users.cache.get(message.mentions.members.first().id).roles.add(role);}catch(e){console.log(e)};
    }
});

client.login('my discord bots token ofc goes here i just removed for stackoverflow');

但是在控制台中我得到了这个问题报告:

    at Client.emit (events.js:196:13)
    at MessageCreateAction.handle (/rbd/pnpm-volume/ec7e49f1-7b76-4ef8-9653-1982138496c7/node_modules/.registry.npmjs.org/discord.js/12.3.1/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (/rbd/pnpm-volume/ec7e49f1-7b76-4ef8-9653-1982138496c7/node_modules/.registry.npmjs.org/discord.js/12.3.1/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/rbd/pnpm-volume/ec7e49f1-7b76-4ef8-9653-1982138496c7/node_modules/.registry.npmjs.org/discord.js/12.3.1/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (/rbd/pnpm-volume/ec7e49f1-7b76-4ef8-9653-1982138496c7/node_modules/.registry.npmjs.org/discord.js/12.3.1/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (/rbd/pnpm-volume/ec7e49f1-7b76-4ef8-9653-1982138496c7/node_modules/.registry.npmjs.org/discord.js/12.3.1/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (/rbd/pnpm-volume/ec7e49f1-7b76-4ef8-9653-1982138496c7/node_modules/.registry.npmjs.org/ws/7.3.1/node_modules/ws/lib/event-target.js:125:16)
    at WebSocket.emit (events.js:196:13)
    at Receiver.receiverOnMessage (/rbd/pnpm-volume/ec7e49f1-7b76-4ef8-9653-1982138496c7/node_modules/.registry.npmjs.org/ws/7.3.1/node_modules/ws/lib/websocket.js:797:20)
TypeError: Cannot read property 'add' of undefined

这可能很明显,但我不知道如何解决这个问题,如果你能帮助我,我将不胜感激,谢谢!

【问题讨论】:

    标签: discord discord.js


    【解决方案1】:

    编辑:

    1. 我建议更好地构建代码以及解构变量。

    2. 问题是client.users.fetch() 返回一个user,它不像member 没有角色。这就是为什么它返回undefined

    client.on("message", message => {
       const infectionStarted = true
       const role = message.guild.roles.cache.find(r => r.name === 'infected')
       
       // have 'member' = the mentioned member
       const member = message.mentions.members.first()
    
       // If there was a mention, add the role to the mentioned
       if (member) {
          // Instead of fetching the user through Discord, I add the role directly to the member object like this
          member.roles.cache.add(role)
       }   
    }
    

    【讨论】:

    • TypeError: Cannot read property 'cache' of undefined 我现在收到您的解决方案的此错误。 :(
    • 我编辑了我的答案。这应该使代码更易于阅读和排除故障
    • 我刚刚添加了您的代码并将其添加到机器人中,还添加了所有其他必要的东西,但现在我遇到了控制台说的问题; TypeError: member.roles.cache.add is not a function
    • 确保您的消息事件与您的就绪事件是分开的,而不是在其中
    猜你喜欢
    • 2021-04-07
    • 2021-04-18
    • 2021-08-10
    • 2021-04-07
    • 2022-01-27
    • 2021-05-18
    • 2021-10-05
    • 2021-07-24
    • 2018-02-06
    相关资源
    最近更新 更多