Discord.js , не удается прочитать свойство «user» из null

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

У меня проблема, которую я вообще не могу понять. Функция, работающая на моем сервере и не работающая на другом. Вот мой код:

 const user = message.author;
let servericon = message.guild.iconURL;
let serverembed = new Discord.MessageEmbed()
.setAuthor(message.author.username, auser.displayAvatarURL({ format: 'png' }))
.setTitle("Информация о сервере")
.setColor("RANDOM")
.setThumbnail(servericon)
.addField("Название сервера :", message.guild.name)
.addField("Владелец :", `${message.guild.owner.user.tag}`, true)
.addField("Каналы :", message.guild.channels.cache.size, true)
.addField("Роли :", message.guild.roles.cache.size, true)
.addField("Сервер создан :", `${moment(message.guild.createdAt).format('MMMM Do YYYY')}`)
.addField("Пользователей :", message.guild.memberCount)
.setThumbnail(message.guild.iconURL())
.setTimestamp()
message.channel.send(serverembed);
 

И ошибка — это:
(узел: 11288) Предупреждение о необработанном promiserejectionwarning: ошибка типа: не удается прочитать свойство «user» с нулевым
значением в Object.run (C:UsersalumetryuDesktopbotcommandsinfoserverinfo.js:20:48 )
на клиенте. (C:UsersalumetryuDesktopbotameindex.js:38:17 )
в Client.emit (events.js:315:20)
при MessageCreateAction.обработайте (C:Usersalumetryunode_modulesdiscord.jssrcclientactionsMessageCreate.js:31:14 )
в Object.module.exports [как MESSAGE_CREATE] (C:Usersalumetryunode_modulesdiscord.jssrcclientwebsockethandlersMESSAGE_CREATE.js:4:32 )
в WebSocketManager.handlePacket (C:Usersalumetryunode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:384:31 )
в WebSocketShard.onPacket (C:Usersalumetryunode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:444:22 )
в WebSocketShard.onMessage (C:Usersalumetryunode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:301:10 )
в WebSocket.onMessage (C:Usersalumetryunode_moduleswslibevent-target.js:125:16 )
в WebSocket.emit (events.js:315:20)
в Receiver.receiverOnMessage (C:Usersalumetryunode_moduleswslibwebsocket.js:797:20 )
в Receiver.emit (events.js:315:20)
в приемнике.Сообщение данных (C:Usersalumetryunode_moduleswslibreceiver.js:437:14 )
в Receiver.getData (C:Usersalumetryunode_moduleswslibreceiver.js:367:17 )
в приемнике.startLoop (C:Usersalumetryunode_moduleswslibreceiver.js:143:22 )
в приемнике._write (C:Usersalumetryunode_moduleswslibreceiver.js:78:10 )
в doWrite (_stream_writable.js:403:12)
в writeOrBuffer (_stream_writable.js:387:5)
в Приемнике.Доступен для записи.запись (_stream_writable.js:318:11)
в TLSSocket.Сокет — данные (C:Usersalumetryunode_moduleswslibwebsocket.js:872:35 )
в TLSSocket.emit (events.js:315:20)
в addChunk (_stream_readable.js:295:12)
(узел: 11288) Предупреждение о необработанном promiserejectionwarning: отклонение необработанного обещания. Эта ошибка возникла либо из-за включения асинхронной функции без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch(). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict (см https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode ). (идентификатор отклонения: 1)
(узел: 11288) [DEP0018] Предупреждение об устаревании: необработанные отклонения обещаний не рекомендуются. В будущем отклонения обещаний, которые не обрабатываются, приведут к прекращению Node.js процесс с ненулевым кодом выхода.

Комментарии:

1. Предполагая, что ошибка находится в показанном вами коде, можно предположить, что message.guild.owner это значение равно нулю, вы можете проверить, равно ли оно нулю, addField("Владелец :", `${(message.guild.owner ? message.guild.owner.user.tag : "-")}`, true)

2. Спасибо, shoejep, за помощь мне. Я решил это!!!

Ответ №1:

Это потому, что владелец гильдии не кэшируется. Вместо этого вручную fetch() GuildMember с помощью Guild.prototype.ownerID

 // make sure the function is async!
const owner = await message.guild.members.fetch(message.guild.ownerID);
const serverembed = new Discord.MessageEmbed().addField(
 'Владелец :',
 `${message.guild.owner.user.tag}`,
 true
);
 

Комментарии:

1. Рад, что смог помочь!

Ответ №2:

Я не уверен, в какой именно строке проблема, потому что строки не пронумерованы в stackoverflow, но я предполагаю, что проблема в строке, в которой говорится .addField("Владелец :", ${message.guild.owner.user.tag} , true) — я предполагаю, что вы пытаетесь получить владельца, если да, то вот как message.guild.owner — Кстати, для тех, кто этого не делаетзнайте, гильдия — это в основном сервер. Таким образом, каждая гильдия — это каждый сервер, на котором находится бот. message.guild означает гильдию / сервер, с которого было отправлено сообщение. Принимая его еще глубже, message.guild.владелец, является владельцем гильдии / серверов. Если у вас есть какие-либо вопросы, не стесняйтесь отвечать на этот пост

Комментарии:

1. @alumetryu хорошая работа! Я вижу, вы новичок в stack overflow, добро пожаловать в сообщество!