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#find
或Array#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