【问题标题】:Discord.js, cannot read property "user" of nullDiscord.js,无法读取 null 的属性“用户”
【发布时间】:2021-03-08 10:35:56
【问题描述】:

我有一个问题,我完全无法理解。 该功能在我的服务器上工作,而不是在另一个服务器上工作。 这是我的代码:

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)UnhandledPromiseRejectionWarning:TypeError:无法读取 null 的属性“用户” 在 Object.run (C:\Users\alumetryu\Desktop\bot\commands\info\serverinfo.js:20:48) 在客户端。 (C:\Users\alumetryu\Desktop\bot\ame\index.js:38:17) 在 Client.emit (events.js:315:20) 在 MessageCreateAction.handle (C:\Users\alumetryu\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14) 在 Object.module.exports [as MESSAGE_CREATE] (C:\Users\alumetryu\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32) 在 WebSocketManager.handlePacket (C:\Users\alumetryu\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31) 在 WebSocketShard.onPacket (C:\Users\alumetryu\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22) 在 WebSocketShard.onMessage (C:\Users\alumetryu\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10) 在 WebSocket.onMessage (C:\Users\alumetryu\node_modules\ws\lib\event-target.js:125:16) 在 WebSocket.emit (events.js:315:20) 在 Receiver.receiverOnMessage (C:\Users\alumetryu\node_modules\ws\lib\websocket.js:797:20) 在 Receiver.emit (events.js:315:20) 在 Receiver.dataMessage (C:\Users\alumetryu\node_modules\ws\lib\receiver.js:437:14) 在 Receiver.getData (C:\Users\alumetryu\node_modules\ws\lib\receiver.js:367:17) 在 Receiver.startLoop (C:\Users\alumetryu\node_modules\ws\lib\receiver.js:143:22) 在 Receiver._write (C:\Users\alumetryu\node_modules\ws\lib\receiver.js:78:10) 在 doWrite (_stream_writable.js:403:12) 在 writeOrBuffer (_stream_writable.js:387:5) 在 Receiver.Writable.write (_stream_writable.js:318:11) 在 TLSSocket.socketOnData (C:\Users\alumetryu\node_modules\ws\lib\websocket.js:872:35) 在 TLSSocket.emit (events.js:315:20) 在 addChunk (_stream_readable.js:295:12) (节点:11288)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1) (节点:11288)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

【问题讨论】:

  • 假设错误出现在您显示的代码中,则表明message.guild.owner为空,您可以检查它是否为空,addField("Владелец :", `${(message.guild.owner ? message.guild.owner.user.tag : "-")}`, true)
  • 谢谢你,shoejep,帮助我。我已经解决了!!!

标签: javascript node.js discord.js


【解决方案1】:

我不确定问题出在哪一行,因为这些行在 stackoverflow 中没有编号,但我假设问题出在说 .addField("Владелец :", ${message.guild.owner.user.tag} , true) - 我猜你是想找主人,如果是这样,这就是message.guild.owner - 顺便说一句,对于不知道的人来说,公会基本上是一个服务器。所以每个公会,就是机器人所在的每个服务器。 message.guild,表示发送消息的公会/服务器。更深入地了解,message.guild.owner 是公会/服务器所有者。如果您有任何问题,请随时回复此帖子

【讨论】:

  • @alumetryu 干得好!我看到你是堆栈溢出的新手,欢迎加入社区!
【解决方案2】:

这是因为公会的所有者没有被缓存。相反,手动 fetch() GuildMemberGuild.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
);

【讨论】:

  • 很高兴能帮上忙!
猜你喜欢
  • 2022-01-02
  • 2022-01-14
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2021-09-25
  • 2018-11-30
相关资源
最近更新 更多