繁体   English   中英

Discord.js 类型错误

[英]Discord.js TypeError

我正在使用 discord.js v12 制作 discord 机器人。 我做了一个 addrole 命令。 这是该文件的代码:

const errors = require("../../../utils/errors"); 
const second = require("../../../utils/othererrors.js"); 

module.exports = {
    config: {
        name: "addrole",
        aliases: ["roleadd"],
        usage: "$addrole <user>",
        description: "Add a role to someone",
        permissions: "manage roles"
    },
    run: async (bot, message, args) => {
        if (message.channel.type == "dm") return message.channel.send("This command only works in a server!");

        if(!message.member.hasPermission(["MANAGE_ROLES", "ADMINISTRATOR"])) return errors.noPerms(message, "MANAGE_ROLES");
        if(!message.guild.me.hasPermission(["MANAGE_ROLES", "ADMINISTRATOR"])) return errors.lack(message.channel, "MANAGE_ROLES");

        let cmd = message.content.split(" ")[0]; //used because of command aliases
        if (args[0] == "help") return message.channel.send(`Command Syntax: ${cmd} (user) <role-name>`);

        let rMember = message.mentions.members.first() || message.guild.members.find(m => m.user.tag === args[0]) || message.guild.members.get(args[0]);
        if(!rMember) return errors.cantfindUser(message.channel);

        if (rMember.id === bot.user.id) return errors.botuser(message, "add a role to");

        let role = message.guild.roles.cache.find(r => r.name == args[1]) || message.guild.roles.cache.find(r => r.id == args[1]) || message.mentions.roles.first();
        if(!role) return errors.noRole(message.channel);

        if(rMember.roles.has(role.id)) {
            return message.channel.send(`**${rMember.displayName} already has that role!**`)
        } else {
            try {
                await rMember.addRole(role.id);
                message.channel.send(`**The role, ${role.name}, has been added to ${rMember.displayName}.**`); //if successful this message
            } catch(e) {
                let id = second.getError(e.message);
                message.channel.send(`Unfortunately an error occurred. Error ID: ${id}`);
            }
        }
    }
}

现在,当我启动机器人并使用命令时,它会返回此错误:

(node:10904) UnhandledPromiseRejectionWarning: TypeError: rMember.roles.has is not a function
    at Object.run (F:\codes\DISCORDBOTS\discordBotJS-Final\src\commands\moderation\addrole.js:29:26)
    at module.exports (F:\codes\DISCORDBOTS\discordBotJS-Final\events\guild\message.js:36:21)
    at Client.emit (events.js:376:20)
    at MessageCreateAction.handle (F:\codes\DISCORDBOTS\discordBotJS-Final\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)       
    at Object.module.exports [as MESSAGE_CREATE] (F:\codes\DISCORDBOTS\discordBotJS-Final\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (F:\codes\DISCORDBOTS\discordBotJS-Final\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (F:\codes\DISCORDBOTS\discordBotJS-Final\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)      
    at WebSocketShard.onMessage (F:\codes\DISCORDBOTS\discordBotJS-Final\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)     
    at WebSocket.onMessage (F:\codes\DISCORDBOTS\discordBotJS-Final\node_modules\ws\lib\event-target.js:132:16)
    at WebSocket.emit (events.js:376:20)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:10904) 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:10904) [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.

任何帮助将不胜感激。 谢谢

因此,为了访问 function,您必须在两者之间使用.cache (因为它返回一个collection ):

rMember.roles.cache.has()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM