NodeJS/DiscordJS未处理PromiseRejection警告错误



首先,我对编程很陌生。如果这篇文章听起来很幼稚,我深表歉意。

我正在使用JS制作一个Discord bot,并使用命令和事件处理程序来代替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.nn'
+ `${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);
}
}

提前感谢

把它稍微简化了一点——异步函数在等待语句中抛出一个错误,它无处可去,所以它出错了。可能频道没有响应或者您无法连接。

您不知道,因为您没有错误处理程序。Promise是一个值的包装器,因此我们可以以同步的方式处理异步工作流。

例如,请参见此;Nodejs文档或此;承诺解释

我现在没有办法测试它,但从我的脑海中,你可以试着把你对不和的呼吁放在一个尝试/捕捉块中。这将向您显示控制台中的错误,使其更容易查找;

try {
let messageEmbed = await message.channel.send(embed);
messageEmbed.react(uploadNotifsEmoji);
messageEmbed.react(liveNotifsEmoji);
messageEmbed.react(giveNotifsEmoji);
}
catch(error) {
console.log(error);
}

以下是另一篇关于使用async/await 的try/catch块主题的好文章

您之所以会出现此错误,是因为您无法简单地对':bell:'等字符串作出反应。相反,您必须提供文字unicode值('🔔'(

const uploadNotifsEmoji = '🔔';
const liveNotifsEmoji = '🔴';
const giveNotifsEmoji = '🥳';

已修复。我没有按正确的顺序设置参数。之前我有CCD_ 4,我把它改成了execute(client, message, args, Discord)。之后工作良好。

相关内容

  • 没有找到相关文章

最新更新