首页 > 解决方案 > 类型错误: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

标签: javascriptnode.jsdiscord.jstypeerror

解决方案


您对已弃用的功能有一些错误。首先,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;
 }
});

推荐阅读