Discord.js:TypeError:无法读取未定义的属性'remove'

问题描述 投票:0回答:1

我在从message.mentions.roles.first()和message.mentions.members.first()中获取正确的信息时遇到麻烦

这是我在Index.js中的命令处理程序

bot.on('message', async (message, guild, helpList, roles) => {
    if (!message.content.startsWith(prefix) || message.author.bot || !message.member.hasPermission('MANAGE_ROLES')) return;
    const args = message.content.slice(prefix.length).split(' ') ;
    const command = args.shift().toLowerCase();
    const aRole = message.mentions.roles.first();
    const Role = aRole.id
    const name = args.join(' ');
    const User = message.mentions.members.first();

    if (!Role && command !== 'create' && command !== 'give' && command !== 'take' && command !== 'help' && command !== 'list') {return message.channel.send('Sorry, that role was not found.')}
    if (!User && (command == 'give' || command == 'take') ) {return message.reply ("That name doesnt match a user.");}

    try{
      bot.commands.get(command).execute(message, Role, name, User, guild, helpList);
    } catch(e){
      console.log(e)
    }  

});

      bot.commands.get(command).execute(message, Role, name, User, guild, helpList);
    } catch(e){
      console.log(e)
    }  

});

这是我的take.js,这是一个从指定成员中删除角色的命令。

module.exports = {
    name: 'take',
    description: '',
  execute(message, Role, User, roles){ 
     try{
    User.roles.remove(Role);
        return message.channel.send (`${Role} has been removed from  ${User}'s list of rolls.`);
      }catch(e){
          console.log(e);
          console.log(Role)
          console.log(User)
      }}}

这是我得到的错误。

TypeError: Cannot read property 'remove' of undefined
    at Object.execute (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/commands/take.js:6:16)
    at Client.<anonymous> (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/index.js:34:33)
    at Client.emit (events.js:310:20)
    at MessageCreateAction.handle (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
    at WebSocketShard.onPacket (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:437:22)
    at WebSocketShard.onMessage (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:294:10)
    at WebSocket.onMessage (/mnt/c/Users/bgera/OneDrive/Desktop/BOTT/RoleBot/node_modules/ws/lib/event-target.js:125:16)
    at WebSocket.emit (events.js:310:20)
711442214043254854
<@&711442214043254854> <@!271438275619586062>

为什么角色不起作用?任何帮助是极大的赞赏。

javascript discord.js roles member mention
1个回答
0
投票

实际上在您在此处调用execute函数时在您的代码中

bot.commands.get(command).execute(message, Role, name, User, guild, helpList);

execute中的take.js函数将等待以下参数:

  • [[parameter] => [已接收变量类型]
  • 消息=> Message
  • 角色=>字符串(提及Role的ID)
  • 用户=> 字符串 ((非预期的GuildMember
  • 公会=>未定义
  • helpList =>未定义

实际上,按照给execute函数提供参数的顺序,您给的是变量name,而不是User。因此,不是UserGuildMember,而是一个字符串,当然String.rolesundefined,这就是为什么错误显示为cannot read property 'remove' of undefined

要纠正错误,您应该修改

bot.commands.get(command).execute(message, Role, name, User, guild, helpList);

to

bot.commands.get(command).execute(message, Role, User, name, guild, helpList);

(仔细观察,我将name参数与User参数颠倒了]

但是,还没有结束

代码中的另一个问题是您声明了太多参数。

[bot.on("message", callback(Message))仅使用一个参数(callback())调用see docs here

[guild, helpList, roles始终都是undefined作为参数。

所以您应该删除不必要的参数,如:

bot.on("message", (message) => {
    ...
}

execute函数调用相同,删除未使用的参数:

bot.commands.get(command).execute(message, Role, User);

我认为就是这样。我希望我已经可以理解了:D

© www.soinside.com 2019 - 2024. All rights reserved.