javascript - Discord.js 类型错误
问题描述
我正在使用 discord.js v12 制作一个不和谐的机器人。我做了一个 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.
任何帮助将不胜感激。谢谢
解决方案
.has()
是一个函数,由 a 提供collection
因此,为了访问该函数,您必须在两者之间使用.cache
(因为它返回 a collection
):
rMember.roles.cache.has()
推荐阅读
- python - 如何使用 python 中的 semopy 包获得标准化的因子载荷?
- javascript - 字符串的处理
- git - Git:如何为给定的存储库设置非标准的私有 SSH 密钥路径
- python - 如何修复 salesforce wave FUNCTIONALITY_NOT_ENABLED 错误?
- javascript - 如何调试不适用的 CSS 转换
- xpath - WSO2 API Manager `filter` 无法正常工作
- javascript - 无法在 Firefox 中进行 api 调用,因为“由于启用了内容阻止,url 处的资源被阻止”?
- javascript - 使用香草js在画布中的SVG路径数据之间进行插值?
- selenium - 如何将 .class 文件(Selenium 脚本)转换为 .jmx 文件(JMeter 脚本)
- angular - 如何在 Angular 中获取用户的 ID