【问题标题】:Discord.js | UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'partial' of undefined不和谐.js | UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“部分”
【发布时间】:2021-05-08 05:13:02
【问题描述】:

我尝试使用命令处理程序获取 discord.js 的角色,但是当我尝试运行 messageReactionAdd 事件时,我收到这些错误

(node:249794) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'partial' of undefined
    at module.exports (Projects/find-mentor-dcbot/events/messageReactionAdd.js:4:26)
    at Client.emit (events.js:314:20)
    at MessageReactionAdd.handle (Projects/find-mentor-dcbot/node_modules/discord.js/src/client/actions/MessageReactionAdd.js:49:17)
    at Object.module.exports [as MESSAGE_REACTION_ADD] (Projects/find-mentor-dcbot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js:4:37)
    at WebSocketManager.handlePacket (Projects/find-mentor-dcbot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (Projects/find-mentor-dcbot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (Projects/find-mentor-dcbot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (Projects/find-mentor-dcbot/node_modules/ws/lib/event-target.js:132:16)
    at WebSocket.emit (events.js:314:20)
    at Receiver.receiverOnMessage (Projects/find-mentor-dcbot/node_modules/ws/lib/websocket.js:825:20)
(node:249794) 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)
(node:249794) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

app.js;

require("dotenv").config();

const { Client } = require("discord.js"),
  fs = require("fs"),
  Enmap = require("enmap"),
  client = new Client({partials: ["MESSAGE", "CHANNEL", "REACTION"]});

client.commands = new Enmap();

console.log("――――――――――――――――――――――――――――――");

fs.readdir("./events/", (err, files) => {
  if (err) return console.error;

  files.forEach((file) => {
    if (!file.endsWith(".js")) return;

    let evt = require(`./events/${file}`);
    let evtName = file.split(".")[0];

    console.log(`[LOG: LOADED EVT] ${evtName}`);
    client.on(evtName, evt.bind(null, client));
  });
  console.log("――――――――――――――――――――――――――――――");
});

fs.readdir("./commands/", async (err, files) => {
  if (err) return console.error;

  files.forEach((file) => {
    if (!file.endsWith(".js")) return;

    let props = require(`./commands/${file}`);
    let cmdName = file.split(".")[0];

    console.log(`[LOG: LOADED ACMD] ${cmdName}`);
    client.commands.set(cmdName, props);
  });
  console.log("――――――――――――――――――――――――――――――");
});

client.login(process.env.BOT_TOKEN);

事件/messageReactionAdd.js

const conf = require('../conf.json');

module.exports = async (reaction, user) => {
    if (user.bot) return;
    if (!reaction.message.guild) return;
    
    if (reaction.message.partial) await reaction.message.fetch();
    if (reaction.partial) await reaction.fetch();

    if (reaction.message.channel.id === conf.roleChannel) {
        
        let ruser = await reaction.message.guild.members.cache.get(user.id);

        if (reaction.emojiname === '????') {
            ruser.roles.add(conf.rolesBasic.roleMember);
        } else if(reaction.emojiname === '????') {
            ruser.roles.add(conf.rolesBasic.rolePingMe);
        } else if(reaction.emojiname === 'Ⓜ️') {
            ruser.roles.add(conf.rolesBasic.roleMentee);
        }

    } else return;
};

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    尝试删除任何有部分的代码行:

    const conf = require('../conf.json');
    
    module.exports = async (reaction, user) => {
        if (user.bot) return;
        if (!reaction.message.guild) return;
    
        if (reaction.message.channel.id === conf.roleChannel) {
        
            let ruser = await reaction.message.guild.members.cache.get(user.id);
    
            if (reaction.emojiname === '?') {
                ruser.roles.add(conf.rolesBasic.roleMember);
            } else if(reaction.emojiname === '?') {
                ruser.roles.add(conf.rolesBasic.rolePingMe);
            } else if(reaction.emojiname === 'Ⓜ️') {
                ruser.roles.add(conf.rolesBasic.roleMentee);
            }
    
        } else return;
    };
    

    应该可以,对我来说确实有效

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 2020-05-22
      • 1970-01-01
      • 2020-11-10
      • 2020-11-11
      • 2021-04-15
      • 2021-05-20
      • 2021-04-18
      • 2020-11-11
      相关资源
      最近更新 更多