简体   繁体   中英

i recieve this error: TypeError: Cannot read properties of undefined (reading 'members') whenever i execute command

const levels = require('discord-xp')
const { MessageEmbed } = require('discord.js')
const client = require('../../index')

module.exports = {
  name: "edit",
  description: "Edits a users level or xp",
  usage: ".edit <user> [xp / level] [add / set / remove] <number>",
  developersOnly: true,

  run: async (message, args, client) => {
    const usage = ".edit <user> [xp / level] [add / set / remove] <number>"
    if (!args[0]) return message.channel.send(`> You need to state more arguements \`${usage}\``)
    if (!mentionedMember) return message.channel.send(`> Mention a valid user / member.`);
    if (!args[1]) return message.message.channel.send(`> You must state if you are editing the member's level or xp: \`${usage}\``)
    const mentionedMember = message.mentions.members.first()
    if (!['xp', 'level'].includes(args[1])) return message.channel.send(`> You did not specify if you are changing level or xp: \`${usage}\``)
    if (args[1] === "xp") {
      if (!['add', 'set', 'remove'].includes(args[2])) return message.channel.send(`You did not state if you're adding, setting, or removing`)
      const value = Number(args[3]);
      let levelUser = await Levels.fetch(mentionedMember.user.id, message.guild.id)
      if (!levelUser) return message.channel.send('> That person isnt in the database yet.')
      if (args[2] === 'add') {
        if (!value) return message.channel.send('> That is not a valid number')
        try {
          await Levels.appendXp(mentionedMember.user.id, message.guild.id, value)
          message.channel.send(`> Added \`${value}\` xp to ${mentionedMember}`)
        } catch (err) {
          console.log(err)
        }
      } else if (args[2] === 'remove') {
        if (!value) return message.channel.send('> That is not a valid number')
        try {
          await Levels.subtractXp(mentionedMember.user.id, message.guild.id, value)
          message.channel.send(`> Removed \`${value}\` xp to ${mentionedMember}`)
        } catch (err) {
          console.log(err)
        }

      } else if (args[2] === 'set') {
        if (!value) return message.channel.send('> That is not a valid number')
        try {
          await Levels.setXp(mentionedMember.user.id, message.guild.id, value)
          message.channel.send(`> Set ${mentionedMember}'s xp to \`${value}\``)
        } catch (err) {
          console.log(err)
        }

      }
    } else if (args[1] === 'level') {
      if (!['add', 'set', 'remove'].includes(args[2])) return message.channel.send(`You did not state if you're adding, setting, or removing`)
      const value = Number(args[3]);
      let levelUser = await Levels.fetch(mentionedMember.user.id, message.guild.id)
      if (!levelUser) return message.channel.send('> That person isnt in the database yet.')
      if (args[2] === 'add') {
        if (!value) return message.channel.send('> That is not a valid number')
        try {
          await Levels.appendLevel(mentionedMember.user.id, message.guild.id, value)
          message.channel.send(`> Added \`${value}\` level(s) to ${mentionedMember}`)
        } catch (err) {
          console.log(err)
        }
      } else if (args[2] === 'remove') {
        if (!value) return message.channel.send('> That is not a valid number')
        try {
          await Levels.subtractLevel(mentionedMember.user.id, message.guild.id, value)
          message.channel.send(`> Removed \`${value}\` level(s) to ${mentionedMember}`)
        } catch (err) {
          console.log(err)
        }

      } else if (args[2] === 'set') {
        if (!value) return message.channel.send('> That is not a valid number')
        try {
          await Levels.setLevel(mentionedMember.user.id, message.guild.id, value)
          message.channel.send(`> Set ${mentionedMember}'s level to \`${value}\``)
        } catch (err) {
          console.log(err)
        }

      }
    }
  }
}

This is supposed to be a level and xp edit command for my bots leveling system i tested it on my self first but it didnt seem to work and i dont think theres any errors in my code. It send this super long error:

