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

使用Delphi开发的Discord机器人修改状态时出现403 Forbidden错误

解决Discord机器人修改状态时的403 Forbidden错误

错误原因

你调用的https://discord.com/api/v9/users/@me/settings是人类用户个人账户用于修改自身设置的接口,机器人应用账号没有权限访问该接口,因此返回403 Forbidden错误。机器人的状态管理有专门的逻辑,不能复用用户设置接口。

正确解决方案

机器人的在线状态需要通过Discord Gateway(WebSocket连接)来设置,具体步骤如下:

  1. 获取Gateway连接地址
    先调用GET /gateway/bot接口获取机器人专属的WebSocket连接地址,接口返回的url字段就是连接入口。

  2. 建立WebSocket连接并完成身份验证
    用Delphi的WebSocket组件(如TWebSocketClient)连接到上述地址,连接成功后发送identify payload完成身份验证,同时可以指定初始状态:

    {
      "op": 2,
      "d": {
        "token": "你的机器人Token",
        "intents": 你的机器人所需权限整数,
        "properties": {
          "$os": "windows",
          "$browser": "delphi-bot",
          "$device": "delphi-bot"
        },
        "presence": {
          "status": "dnd",
          "activities": []
        }
      }
    }
    
  3. 动态修改状态
    如果需要后续随时修改状态,发送STATUS_UPDATE事件(op码为3)即可:

    {
      "op": 3,
      "d": {
        "status": "dnd",
        "activities": [],
        "afk": false
      }
    }
    

Delphi代码示例(WebSocket方式)

假设使用TWebSocketClient组件实现状态修改:

procedure TMainForm.UpdateBotStatus(const AStatus: string);
var
  LPayload: string;
begin
  if not WebSocketClient1.Active then Exit;
  // 构造状态更新的JSON payload
  LPayload := Format(
    '{"op":3,"d":{"status":"%s","activities":[],"afk":false}}',
    [AStatus]
  );
  WebSocketClient1.SendText(LPayload);
end;

注意:确保机器人Token拥有正确的权限,且WebSocket连接已成功建立并完成身份验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:35:07