【问题标题】:I get this error: TypeError: Cannot read properties of undefined (reading 'members') whenever I execute command我收到此错误:TypeError: Cannot read properties of undefined (reading 'members') 每当我执行命令
【发布时间】:2022-01-24 21:19:01
【问题描述】:
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 arguments \`${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)
        }

      }
    }
  }
}

这应该是我的机器人调平系统的级别和 xp 编辑命令 我首先对自己进行了测试,但它似乎没有用,我认为我的代码中没有任何错误。它发送这个超长错误:

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)
}

所以有人可以帮助我吗? (如果您需要有关代码的更多信息,请在评论中回复并回复那里的信息)

【问题讨论】:

  • 您在复制错误消息后是否更改了代码?你如何执行run()
  • 我不明白你的问题

标签: javascript node.js discord discord.js bots


【解决方案1】:

每当您看到此错误时,请检查“阅读成员”行(在您的情况下)。这仅仅意味着您正在执行一个密钥访问,其中密钥名称为“members”,并且该密钥为“members”的对象>' 存在是未定义的。例如 X.members 其中 X 未定义。因此请检查您的代码为什么这个“X”(为回答起见而给出的假想名称可能是您唯一的任何名称知道)是未定义的,或者是什么可能使“X”未定义。在发现您应该在访问之前进行检查之后,即如下所示以避免这些运行时错误:

if(X) then X.members

X?.members

查看您的代码,错误来自这里:

const mentionedMember = message.mentions.members.first()

将此行保留在正确的位置,即您对mentionedMember 的所有访问都应发生在此行之后,然后将上面的行更改为:

const mentionedMember = message.mentions?.members.first() 提供的成员有 first() 方法。如果您不确定,那么您也可以这样做const mentionedMember = message.?mentions?.members?.first()

还有一种方法虽然不干净但没问题:

let mentionedMember;
if(message && message.mentions && message.mentions.members) {
 mentionedMember = message.mentions.members.first()
}

【讨论】:

    【解决方案2】:

    在这一行代码中:

     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()
    

    试着这样安排:

     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}\``)
    

    排队: if (!mentionedMember) return message.channel.send('&gt; Mention a valid user / member.'); 你已经调用了 mentionedMember,这是不可读的。

    重新排列代码后,如果错误仍然存​​在,请告诉我

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2021-11-03
      • 2021-11-08
      • 2022-12-16
      • 2021-11-25
      • 2022-08-10
      相关资源
      最近更新 更多