Discord.js - 获取 GuildMember 的 displayName 给我一个 TypeError
Posted
技术标签:
【中文标题】Discord.js - 获取 GuildMember 的 displayName 给我一个 TypeError【英文标题】:Discord.js - getting a GuildMember's displayName gives me a 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`)
【问题讨论】:
【参考方案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`)
【讨论】:
以上是关于Discord.js - 获取 GuildMember 的 displayName 给我一个 TypeError的主要内容,如果未能解决你的问题,请参考以下文章