无法获取不和谐公会/服务器/频道成员

2 python node.js postman discord

尝试使用不和谐的 API 端点获取不和谐成员的数量GET/guilds/{guild.id}/members(请参阅此处)。

我正在使用 Postman 来拨打电话。我设置了授权标头:

Authorization: "Bot ${BOT_TOKEN}"
Run Code Online (Sandbox Code Playgroud)

我得到的回应是

{ "message": "Missing Access", "code": 50001 }
Run Code Online (Sandbox Code Playgroud)

我也尝试过Authorization: DISCORD_CLIENT_ID。回应是{ "message": "401: Unauthorized", "code": 0 }。

我错过了什么吗?这个你能帮我吗。

在此输入图像描述

Chr*_*ris 5

首先,您需要确保您使用的是正确的guildid,而不是channelid。您可以通过->启用Developer ModeDiscord ,这样您就可以通过右键单击(服务器),然后单击 来获取 id 。User settingsAdvancedguildguildCopy ID

接下来,通过Developer Portal转到您的应用程序,选择您的应用程序并导航到Bot左侧导航栏上的选项卡。authentication token从那里,获取您需要在请求标头中传递的机器人。在同一选项卡上 - 由于您需要获取 的列表Guild Members,并且由于“根据是否为您的应用程序启用特权意图来限制端点GUILD_MEMBERS” - 向下滚动到该Privileged Gateway Intents部分并启用SERVER MEMBERS INTENT。

下面是使用 Node.js 标准模块的工作示例。请注意,如此处所述,limit返回的最大成员数默认为1。因此,您可以调整limit查询参数,如下所示,以便每个请求接收更多结果。每个请求可以获得的最大结果数是1000。因此,如果 aguild包含的成员多于此,您可以跟踪每个先前请求中存在的最高用户 ID,并将其传递给下after一个请求的参数,如文档中所述。这样就可以获取到a中的每一个成员了guild。另外,请确保以正确的方式设置属性options,如下所示;否则,您可能会遇到getaddrinfo ENOTFOUND错误,如下所示。

更新

如果您还没有,您应该通过在应用程序设置(从范围中选择)下bot生成邀请链接来将您的服务器添加到您想要的服务器。现在,您可以从浏览器访问该 URL 并将其添加到您的任何服务器。如果需要,您可以与其他人共享相同的邀请链接,以便他们可以将您添加到他们的服务器。botURL GeneratorOAuth2botbotbot

Node.js 中的示例

const https = require('https')
const url = require('url');

GUILD_ID = "YOUR_GUILD_ID"
BOT_TOKEN = 'YOUR_BOT_TOKEN'
LIMIT = 10

const requestUrl = url.parse(url.format({
    protocol: 'https',
    hostname: 'discord.com',
    pathname: `/api/guilds/${GUILD_ID}/members`,
    query: {
        'limit': LIMIT
    }
}));

const options = {
    hostname: requestUrl.hostname,
    path: requestUrl.path,
    method: 'GET',
    headers: {
        'Authorization': `Bot ${BOT_TOKEN}`,
    }
}
const req = https.request(options, res => {
    res.on('data', d => {
        process.stdout.write(d)
    })
})

req.on('error', error => {
    console.error(error)
})

req.end()
Run Code Online (Sandbox Code Playgroud)

Python 中的示例

import requests
import json

GUILD_ID = "YOUR_GUILD_ID"
BOT_TOKEN = 'YOUR_BOT_TOKEN'
LIMIT = 10
headers = {'Authorization' : 'Bot {}'.format(BOT_TOKEN)}
base_URL = 'https://discord.com/api/guilds/{}/members'.format(GUILD_ID)
params = {"limit": LIMIT}
r = requests.get(base_URL, headers=headers, params=params)
print(r.status_code)
print(r.text,'\n')
#print(r.raise_for_status())
for obj in r.json():
    print(obj,'\n')
Run Code Online (Sandbox Code Playgroud)