TypeError: Cannot read properties of undefined (reading 'members')
    at Object.run (/home/runner/sung-jin-woo/commands/leveling/edit.js:13:46)
    at Client.<anonymous> (/home/runner/sung-jin-woo/events/guild/messageCreate.js:124:18)
    at Client.emit (node:events:402:35)
    at MessageCreateAction.handle (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/actions/MessageCreate.js:25:14)
    at Object.module.exports [as MESSAGE_CREATE] (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/WebSocketManager.js:350:31)
    at WebSocketShard.onPacket (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/WebSocketShard.js:443:22)
    at WebSocketShard.onMessage (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/WebSocketShard.js:300:10)
    at WebSocket.onMessage (/home/runner/sung-jin-woo/node_modules/ws/lib/event-target.js:199:18)
    at WebSocket.emit (node:events:390:28)
    at Receiver.receiverOnMessage (/home/runner/sung-jin-woo/node_modules/ws/lib/websocket.js:1022:20)
    at Receiver.emit (node:events:390:28)
    at Receiver.dataMessage (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:522:14)
    at Receiver.getData (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:440:17)
    at Receiver.startLoop (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:148:22)
    at Receiver._write (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:83:10) Promise {
  <rejected> TypeError: Cannot read properties of undefined (reading 'members')
      at Object.run (/home/runner/sung-jin-woo/commands/leveling/edit.js:13:46)
      at Client.<anonymous> (/home/runner/sung-jin-woo/events/guild/messageCreate.js:124:18)
      at Client.emit (node:events:402:35)
      at MessageCreateAction.handle (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/actions/MessageCreate.js:25:14)
      at Object.module.exports [as MESSAGE_CREATE] (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
      at WebSocketManager.handlePacket (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/WebSocketManager.js:350:31)
      at WebSocketShard.onPacket (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/WebSocketShard.js:443:22)
      at WebSocketShard.onMessage (/home/runner/sung-jin-woo/node_modules/discord.js/src/client/websocket/WebSocketShard.js:300:10)
      at WebSocket.onMessage (/home/runner/sung-jin-woo/node_modules/ws/lib/event-target.js:199:18)
      at WebSocket.emit (node:events:390:28)
      at Receiver.receiverOnMessage (/home/runner/sung-jin-woo/node_modules/ws/lib/websocket.js:1022:20)
      at Receiver.emit (node:events:390:28)
      at Receiver.dataMessage (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:522:14)
      at Receiver.getData (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:440:17)
      at Receiver.startLoop (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:148:22)
      at Receiver._write (/home/runner/sung-jin-woo/node_modules/ws/lib/receiver.js:83:10)
}

so like can someone help me? (if you need any more info about code say it in comment ill reply with the info there)

In this line code:

 if (!mentionedMember) return message.channel.send(`> Mention a valid user / member.`);
 if (!args[1]) return message.message.channel.send(`> You must state if you are editing the member's level or xp: \`${usage}\``)
 const mentionedMember = message.mentions.members.first()

Try to arrange this like:

 const mentionedMember = message.mentions.members.first()
 if (!mentionedMember) return message.channel.send(`> Mention a valid user / member.`);
 if (!args[1]) return message.message.channel.send(`> You must state if you are editing the member's level or xp: \`${usage}\``)

In line: if (.mentionedMember) return message.channel.send('> Mention a valid user / member;'); you already calling the mentionedMember which is its not readable.

Let me know if the error still there after you rearrange your code

Whenever you see this error, check the line 'reading members'(in your case). That simply means you are doing a key access where keyname is ' members ' and object inside which this key ' members ' is present is undefined. For example X.members where X is undefined.So check in your code why this 'X'(imaginary name given for the sake of answer could be any name that you only know) is undefined or what could make that 'X' undefined. And after finding that you should put a check before doing the access ie something like below to avoid these run time errors:

if(X) then X.members

OR

X?.members

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM