2 回答
TA贡献1830条经验 获得超9个赞
我已经设法为我想做的事情提供了一个适当的解决方案,但首先我想评论几件事:正如 Zer0 所说,如果bannedMember = await bot.users.fetch(args[0])
返回错误并且我们用if(!bannedMember)
它来检查它就像!!bannedMember
把它变成一个真实的陈述但是,我们对if条件语句有这个定义:
这就是我们if(!condition)
用来检查条件是否为假的原因。
但这里的问题不在于。问题是await函数是 async 函数的块。这意味着,如果它正在等待的承诺在调用时没有到达,它会出现我遇到的错误,而无需继续执行其余代码。这是一位朋友给我的解决方案以及我最终使用的解决方案,它运行良好:
module.exports.run = async (bot, message, args) => {
if(!message.member.hasPermission(["BAN_MEMBERS", "ADMINISTRATOR"])) return message.channel.send("You can't do that.")
if(!args[0]) return message.channel.send("Give me a valid ID");
//This if() checks if we typed anything after "!unban"
let bannedMember;
//This try...catch solves the problem with the await
try{
bannedMember = await bot.users.fetch(args[0])
}catch(e){
if(!bannedMember) return message.channel.send("That's not a valid ID")
}
//Check if the user is not banned
try {
await message.guild.fetchBan(args[0])
} catch(e){
message.channel.send('This user is not banned.');
return;
}
let reason = args.slice(1).join(" ")
if(!reason) reason = "..."
if(!message.guild.me.hasPermission(["BAN_MEMBERS", "ADMINISTRATOR"])) return message.channel.send("I can't do that")
message.delete()
try {
message.guild.members.unban(bannedMember, {reason: reason})
message.channel.send(`${bannedMember.tag} was readmitted.`)
} catch(e) {
console.log(e.message)
}
}
我正在使用 Zer0 的建议if(!args[0]) return message.channel.send("Give me a valid ID");来检查在命令!unban解决第一个错误之后是否输入了某些内容。为了解决第二个错误并检查我们是否获得了有效的 ID,我们进行了第一次尝试……但如果我们获得了有效的 ID ,我们只能通过尝试,因为:
.users:在任何时候缓存的所有用户对象,由它们的 ID 映射。
.fetch():获取此用户。返回:承诺<用户>。
如果尝试失败,则catch运行if以检查是否bannedMember为false并返回消息错误。
TA贡献1789条经验 获得超8个赞
对于第一个错误,我会检查是否给出了 args[0]。我假设bot.users.fetch返回一个错误对象,因此 a!!bannedMember将评估为真。你在使用 Discord.js v12 吗?这在 v11 和 v12 中有所不同,所以我现在不能给你一个明确的答案。如果你想检查它返回的内容,你可以 console.log 被禁止的成员。
所以我的建议是:
if(!args[0]) return message.channel.send("please provide a valid ID");
此外,让下面的代码工作以捕获您的第二种错误类型也是一种完全有效的方法
try {
message.guild.members.unban(bannedMember, { reason });
message.channel.send(`${bannedMember.tag} ha sido readmitido.`);
} catch(e if e instanceof DiscordAPIError) {
message.channel.send("Are you sure this is a valid user ID?");
}
添加回答
举报