【问题标题】:Fetching all users from Discord server从 Discord 服务器获取所有用户
【发布时间】:2021-04-12 11:47:45
【问题描述】:

我在获取服务器上所有用户的数据时遇到了问题。目前,当我尝试第一种方法时,我只得到了 21 人(在线模组、管理员和机器人),而不是全部 546 人。 我找到了.fetch() 的第二种方法,但它给了我 0 个用户,所以我认为我没有正确使用它(但它没有给我任何错误,比如当我尝试使用 await 和 forEach() 之后)。这个机器人的目的是每天更新每个用户的排名,rankUpAll() 工作得很好。

const job = new CronJob('29 18 * * *', function () {
  const guild = client.guilds.cache.get(serverId);
  let Embed = new Discord.MessageEmbed()
    .setColor('#FFC900')
    .setFooter('~~~ qbeczek', 'https://i.imgur.com/xutibOg.png')
    .setTitle('Cześć!');
  let seenUser = 0;
  let listOfUsers;
  guild.members.cache.forEach(member => {
    seenUser++;
    // if (member.id == myid) {
    //   rankUpAll(member, guild, Embed);
    // }
  });
  console.log(`Fetched: ${seenUser}`);
  seenUser = 0;
  const wait = new Promise(() => { listOfUsers = guild.members.fetch() });
  Promise.all([wait]).then((values) => {
    listOfUsers.forEach(member => {
      //console.log(member.displayName);
      seenUser++;
      // if (member.id.match(myid)) {
      //   rankUpAll(member, guild, Embed);
      // }
    })
  });
  console.log(`Fetched: ${seenUser}`);
}, null, true, 'Poland');
job.start();
})

【问题讨论】:

    标签: discord discord.js


    【解决方案1】:

    您需要启用服务器成员意图: “如果您的机器人跟踪服务器成员或下载整个成员列表,您可能需要服务器成员意图来接收成员事件和成员列表。”

    您可以在此处阅读有关意图的一些信息:https://discordjs.guide/popular-topics/intents.html

    【讨论】:

    • 我是否只需要在 discord 开发门户中切换 SERVER MEMBERS INTENT 还是需要再次启动并将机器人添加到服务器?
    • 在面板内打开 SERVER MEMBER INTENT。
    • 仍然没有任何变化,第一个结果取决于在线管理员,第二个仍然给我 0 在线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2022-01-10
    • 2023-03-22
    • 2019-01-23
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多