问题描述
我正在为我的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
返回null
。
message.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,这就是为什么我声明一个变量,然后为其分配值的原因。