不一致:按ID获取用户

2022-02-22 00:00:00 discord node.js javascript

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

代码在浏览器中运行,但我还添加了node.js标记,因为我不知道是否可以通过调用Node.js中编写的服务器函数来执行此操作。

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

我想仅使用ID请求用户信息。在JavaScript中执行此操作的最佳方式是什么?


解决方案

可以使用不一致接口

首先,创建不一致应用程序here。完成后,单击侧边栏上的"机器人",然后为该应用程序创建一个机器人。在那里,您将在bot用户名下看到一个名为"Token"的部分。把这个复印下来,放在安全的地方。千万不要共享您的令牌,这一点很重要。如果这样做,您应该重新生成它以防止滥用。

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


直接使用接口

这里是一个最小的示例,说明如何使用Node.js:

使用DiscordAPI根据用户的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
}

使用库

或者,您也可以使用不一致库来执行此操作。以下示例还处理速率限制。

@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相同。

对于打字用户:

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/睡觉还不存在。

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.jsUser对象。

相关文章