【问题标题】:Discord: Get User by IdDiscord:按 ID 获取用户
【发布时间】:2021-11-13 02:01:07
【问题描述】:

我正在尝试创建一个 Web 应用程序来管理我的 Discord 服务器的用户。在我的数据库中,我只存储了用户的 ID。

代码在浏览器中运行,但我还添加了 标签,因为我不知道我是否可以通过调用 Node.js 中编写的服务器函数来做到这一点。

我曾尝试使用 discord.js API,但据我了解,它需要一个 discord 机器人才能做到这一点。那不是我想要的。我想从我的前端检索用户的信息,即使通过调用后端函数,但没有始终在线的不和谐机器人。换句话说,我需要一些更简单的东西。

我想只使用 id 来请求用户的信息。在 JavaScript 中哪种方法最好?

【问题讨论】:

  • Discord 有一个 Nodejs 客户端,您可以通过它获取用户信息等。如果您想处理客户端应用程序上的逻辑,请查看 Discord REST API。特别是这里:discord.com/developers/docs/resources/user

标签: node.js javascript node.js discord


【解决方案1】:

您可以使用 Discord API。

首先,创建一个 Discord 应用程序here。完成后,单击侧边栏上的“机器人”并为该应用程序创建一个机器人。在那里,您会在机器人用户名下看到一个名为“令牌”的部分。复制它并将其存储在安全的地方。 切勿分享您的令牌,这一点很重要。如果这样做,您应该重新生成它以防止滥用。

然后,您可以使用 Get User 端点 (/users/{user.id}/) 检索用户的 ID。这应该由后端完成,因为它涉及authenticating with the bot token。


直接使用 API

这是一个最小示例,说明如何使用 Node.js 使用 Discord API 通过用户 ID 获取用户:

const fetch = require('node-fetch')

// You might want to store this in an environment variable or something
const token = 'YOUR_TOKEN'

const fetchUser = async id => {
  const response = await fetch(`https://discord.com/api/v9/users/${id}`, {
    headers: {
      Authorization: `Bot ${token}`
    }
  })
  if (!response.ok) throw new Error(`Error status code: ${response.status}`)
  return JSON.parse(await response.json())
}

响应会是这样的:

{
  "id": "123456789012345678",
  "username": "some username",
  "avatar": null,
  "discriminator": "1234",
  "public_flags": 0,
  "banner": null,
  "banner_color": null,
  "accent_color": null
}

使用库

或者,您也可以使用 Discord 库来代替。以下示例还处理速率限制。

@discordjs/rest + discord-api-types

const {REST} = require('@discordjs/rest')
const {Routes} = require('discord-api-types/v9')

const token = 'YOUR_TOKEN'

const rest = new REST().setToken(token)

const fetchUser = async id => rest.get(Routes.user(id))

结果将是与上述相同的 JSON。

对于 TypeScript 用户:

import type {RESTGetAPIUserResult, Snowflake} from 'discord-api-types/v9'

const fetchUser = async (id: Snowflake): Promise<RESTGetAPIUserResult> =>
  rest.get(Routes.user(id)) as Promise<RESTGetAPIUserResult>

discord.js

当我第一次发布这个答案时,@discordjs/rest 还不存在。

const {Client} = require('discord.js')

const token = 'YOUR_TOKEN'

const client = new Client({intents: []})
client.token = token

const fetchUser = async id => client.users.fetch(id)

fetchUser 的结果将是一个 discord.js User 对象。

【讨论】:

    【解决方案2】:

    你能做的就是

    let user = message.guild.cache.get('id');
    

    (由@cherryblossom修改)

    【讨论】:

    • 是否需要一个不和谐的机器人来做到这一点?
    • 你添加了标签“discord.js”,这让我相信你正在制作一个不和谐的机器人,不要无效标签。 @Francesco
    • 这段代码sn-p不正确;它应该是message.guild.members.cache.get('id')(同步只会返回缓存的用户)或await message.guild.members.fetch('id')(异步,必要时会获取用户)。
    猜你喜欢
    • 2019-12-30
    • 2019-02-26
    • 1970-01-01
    • 2021-02-06
    • 2023-04-11
    • 2019-05-03
    • 2021-05-22
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多