0

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

我正在使用 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);
    }
}

提前致谢

4

3 回答 3

0

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

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

例如见这个;Nodejs 文档或这个;承诺解释

我现在无法对其进行测试,但从我的脑海中,您可以尝试将您对 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);
}

这是关于带有异步/等待的 try/catch 块主题的另一篇好文章

于 2021-05-12T15:04:50.463 回答
0

您收到此错误是因为您不能简单地对诸如':bell:'. 相反,您必须提供文字 unicode 值 ( '')

const uploadNotifsEmoji = '';
const liveNotifsEmoji = '';
const giveNotifsEmoji = '';
于 2021-05-12T15:58:36.037 回答
0

固定的。我没有按正确的顺序设置参数。以前,我有async execute(message, args, Discord, client),我把它改成了execute(client, message, args, Discord)。在那之后工作得很好。

于 2021-05-14T22:44:53.637 回答