首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得任何不和谐服务器的成员总数?

如何获得任何不和谐服务器的成员总数?
EN

Stack Overflow用户
提问于 2022-03-22 01:46:44
回答 1查看 1.9K关注 0票数 2

我正在努力构建一个脚本,以获得一群不和谐的服务器的总成员。我实际上是这样做的,像下面这样,但我认为我的IP地址已被禁止,因为我得到了“邀请无效”错误,因为不和谐,即使邀请链接是工作的。

我的问题是,不和谐是否有API来获取任何服务器的成员总数?或者是否有任何第三方图书馆用于这个目的?或者其他方法?

代码语言:javascript
运行
复制
const puppeteer = require('puppeteer')

const discordMembers = async ({ server, browser }) => {
  if (!server) return

  let totalMembers

  const page = await browser.newPage()

  try {
    await page.goto(`https://discord.com/invite/${server}`, {
      timeout: 3000
    })

    const selector = '.pill-qMtBTq'
    await page.waitForSelector(selector, {
      timeout: 3000
    })
    const totalMembersContent = await page.evaluate(selector => {
      return document.querySelectorAll(selector)[1].textContent
    }, selector)

    if (totalMembersContent) {
      totalMembers = totalMembersContent
        .replace(/ Members/, '')
        .replace(/,/g, '')
      totalMembers = parseInt(totalMembers)
    }
  } catch (err) {
    console.log(err.message)
  }

  await page.close()

  if (totalMembers) return totalMembers
}

const asyncForEach = async (array, callback) => {
  for (let i = 0; i < array.length; i++) {
    await callback(array[i], i, array)
  }
}

const run = async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: ['--no-sandbox']
  })

  const servers = ['tQp4pSE', '3P5K3dzgdB']

  await asyncForEach(servers, async server => {
    const members = await discordMembers({ server, browser })
    console.log({ server, members })

    // result
    // { server: 'tQp4pSE', members: 57600 }
    // { server: '3P5K3dzgdB', members: 159106 }
  })

  await browser.close()
}

run()

更新日期:2022年3月22日

谢谢@Vaviloff的回答,我们实际上可以访问不和谐的私有API,但问题是它只能通过浏览器访问。我从Axios那里得到了Request failed with status code 400问题。这是CORS问题吗?如何在Node.js应用程序中获得结果?

代码语言:javascript
运行
复制
const axios = require('axios')

const discordMembers = async ({ server }) => {
  try {
    const apiResult = await axios({
      data: {},
      method: 'get',
      url: `https://discord.com/api/v9/invites/${server}?with_counts=true&with_expiration=true`
    })
    console.log(apiResult)
  } catch (err) {
    console.log(err)
  }
}

discordMembers({ server: 'tQp4pSE' })
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-22 05:37:52

许多现代web应用程序都有自己的内部API。通常,您可以通过使用Devtools中的“网络”选项卡(用Fetch/XHR类型筛选)来发现向它发出请求的前端:

当然,这类API端点可以随时更改,但通常是最后一次,而且是一种相当方便的抓取方法。

目前,不和谐使用此URL作为基本实例描述:

代码语言:javascript
运行
复制
https://discord.com/api/v9/invites/tQp4pSE?with_counts=true&with_expiration=true

通过访问它,您可以获得所需的数据:

更新

要使代码工作,请不要在请求中发送任何数据:

代码语言:javascript
运行
复制
const apiResult = await axios({
  method: 'get',
  url: `https://discord.com/api/v9/invites/${server}?with_counts=true&with_expiration=true`
})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71566064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档