如何通过用户对象检索公会的所有成员?

时间:2019-01-09 14:49:29

标签: discord.js

我具有以下代码设置,但通常在服务器上找不到成员。
我该如何解决这个问题?

BOT.on('message', function(message) {
  if (!message.content.startsWith(prefix)) return;
  const args = message.content.slice(prefix.length).split(' ');
  const command = args.shift().toLowerCase();
  const chan = message.channel;

  if (command == "grabreacts" && chan.name == "the-purge") {
    var role = message.guild.roles.find(role => role.name === "2019 Purge Survivor");
    if (!role) return message.channel.send(`**${message.author.username}**, role not found`);
    //console.log(role);

    chan.fetchMessage(args)
      .then(function(value) {
        const react = value.reactions.filter(r => r.emoji == "").first();
        var reacts = react.count;
        react.fetchUsers()
          .then(function(users) {
            var fetchedMemebers = users.size;
            users.map(async user => {
              console.log(user.tag);
              message.guild.fetchMember(user, false)
                .then((memeber) => {
                  member.addRole(role)
                    .then((mem) => {
                      react.remove(user)
                        .catch((err) => console.log("Cannot remove user: " + user.tag + ". ex: " + ex + "!"));
                    })
                    .catch(ex => {
                      console.log(ex);
                    });
                })
                .catch((err) => {
                  console.log("Cannot find member object for: " + user.tag + "!");
                });
            });
            var assignedusers = role.members.size;
            message.reply("Reacts found: " + reacts + "; users fetched: " + fetchedMemebers + "; roles assigned: " + assignedusers);
          })
          .catch(err => message.reply("Cannot fetch users for react: '" + reacts + "', err: " + err + "!"));

      })
      .catch(err => message.reply("Cannot fetch message: '" + args + "', err: " + err + "!"));

  }
});

它工作正常,直到message.guild.fetchMember(user, false)为止,在那里我掉入catch块并打印许多“找不到以下对象的对象:******#****!”。消息。

我没有找回任何实际的异常块,并且为前62或788工作的代码有反应。似乎该漫游器没有缓存用户信息,即使在message.guild.fetchMember(user, boolean)中使用false也不起作用。

但是已定义该成员的用户对象。我需要成员对象才能使用member.addRole()

有人可以帮我弄清楚如何使它工作吗?还是我做错了?

我正在以“ discord.js”:“ ^ 11.4.2”作为依赖项运行节点v11.6.0。

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现来自BOT.guilds.first()的行会对象具有: 成员:656, memberCount:2470

所以,如果我这样做:

        BOT.guilds.first().fetchMembers().then((guild) => {
            ...
        }

这解决了我的问题,因为fetchMembers()返回了一个Promise<Guild>,我可以在.then()子句中看到该对象,并且该Guild对象的内部提取了所有成员。

希望这可以帮助其他人!