node.js - Discord.js 获取服务器所有者用户标签返回 null
问题描述
我试图让我的机器人在机器人加入服务器时发送嵌入,嵌入应该包含服务器所有者的名称,但它返回 null 并且不起作用给我错误 TypeError: Cannot read property 'user' of null
guild.owner.user.username
完整代码
client.on("guildCreate", (guild) => {
const EmbedJoin = new Discord.MessageEmbed()
.setColor('GREEN')
.setTitle(`Joined Guild: ${guild.name}!`)
.setDescription(`Guild owner: ${guild.owner.user.username}\nMembers: ${guild.memberCount}`)
.setTimestamp()
console.log(`Joined New Guild: ${guild.name}`);
client.channels.cache.get(`794483893977088002`).send(EmbedJoin)
});
编辑:我找到了一个适合我的解决方案
client.on("guildCreate", async (guild) => {
let owner = client.users.cache.get(guild.ownerID)
const EmbedJoin = new Discord.MessageEmbed()
.setColor('GREEN')
.setTitle(`Joined Guild: ${guild.name}!`)
.setThumbnail(guild.iconURL())
.setDescription(`Guild owner: ${owner.username}`)
.setTimestamp()
console.log(`Joined New Guild: ${guild.name}`);
client.channels.cache.get(`758356170926325790`).send(EmbedJoin)
});
解决方案
用户并不总是被缓存。
您可以像这样缓存它:await client.users.fetch(GUILD.ownerID);
因此,您的代码的固定副本:
client.on("guildCreate", async (guild) => {
await guild.owner.fetch();
const EmbedJoin = new Discord.MessageEmbed()
.setColor('GREEN')
.setTitle(`Joined Guild: ${guild.name}!`)
.setDescription(`Guild owner: ${guild.owner.user.username}\nMembers: ${guild.memberCount}`)
.setTimestamp()
console.log(`Joined New Guild: ${guild.name}`);
client.channels.cache.get(`794483893977088002`).send(EmbedJoin)
});
推荐阅读
- ios - 使用包含双引号的 URL 解析 json - swift
- ruby-on-rails - Rspec - 测试方法的实例
- java - Gradle 使用新 Java 构建良好,但在 Java 11 上缺少兄弟项目
- c# - 如何强制自定义事件处理程序正常工作
- gcc - 在安装期间减少 GCC 输出
- python - 在 Tensorflow 决策森林中提取样本的叶子指数
- recharts - 带标签的两行图表
- javascript - 在执行某些代码之前是否可以隐藏弹出窗口?
- excel - Excel公式将日期时间戳与今天的日期进行比较
- javascript - 使用 date-fns 根据用户区域设置格式化日期