Discord.js,message.guild.owner返回null

问题描述

我正在为我的discord机器人编写一个server-info命令,我想从实际的公会中获取所有者的用户名标签。我在不和谐的js 11中找到了一种方法来执行此操作,但在第12版下它不再起作用:

const guild = client.guilds.get(message.guild.id);
message.channel.send(message.guild.member(guild.owner) ? guild.owner.toString() : guild.owner.user.tag);
// if the user is in that guild it will mention him,otherwise it will use .tag

因此,在不和谐js 12中,client.guilds.get不是函数,并且guild.owner返回nullmessage.guild.owner.user.username也将返回Cannot read property 'user' of null。 我看了看文档,message.guild.owner似乎是不动产(https://discord.js.org/#/docs/main/stable/class/Guild?scrollTo=owner)。所以我不知道为什么它返回null。

解决方法

我建议您先获取行会并确保行会可用,然后再尝试修改或访问它。因此,您的漫游器不会出现任何错误。另外,据我所知,guild.owner返回null,但是有一种解决方法。您可以通过guild.ownerID获取公会所有者ID,并以guildMember的身份获取成员。这是代码:

const guild = message.guild; // Gets guild from the Message object
if(!guild.available) return; // Stops if unavailable
await message.guild.members.fetch(message.guild.ownerID) // Fetches owner
      .then(guildMember => sOwner = guildMember) // sOwner is the owner
message.channel.send(guild.member(sOwner) ? sOwner.toString() : guild.owner.user.tag);
,

这是当您拥有公会时将如何获得所有者标签的方法。这也不依赖于缓存,因此,如果您的漫游器重新启动或清除了缓存,无论如何它都将起作用。

let ownerTag = undefined;
<client>.users.fetch(<guild>.ownerID).then(user => ownerTag = user.tag);

.fetch()返回一个promise,这就是为什么我声明一个变量,然后为其分配值的原因。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...