首页 > 解决方案 > 无法读取未定义的属性“添加”,不和谐添加角色

问题描述

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

例如;

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

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

第 2 个人:@Person1 等等等等

现在第 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

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

标签: discorddiscord.js

解决方案


编辑:

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

  2. 问题是client.users.fetch()返回的 auser不像 amember没有角色。因此它为什么返回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)
   }   
}

推荐阅读