【问题标题】:TypeError: Cannot read property 'add' of undefined Discord.js simple codeTypeError:无法读取未定义 Discord.js 简单代码的属性“添加”
【发布时间】:2022-02-04 22:48:16
【问题描述】:

所以,我正在制作一个机器人,这是我的代码的一部分有问题:

    if(message.content.startsWith("$sudo make-mod ")) {
    target = message.mentions.users.first();
    let role = message.guild.roles.cache.find(r => r.id = "<@&938235657929773077>")

    console.log(target)
    target.roles.add(role.id)
}

我得到这个错误:

    target.roles.add(role.id)
                     ^

TypeError: Cannot read property 'add' of undefined

我不知道是什么问题。有人可以帮忙吗???

【问题讨论】:

  • 更新:我将 target.roles.add(role.id) 设置为 target.roles.add(role)
  • 您使用的是console.log(target)。它告诉你什么? target 是否有 roles 属性?
  • 试试target = message.mentions.members.first(); 因为在公会中你只能提及成员而不是用户

标签: javascript express discord.js bots


【解决方案1】:

如果你这样做会更好:

target = message.mentions.users.first();
let role = message.guild.roles.cache.find(r => r.id = "938235657929773077")
const user = message.guild.members.cache.get(target.id)
user.roles.add(role.id)

当您使用没有任何角色属性的message.mentions.users.first() 时,当您执行console.log(target) 时它会返回类似的内容并返回一个用户:

User {
  id: 'user-id',
  bot: false,
  system: false,
  flags: UserFlags { bitfield: 0 },
  username: 'username'
}

更多关于User | Discord.js中的用户但是当你使用message.guild.members.cache.get(target.id)时,它会返回一个GuildMember,它具有用户在特定公会中的所有角色。更多关于公会成员GuildMember | Discord.js

【讨论】:

  • 您能否详细说明您所做的更改以及改进的原因?
  • 我这样做了,但它给了我这个错误:TypeError: Cannot read property 'mentions' of undefined
  • 尝试使用console.log(message) 来查看消息是否未定义
  • 它会注销一大堆东西:
  • Message { channelId: '938522474834964521', guildId: '938225643127189514', id: '938819259386171392', createdTimestamp: 1643902353856,:, false 类型:'系统默认值:' $sudo make-mod ',作者:用户{ id:'904448678532640798',机器人:false,系统:false,标志:UserFlags {位域:0},用户名:'awesomearjun',鉴别器:'1177' ,头像:'10612065736403d939b48950b27223c6',横幅:未定义,重音颜色:未定义},固定:假,
【解决方案2】:

你需要使用会员

target = message.mentions.members.first()

【讨论】: