#javascript #node.js #discord.js #typeerror
#javascript #node.js #discord.js #ошибка типа
Вопрос:
Я действительно не знаю, что здесь происходит. Мой код находится внутри фреймворка Akairo, но ошибка указывает во всех направлениях на 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:
В вашем коде есть небольшой логический недостаток: вы не проверяете, было ли сообщение отправлено в DMS. Если сообщение действительно было DM, то message.member
оно было бы null (поскольку каналы DM не являются частью какого-либо сервера), что в значительной степени объясняет вашу ошибку.
Вы должны исправить это, либо явно проверив (и вернув), является ли канал DM, либо если это ложное значение
//some code ...
if(!message.member) return;
for (const word of bannedWords) {
if (message.member.displayName.includes(word)) {
message.member.setNickname(`Moderated Nickname`)
}
}
Ответ №2:
Ошибка типа: не удается прочитать свойство ‘DisplayName’ из null
Это означает, что «message.member» имеет значение null и не может найти свойство «DisplayName», что тогда имеет смысл.
Я думаю, нам нужно просмотреть больше вашего кода, чтобы выяснить, где что-то пошло не так. Я предполагаю, что вы пытаетесь запустить этот оператор if для объекта-члена, который не существует.