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?");
}
添加回答
舉報