Home > other >  i recieve this error: TypeError: Cannot read properties of undefined (reading 'members') w
i recieve this error: TypeError: Cannot read properties of undefined (reading 'members') w

Time:01-19

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)

CodePudding user response:

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

CodePudding user response:

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 i.e something like below to avoid these run time errors:

if(X) then X.members

OR

X?.members
  •  Tags:  
  • Related