【问题标题】:Error with TypeError: Cannot read property 'filter' of undefinedTypeError 错误:无法读取未定义的属性“过滤器”
【发布时间】:2020-10-22 01:40:01
【问题描述】:

这段代码甚至没有输出任何东西,我不知道它有什么问题......

代码:

message.guild.roles.cache.filter(r => r.deletable).forEach(r => { 
  r.delete(); 
  console.info(`deleted ${r.name} ID: ${r.id}`)
});

【问题讨论】:

  • 阅读错误信息。 Cannot read property 'filter' of undefined 表示 message.guild.roles.cache 没有值。尝试更进一步,看看哪个属性没有值。我们需要更多信息才能给出正确答案。

标签: javascript node.js discord discord.js


【解决方案1】:

就像 garrifra 说的 message.guild.roles.cache 未定义,这可能是因为您不在 v12 discord.js 上,所以要么更新或将其更改为 message.guild.roles

message.guild.roles.forEach(r => { 
  r.delete()
    .then(() => console.log(`deleted ${r.name} ID: ${r.id}`))
    .catch(() => console.log(`Failed to delete ${r.name} | ${r.id}`)); 
});

【讨论】:

  • 这给了我另一个错误: TypeError: (intermediate value).forEach 不是一个函数我已经尝试搜索原因,但我似乎无法找到解决方案。我知道如何让它工作,但它会给我更多的不和谐 api 说无效角色等错误,但那是因为角色是不可删除的(高于机器人可以删除的角色),这就是为什么我添加了它但它没有在那之后似乎根本没有工作,或者什么也不返回。感谢您提供帮助。
  • 尝试记录 message.guild.roles 是什么,然后将结果添加到您的帖子中,同时将代码更新到您的帖子中。 > 我知道如何让它工作,具体如何?您可能只需要在调用 delete 时添加一条 catch 语句,我查看了 v11 和 v12 文档,但找不到 <Role>.deletable
  • 这将是正确的代码,但只要角色高于机器人或无权删除它,您就会收到警告代码:message.guild.roles.forEach(r => { r .delete(); console.info(deleted ${r.name} ID: ${r.id}) 它可以工作,但对于警告不可行
  • 就像我说的你需要一个 catch 语句,编辑了帖子
  • 谢谢,我自己没想到
猜你喜欢
  • 2021-12-26
  • 1970-01-01
  • 2019-03-26
  • 2021-10-31
  • 2017-06-27
  • 2020-01-12
  • 2021-12-31
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多