我正在使用Discord.JS制作一个discord机器人,但是当我尝试执行命令时,它向我显示此错误:
(node:4) UnhandledPromiseRejectionWarning: TypeError [INVALID_TYPE]: Supplied options is not an object. at Message.delete (/app/node_modules/discord.js/src/structures/Message.js:501:44) at /app/commands/warn.js:3:89.
warn.js代码为:
module.exports.run = async (bot, message, args) => {
let target = message.mentions.members.first()
if(!target) return message.channel.send("Couldn't find that ID!").then(m => m.delete(15000))
let reason = args.slice(1).join(" ")
if(!reason) return message.channel.send(`Please give a reason to warn **${target.user.tag}**!`).then(m => m.delete(15000))
message.channel.send(`Warned **${target.user.tag}**!`).then(m => m.delete(15000))
// get role by name
let myRole = message.guild.roles.cache.find(role => role.name === "Warned");
target.addRole(role).catch(console.error);
}
module.exports.help = {
name: "warn",
aliases: []
}
我真的不知道为什么会这样,而且我也找不到错误。 有人可以看一下代码,看看有什么问题吗?我会很感激。
答案 0 :(得分:0)
delete函数需要一个对象作为其参数,您可以在其中指定超时。
if(!reason) return message.channel.send(`Please give a reason to warn **${target.user.tag}**!`).then(m => m.delete({timeout: 15000}))
答案 1 :(得分:0)
在javascript中,有多种处理异步代码的方法。
在您的示例中,您使用的是@RunWith(XtextRunner)
@InjectWith(CucumberInjectorProvider)
class CucumberParsingTest {
@Inject
ParseHelper<Feature> parseHelper
@Test
def void loadModel() {
val result = parseHelper.parse('''
Feature: The quick brown fox
Jumps over
The lazy dog
''')
Assert.assertNotNull(result)
val errors = result.eResource.errors
Assert.assertTrue('''Unexpected errors: «errors.join(", ")»''', errors.isEmpty)
}
}
函数。这意味着您可以使用async/await-此功能基于语法糖在async
之上构建。
它允许您以“同步”方式编写代码。
因此,您可能需要像这样重写Promise调用:
Promise
错误
module.exports.run = async (bot, message, args) => {
let target = message.mentions.members.first()
if(!target) {
const message = await message.channel.send("Couldn't find that ID!");
return message.delete(15000)
}
还会警告您Promise执行中存在错误。此处,给UnhandledPromiseRejectionWarning
函数提供的参数类型错误。应该有一个对象,但是会收到一个数字。这是documentation of the message API。
要更进一步,您可以使用delete
链接功能处理Promises拒绝,这对于调试或记录错误很有用。
.catch
或使用异步/等待语法:
// Promises style
let target = message.mentions.members.first()
if(!target) {
return message.channel.send("Couldn't find that ID!")
.then(m => m.delete(15000))
.catch(error => console.log(error))
}