javascript - 类型错误:oldMember.roles.every 不是函数
问题描述
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
解决方案
您对已弃用的功能有一些错误。首先,newMember.roles
返回 a Manager
,因此您将不得不多走一步并将其传递给cache
属性。
此外,find("id", "<id>")
不推荐使用,而是使用find(role => role.id === '<id>')
.
最后,正如评论中所指出的,.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;
}
});
推荐阅读
- module - 为什么`type alias`是在另一个模块中以相同方式定义的类型?
- ruby - 具有复杂结构的高效多项选择
- python - Python Web Scraping:美丽的汤
- android - 从 MutableLiveData 更改数据时无法触发 onChange
- c# - 如何让用户填写数组?
- websocket - 如何从 Cassandra DB 创建流?
- javascript - 计算 Javascript 中的标点符号然后传递给 HTML
- javascript - 如何从 Internet Explorer 11 中的 window.open 返回值?
- r - 通过递归添加连接元素来查找组
- php - Laravel Passport:invalid_credentials,用户凭据不正确