【问题标题】:TypeError: oldMember.roles.every is not a function [duplicate]TypeError:oldMember.roles.every 不是函数 [重复]
【发布时间】: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

标签: javascript node.js discord.js typeerror


【解决方案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 不是应有的数组,而是一个对象。确保您的服务器调用返回您认为应该返回的内容。

【讨论】:

    猜你喜欢
    • 2019-05-30
    • 2020-03-22
    • 2020-06-26
    • 2020-06-06
    • 2021-11-22
    • 2018-04-10
    • 2019-08-22
    • 2016-01-27
    • 2015-11-16
    相关资源
    最近更新 更多