我正在尝试使用node.js discord模块制作一个机器人,当在discord中输入命令时,该机器人将向用户发送私人消息。该命令应该像
一样使用!rp <@收件人>
,邮件即被发送给收件人。
我的代码是:
else if (rhysmessage.substring(0,4) == ("!rp ")) {
e.message.delete();
var end
var charactercheck
for (end=0; charactercheck < rhysmessage.length; charactercheck =
charactercheck + 1) {
console.log(rhysmessage.charAt(charactercheck))
if (rhysmessage.charAt(charactercheck) == " ") {
end = charactercheck}
}
if (end == 0){
rhyschannel.sendMessage("Please use format `!rp <recipient>
<message>`")
}
else {
usersendto = rhysmessage.substring(5,end-1)
usersendto.sendMessage(rhysmessage.substring(end+1,rhysmessage.leng
th)
}
}
运行此代码时,出现错误:“ UnhandledPromiseRejectionWarning”。为什么会这样?
答案 0 :(得分:1)
有关未处理的承诺拒绝的信息,请参见here。
说明:
某些方法(即Discord.js中的send()
)返回promises。引用自MDN ...
Promise对象表示异步操作的最终完成(或失败)及其结果值。
换句话说,某些功能必须等待某些事情完成。当出现错误时,承诺将被拒绝,您必须进行处理。您看到的警告是由于您的代码没有捕获任何被拒绝的承诺而导致的。
解决方案:
实现使用.catch()
方法或try...catch
语句来处理任何错误。
await channel.send('hey')
.catch(err => console.error(err));
try {
await channel.send('hey');
await user.send('hey again');
} catch(err) {
console.error(err);
}
请注意,尽管在上面的示例中错误将被发送到控制台,但不会停止您的代码。确保正确处理它,以免任何其他代码都不会出错。另外,要使用await
,您必须处于异步函数之内。
// sendMessage()
在Discord.js中已弃用。请改用send()
。