Discord.js:TypeError:无法读取未定义的属性“删除”

Posted

技术标签:

【中文标题】Discord.js:TypeError:无法读取未定义的属性“删除”【英文标题】:Discord.js : TypeError: Cannot read property 'remove' of undefined 【发布时间】:2020-09-03 16:40:19 【问题描述】:

我无法从 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>

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

【问题讨论】:

【参考方案1】:

其实是在你的代码中调用execute函数的时候

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

take.js 中的execute 函数将等待这些参数:

[参数] => [收到的变量类型] 消息 => Message 角色 => 字符串(Role 的 ID) 用户 => 字符串 (不是预期的GuildMember) 公会 => 未定义 helpList => 未定义

事实上,按照你给execute函数提供参数的顺序,你给的是变量name而不是User。所以 User 不是 GuildMember 它是一个字符串,当然 String.rolesundefined,这就是错误显示 cannot read property 'remove' of undefined 的原因。

要修复你的错误,你应该修改

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

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

(仔细看,我把name参数和User参数颠倒了)

等等,还没完结

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

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

guild, helpList, roles 在此处始终是 undefined 作为参数。

所以你应该删除不必要的参数:

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

execute 函数调用也一样,删除未使用的参数:

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

我想就是这样。我希望我是可以理解的:D

【讨论】:

这对我很有帮助,谢谢。我没有想到参数的顺序。我现在遇到了将 Roll[] 变成 Roll 以编辑颜色和添加权限的问题。看不懂就发新帖。 不客气!祝你的其他问题好运。

以上是关于Discord.js:TypeError:无法读取未定义的属性“删除”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义的“获取”函数(discord.js)

Discord.js:TypeError:无法读取未定义的属性“删除”

(Discord.js)TypeError:无法读取未定义的属性“添加”

Discord.js:TypeError:无法读取未定义的属性“get”

discord.js TypeError:无法读取未定义的属性“发送”

node.js/discord.js:TypeError:无法读取 null 的属性“setPresence”