TypeError:oldMember.roles.every 不是函数 [重复]

Posted

技术标签:

【中文标题】TypeError:oldMember.roles.every 不是函数 [重复]【英文标题】:TypeError: oldMember.roles.every is not a function [duplicate] 【发布时间】:2020-12-18 22:22:28 【问题描述】:
client.on("guildMemberUpdate", function (guild, oldMember, newMember) 
  //declare changes
  var Changes = 
    unknown: 0,
    addedRole: 1,
    removedRole: 2,
    username: 3,
    nickname: 4,
    avatar: 5,
  ;
  var change = Changes.unknown;

  //check if roles were removed
  var removedRole = "";
  oldMember.roles.every(function (value) 
    if (newMember.roles.cache.find("id", value.id) == null) 
      change = Changes.removedRole;
      removedRole = value.name;
    
  );

我正在尝试让机器人跟踪添加/删除用户的角色。但是每次我启用并更改用户的角色时,我都会收到此错误。如果有人知道问题是什么,请帮忙。

Discord.js:v12.3.1

npm:v6.14.8

【问题讨论】:

首先要弄清楚oldMember.roles到底是什么。 另外,Array#every 似乎不是一个不错的选择。您不是在检查每个元素是否满足某个条件,您只是在遍历它并找到某个角色。也许您想使用Array#findArray#filter Discord.js: v12.3.1 【参考方案1】:

您对已弃用的函数有一些错误。首先,newMember.roles 返回一个Manager,因此您必须多走一步,将其传递给cache 属性。

另外,find("id", "<id>") 已弃用,而是使用 find(role => role.id === '<id>')

最后,正如 cmets 中所指出的,.every() 似乎不是您正在寻找的功能。

// iterate a function through every role the user used to have
oldMember.roles.cache.forEach((value) => 
 if (!newMember.roles.cache.find((role) => role.id === value.id)) 
  change = Changes.removedRole;
  removedRole = value.name;
 
);

【讨论】:

我忘了提到的另一件事是您可以将find(role => role.id === '<id>') 替换为更简单的get('<id>')【参考方案2】:

Roles 不是应有的数组,而是一个对象。确保您的服务器调用返回您认为应该返回的内容。

【讨论】:

以上是关于TypeError:oldMember.roles.every 不是函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“TypeError:函数名称不是 HTMLButtonElement.onclick (/:2:54) 处的函数”

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

TypeError: key 必须是一个字符串,一个缓冲区或一个对象在 typeError 与 GCP 文件存在