Javascript 发出「;client.fetchUser“;无法发送数据

Javascript 发出「;client.fetchUser“;无法发送数据,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,我已经制作了一个Discord Node.JS bot有一段时间了,我正在处理“unban”命令,但我遇到的问题是两个问题,第一个问题是它尝试取消一个成员的绑定,即使他们没有被禁止,第二个问题是最大的问题,client.fetchUser(toUnban)无法解析像“.username”和“.avatarURL”这样的东西 我曾尝试创建一个单独的系统来收集这些数据(因为这样做有效),它只能在函数中使用。不在它之外 client.fetchUser(toUnban) .then(user=>con

我已经制作了一个Discord Node.JS bot有一段时间了,我正在处理“unban”命令,但我遇到的问题是两个问题,第一个问题是它尝试取消一个成员的绑定,即使他们没有被禁止,第二个问题是最大的问题,
client.fetchUser(toUnban)
无法解析像“.username”和“.avatarURL”这样的东西

我曾尝试创建一个单独的系统来收集这些数据(因为这样做有效),它只能在函数中使用。不在它之外

client.fetchUser(toUnban)
.then(user=>console.log(user.username))
.then(user=>usersname=user.username)
.catch(console.error)
console.log(usersname)
将打印(例如)

Clichefoox

如果在此函数之外调用,它将不打印任何内容。如果在里面调用,它会打印一些东西。问题是,我正试图让它,所以它将获得头像和用户名。因此,我不知道如何在一个时间内实现这两个目标

完整代码:

const Discord=require('Discord.js')
exports.run=(客户端、消息、参数)=>{
如果(!message.member.hasPermission(“BAN_MEMBERS”)| |!message.author==message.guild.owner)返回message.channel.send(“您无权访问此命令::x:”)
如果(!message.guild.me.hasPermission(“管理员”))返回message.channel.send(`${message.guild.owner}未授予我执行此操作的权限!如果您是所有者,请运行此命令\`${client.config.PREFIX}fixserver\`!`)
设toUnban=args[0]
if(!toUnban)返回message.channel.send(“您没有提供用户ID!”)
if(toUnban.includes(“@”){return message.channel.send(“这不是用户ID!”)}
让reason=args.slice(1.join)(“”)
if(!reason)reason=“无原因。”
var Embed=newdiscord.RichEmbed()
.setColor(“#ebe234”)
.setTimestamp()文件
.setDescription(`**${client.fetchUser(toUnban.username}**已从服务器上解除绑定!`)
.setFooter(`V${client.config.VERSION}|${toUnban}`,client.user.displayAvatarURL)
.setAuthor(“Unbanned”,client.fetchUser(toUnban.avatarURL)
.addField(“用户”,message.author.tag,true)
.addField(“原因”,原因,真)
var cEmbed=newdiscord.RichEmbed()
.setColor(“#2b2b”)
.setTimestamp()文件
.setDescription(`**${client.fetchUser(toUnban.username}**已取消绑定。`)
.setAuthor(“Unbanned”,client.fetchUser(toUnban.avatarURL)
.addField(“原因”,原因)
试一试{
message.guild.unban(通班,原因)
}捕获(e){
返回消息。回复(“此用户未被禁止!”)
}
message.channel.send({embed:cEmbed})
试一试{
var logChannel=message.guild.channels.find(c=>c.name==“机器人日志”)
发送({embed:embed})
}捕获(e){
message.guild.createChannel(“机器人日志”{
键入:“文本”,
许可证覆盖:[{
id:message.guild.id,
拒绝:[“读取消息”,“发送消息”]
}]
})
setTimeout(函数(){
var logChannel=message.guild.channels.find(c=>c.name==“机器人日志”)
发送({embed:embed})
},client.ping*2.5)
}
}
预期的结果是,它将根据传递的“user”类来理解用户名,因此我尝试将其作为普通用户类调用,但没有得到错误或输出,它只是空白。

。然后(user=>console.log(user.username))
告诉代码接收用户,打印user.username,然后返回console.log的返回值,该值未定义

试一试

或者,更简洁地说

.then(user => console.log(user.username) || user)

给我自己这个答案给任何有这个问题的人,但实际上不值得使用。相反,我将使用

let user=client.users.get(toUnban);
为什么?-因为这并不像客户端用户那样麻烦

client.user上的文档及其传递的内容:,它传递
user
类,该类可用于按ID获取人员,这就是我正在做的。它还可以用于按名称搜索

此外,我将使用的方法是在尝试解除成员名单之前检查成员是否被禁止,该方法将如下所示:

试试看{
const banList=wait message.guild.fetchBans();
const bannedUser=banList.find(user=>user.id==toUnban);
if(!bannedUser)返回message.channel.send(“此用户未被禁止!”);
}捕获(e){
控制台日志(e);
};
代码示例由提供

您需要将
导出。将
部件运行到异步中,因为它等待帮会#由于它返回承诺而获取禁止有关异步/等待的更多信息,如下所示:

exports.run=async(客户端、消息、参数)=>{
//你的代码
};

这比我在互联网上找到的其他人的理解要简单得多。

这不起作用,我试图将他们的“姓名”和“头像”存储在客户端之外,但在同一脚本中使用。如果在#fetchUser之外调用,则运行这两个命令将导致
引用错误:未定义用户。
.then(user => console.log(user.username) || user)