【问题标题】:Discord.js - getting a GuildMember's displayName gives me a TypeErrorDiscord.js - 获取 GuildMember 的 displayName 给我一个 TypeError
【发布时间】:2021-02-10 05:41:33
【问题描述】:

我真的不知道这里发生了什么。我的代码在 Akairo Framework 内,但错误指向 discord.js 本身的各个方向。这是错误:

/home/runner/guard/Listeners/automod/nicknames.js:14
            if (message.member.displayName.includes(word)) {
                               ^

TypeError: Cannot read property 'displayName' of null
    at module.exports.exec (/home/runner/guard/Listeners/automod/nicknames.js:14:32)
    at Client.emit (events.js:327:22)
    at Client.EventEmitter.emit (domain.js:483:12)
    at MessageCreateAction.handle (/home/runner/guard/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (/home/runner/guard/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/home/runner/guard/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (/home/runner/guard/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (/home/runner/guard/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (/home/runner/guard/node_modules/ws/lib/event-target.js:125:16)
    at WebSocket.emit (events.js:315:20)

这是我的代码:(bannedWords 是一个字符串数组,我运行它来检查成员的昵称)(它在 message 事件侦听器中)

const bannedWords = require('./badwords.json').words;
for (const word of bannedWords) {
    if (message.member.displayName.includes(word)) {
        message.member.setNickname(`Moderated Nickname`)
    }
}

【问题讨论】:

    标签: javascript node.js discord.js typeerror


    【解决方案1】:

    TypeError: 无法读取 null 的属性“displayName”

    这意味着“message.member”为空,它找不到属性“displayName”,这是有道理的。

    我认为我们需要查看您的更多代码才能找出问题所在。我猜你正试图在一个不存在的成员对象上运行该 if 语句。

    【讨论】:

      【解决方案2】:

      您的代码中存在一些逻辑缺陷:您没有检查消息是否在 DM 中发送。如果消息确实是 DM,那么 message.member 将为空(因为 DM 通道不属于任何服务器),这几乎可以解释您的错误。

      您应该通过显式检查(并返回)频道是否为 DM 或是否为假值来解决此问题

      //some code ...
      if(!message.member) return;
      for (const word of bannedWords) {
          if (message.member.displayName.includes(word)) {
              message.member.setNickname(`Moderated Nickname`)
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-11-03
        • 2020-07-31
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 2022-01-16
        • 1970-01-01
        • 2020-06-15
        相关资源
        最近更新 更多