NodeJS/DiscordJS UnhandledPromiseRejectionWarning 错误
NodeJS/DiscordJS UnhandledPromiseRejectionWarning Error
首先,我对编程还很陌生。如果这 post 听起来很幼稚,我们深表歉意。
我正在使用 JS 制作 Discord 机器人,并使用命令和事件处理程序而不是 main.js 中的所有内容。当我发出命令 !reactionrole
.
时发生错误
这里是错误:
(node:4) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
这是我在 main.js 中的代码:
const Discord = require('discord.js');
const client = new Discord.Client({ partials: ["MESSAGE", "CHANNEL", "REACTION" ]});
const fs = require('fs');
client.commands = new Discord.Collection();
client.events = new Discord.Collection();
['command_handler', 'event_handler'].forEach(handler =>{
require(`./handlers/${handler}`)(client, Discord);
})
client.login(process.env.token);
这是我在 ready.js
中的代码
module.exports = () => {
console.log('The bot is online.')
}
这是我在 reactionrole.js(命令)中的代码,以备不时之需。
module.exports = {
name: 'reactionrole',
description: "Sets up reaction roles",
async execute(message, args, Discord, client) {
const channel = '796928981047705602';
const uploadNotifs = message.guild.roles.cache.find(role => role.name === "Upload Notifs");
const liveNotifs = message.guild.role.cache.find(role => role.name === "Live Notifs");
const giveNotifs = message.guild.role.cache.find(role => role.name === "Giveaways");
const uploadNotifsEmoji = ':bell:';
const liveNotifsEmoji = ':red_circle:';
const giveNotifsEmoji = ':partying_face:';
let embed = new Discord.MessageEmbed()
.setColor('#e42643')
.setTitle('Choose what to be notified for!')
.setDescription('Select the types of notifications you want to recieve.\n\n'
+ `${uploadNotifsEmoji} for Upload Notifications`
+ `${liveNotifsEmoji} for Livestream Notifications`
+ `${giveNotifsEmoji} for Giveaway Notifications`);
let messageEmbed = await message.channel.send(embed);
messageEmbed.react(uploadNotifsEmoji);
messageEmbed.react(liveNotifsEmoji);
messageEmbed.react(giveNotifsEmoji);
}
}
提前致谢
说得太简单了——你的异步函数在你的 await 语句中抛出一个错误,它无处可去,所以它出错了。可能是频道没反应或者你连不上。
你不知道,因为你没有错误处理程序。 Promise 是值的包装器,因此我们可以以同步方式处理异步工作流。
例如看这个; Nodejs documentation or this; Promises explained
我现在无法对其进行测试,但根据我的想法,您可以尝试将对 discord 的调用放在 try/catch 块中。这将在控制台中向您显示错误,这样更容易找到;
try {
let messageEmbed = await message.channel.send(embed);
messageEmbed.react(uploadNotifsEmoji);
messageEmbed.react(liveNotifsEmoji);
messageEmbed.react(giveNotifsEmoji);
}
catch(error) {
console.log(error);
}
这是另一个关于
主题的好文章 post
您收到此错误是因为您不能简单地对 ':bell:'
等字符串作出反应。相反,您必须提供文字 unicode 值 (''
)
const uploadNotifsEmoji = '';
const liveNotifsEmoji = '';
const giveNotifsEmoji = '';
已修复。
我没有按正确的顺序设置参数。
之前,我有async execute(message, args, Discord, client)
,
我把它改成了execute(client, message, args, Discord)
。
之后工作正常。
首先,我对编程还很陌生。如果这 post 听起来很幼稚,我们深表歉意。
我正在使用 JS 制作 Discord 机器人,并使用命令和事件处理程序而不是 main.js 中的所有内容。当我发出命令 !reactionrole
.
这里是错误:
(node:4) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
这是我在 main.js 中的代码:
const Discord = require('discord.js');
const client = new Discord.Client({ partials: ["MESSAGE", "CHANNEL", "REACTION" ]});
const fs = require('fs');
client.commands = new Discord.Collection();
client.events = new Discord.Collection();
['command_handler', 'event_handler'].forEach(handler =>{
require(`./handlers/${handler}`)(client, Discord);
})
client.login(process.env.token);
这是我在 ready.js
中的代码module.exports = () => {
console.log('The bot is online.')
}
这是我在 reactionrole.js(命令)中的代码,以备不时之需。
module.exports = {
name: 'reactionrole',
description: "Sets up reaction roles",
async execute(message, args, Discord, client) {
const channel = '796928981047705602';
const uploadNotifs = message.guild.roles.cache.find(role => role.name === "Upload Notifs");
const liveNotifs = message.guild.role.cache.find(role => role.name === "Live Notifs");
const giveNotifs = message.guild.role.cache.find(role => role.name === "Giveaways");
const uploadNotifsEmoji = ':bell:';
const liveNotifsEmoji = ':red_circle:';
const giveNotifsEmoji = ':partying_face:';
let embed = new Discord.MessageEmbed()
.setColor('#e42643')
.setTitle('Choose what to be notified for!')
.setDescription('Select the types of notifications you want to recieve.\n\n'
+ `${uploadNotifsEmoji} for Upload Notifications`
+ `${liveNotifsEmoji} for Livestream Notifications`
+ `${giveNotifsEmoji} for Giveaway Notifications`);
let messageEmbed = await message.channel.send(embed);
messageEmbed.react(uploadNotifsEmoji);
messageEmbed.react(liveNotifsEmoji);
messageEmbed.react(giveNotifsEmoji);
}
}
提前致谢
说得太简单了——你的异步函数在你的 await 语句中抛出一个错误,它无处可去,所以它出错了。可能是频道没反应或者你连不上。
你不知道,因为你没有错误处理程序。 Promise 是值的包装器,因此我们可以以同步方式处理异步工作流。
例如看这个; Nodejs documentation or this; Promises explained
我现在无法对其进行测试,但根据我的想法,您可以尝试将对 discord 的调用放在 try/catch 块中。这将在控制台中向您显示错误,这样更容易找到;
try {
let messageEmbed = await message.channel.send(embed);
messageEmbed.react(uploadNotifsEmoji);
messageEmbed.react(liveNotifsEmoji);
messageEmbed.react(giveNotifsEmoji);
}
catch(error) {
console.log(error);
}
这是另一个关于
您收到此错误是因为您不能简单地对 ':bell:'
等字符串作出反应。相反,您必须提供文字 unicode 值 (''
)
const uploadNotifsEmoji = '';
const liveNotifsEmoji = '';
const giveNotifsEmoji = '';
已修复。
我没有按正确的顺序设置参数。
之前,我有async execute(message, args, Discord, client)
,
我把它改成了execute(client, message, args, Discord)
。
之后工作正常。