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

使用Roblox Groups API批量降职遇401未授权问题(Node.js)

问题分析与修复方案

核心错误原因

导致401未授权的关键问题是授权方式完全错误,同时存在异步逻辑和请求格式的问题:

  • Roblox Groups API要求通过请求头的Cookie字段传递.ROBLOSECURITY凭证,你却把它塞进了请求体里,API根本识别不到授权信息。
  • Axios的patch方法参数使用错误,请求头和请求体的位置搞混了。
  • 循环里的wait(1)不是Node.js原生方法,会导致异步逻辑混乱,甚至瞬间发起大量请求触发Roblox限流。

修复后的Axios版本代码

const token = "YOUR .ROBLOSECURITY TOKEN";
const axios = require('axios');
const rolesetID = 36926359;
const groupId = 5598688;
const targetRoleId = 36926437;
const url = `https://groups.roblox.com/v1/groups/${groupId}/roles/${rolesetID}/users?limit=100`;

// 封装带授权的axios实例,避免重复写请求头
const authorizedAxios = axios.create({
  headers: {
    Cookie: `.ROBLOSECURITY=${token}`
  }
});

// 用异步函数处理分页与批量操作
async function demoteUsers() {
  let hasMore = true;
  let nextPageCursor = null;

  while (hasMore) {
    try {
      // 拼接分页请求地址
      const requestUrl = nextPageCursor ? `${url}&cursor=${nextPageCursor}` : url;
      const response = await authorizedAxios.get(requestUrl);
      const users = response.data.data;

      if (users.length === 0) {
        hasMore = false;
        break;
      }

      // 逐个处理用户,避免并发请求过载
      for (const user of users) {
        if (user.username === 'lickty123') continue;

        try {
          const demoteUrl = `https://groups.roblox.com/v1/groups/${groupId}/users/${user.userId}`;
          await authorizedAxios.patch(demoteUrl, { roleId: targetRoleId });
          console.log(`${user.userId} 已被降职`);
          // 每次请求后加1秒延迟,避免触发Roblox限流
          await new Promise(resolve => setTimeout(resolve, 1000));
        } catch (err) {
          console.error(`降职用户 ${user.userId} 失败:`, err.response?.data || err.message);
        }
      }

      // 更新分页游标,处理下一页数据
      nextPageCursor = response.data.nextPageCursor;
      hasMore = !!nextPageCursor;
    } catch (err) {
      console.error(`获取用户列表失败:`, err.response?.data || err.message);
      break;
    }
  }
}

demoteUsers();

更简洁的noblox.js版本(推荐)

既然已经引入了noblox.js,直接用它封装好的方法更省心,无需手动处理API细节:

const noblox = require('noblox.js');
const groupId = 5598688;
const sourceRoleId = 36926359;
const targetRoleId = 36926437;

async function demoteUsers() {
  // 登录Roblox账号
  await noblox.setCookie(".ROBLOSECURITY=YOUR_TOKEN_HERE");

  let cursor = null;
  do {
    // 获取指定角色的用户列表,自动处理分页
    const { data: users, nextPageCursor } = await noblox.getUsersInRole(groupId, sourceRoleId, { limit: 100, cursor });
    if (users.length === 0) break;

    for (const user of users) {
      if (user.username === 'lickty123') continue;

      try {
        await noblox.setRank(groupId, user.userId, targetRoleId);
        console.log(`${user.userId} 已被降职`);
        await new Promise(resolve => setTimeout(resolve, 1000));
      } catch (err) {
        console.error(`降职用户 ${user.userId} 失败:`, err.message);
      }
    }

    cursor = nextPageCursor;
  } while (cursor);
}

demoteUsers();

额外注意事项

  • 确认.ROBLOSECURITY令牌未过期,且对应账号确实拥有群组管理权限(可手动降职测试验证)。
  • Roblox API有严格限流,批量操作必须添加延迟,否则会被临时封禁请求。
  • 必须通过nextPageCursor处理分页,不要用固定循环次数,避免重复处理或遗漏用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:35:33