You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Firebase反向查询:已知Roblox ID获取Discord ID

问题说明

我用Node.js开发Roblox游戏验证机器人时遇到Firebase相关问题:Firebase存储结构为/verified/{DiscordID},其中linked字段对应Roblox用户ID。现有脚本可通过Discord ID查询匹配的Roblox ID,但现在需要反向通过已知的Roblox ID获取对应的Discord ID,求实现方法或代码。

现有正向查询的未完成脚本如下:

app.get("/api/verify/:target/:rbxid", function(req, res) {
    async function update(target, rbxid) {
        var { body } = await snekfetch.get(`${config.firebaseURL}verified/${target}.json`)
        //console.log(body)
        //console.log(`${config.firebaseURL}/verified/${target}.json`)
        if (!body) {
            return res.json({"verify": false})
        }
        var { body } = await snekfetch.get(`https://users.roblox.com/v1/users/${body.linked}`)
        if (body.id == rbxid) {
            return res.json({"verify": true})
        } else {
            return res.json({"verify": false})
        }
    }
    update(req.params.target,req.params.rbxid)
})
解决方案

你的Firebase节点以Discord ID作为键,因此需要通过查询linked字段等于目标Roblox ID的方式反向匹配对应的Discord ID。以下是基于你现有snekfetch工具的实现方案:

反向查询接口实现代码

app.get("/api/get-discord/:rbxid", async function(req, res) {
    const targetRbxId = req.params.rbxid;
    try {
        // 构造Firebase查询:筛选linked字段与目标Roblox ID匹配的节点
        const { body } = await snekfetch.get(`${config.firebaseURL}verified.json?orderBy="linked"&equalTo="${targetRbxId}"`);
        
        // 查询结果为空,说明无匹配项
        if (Object.keys(body).length === 0) {
            return res.json({ "discordId": null, "found": false });
        }
        
        // 取第一个匹配的Discord ID(假设一个Roblox ID仅绑定一个Discord账号)
        const discordId = Object.keys(body)[0];
        return res.json({ "discordId": discordId, "found": true });
    } catch (error) {
        console.error("查询出错:", error);
        return res.json({ "error": "查询失败", "found": false });
    }
})

关键注意事项

  1. Firebase数据库规则配置:必须确保数据库规则允许对/verified节点的linked字段进行排序查询,同时添加索引提升性能,示例规则如下:
{
  "rules": {
    "verified": {
      ".read": true, // 根据你的实际权限需求调整
      ".write": false,
      ".indexOn": ["linked"] // 必须添加该索引,否则查询会报错或性能极低
    }
  }
}
  1. 多匹配场景处理:如果存在一个Roblox ID绑定多个Discord账号的情况,可以遍历Object.keys(body)获取所有匹配的Discord ID。
  2. 错误捕获:通过try/catch捕获网络请求或Firebase返回的异常,避免接口崩溃。

内容的提问来源于stack exchange,提问作者PlurrYT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:32:35