繁体   English   中英

Discord.js:如何通过 Discord 用户 ID 查找服务器成员(在 Discord 中分配角色)?

[英]Discord.js: How to find server member (to assign roles in Discord) by Discord User-ID?

我正在构建一个 Web 应用程序,该应用程序对具有不一致 oauth 的用户进行身份验证。 当用户在 laravel 应用程序中注册时,来自不和谐 oauth 的给定数据将保存到 sql 数据库中。 在此数据中是用户名、鉴别器和唯一的 discord 用户 ID。 我现在有一个单独的 node.js 服务器运行 discord.js 和 forms 一个机器人。 我希望这个机器人在 discord 服务器上为经过身份验证的用户分配“注册”角色。 目前,我只能将角色分配给通过访问 discord.js 消息 object 向服务器上的机器人发送消息的用户,如下所示。

bot.on("messageCreate", (message) => {
    if (message.content.toLowerCase().startsWith("!role add")) {
        let member = message.mentions.members.first();
        let role = message.mentions.roles.first()
        member.roles.add(role)
    }
}) //this works. But how can a member be found only using the Discord User ID?

这是问题:Discord.js 中是否有办法通过提供 discord 用户 ID(由 OAuth 提供并保存到我的数据库中)来查找成员,而不是从用户那里检索消息?

我希望我的问题很清楚,不要混淆。 我没有询问有关 http / 服务器-服务器通信或 Laravel/Oauth/DB 操作的任何事情,因为这已经有效。 我只是找不到像 function 这样的

let member = bot.findGuildMemberByID("USER-ID HERE");

这是通用架构的可视化,以使其更加清晰。 建筑学。最下面乱七八糟的东西是数据库中显示用户id的一行

只需获取您要在其中找到成员的公会:

const guild = client.guilds.cache.get("GUILD-ID HERE"); // or message.guild

然后你可以通过他们的 ID 获得一个成员:

使用get

const member = guild.members.cache.get("USER-ID HERE");

过滤所有公会成员

const member = guild.members.cache.find(member => member.id === "USER-ID HERE");

获取成员:

const member = guild.members.fetch("USER-ID HERE");

实际上,您只需要 id 即可将角色添加到成员。 Discord API 有一个端点

discord.js 目前没有对此的“内置”方法,但我已经为此提出了拉取请求,但它还没有准备好

相反,您可以在内部使用 rest,它也在那里使用

const { REST } = require("discord.js") // will need to use @discordjs/rest if not using v14

// ...

const rest = new REST({ version: "9" }).setToken(client.token)
await rest.put(Routes.guildMemberRole(guildId, userId, roleId), {
  reason // optional - reason for adding the role
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM