不一致:按ID获取用户
我正在尝试创建一个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
对象。
相关文章