使用Delphi开发的Discord机器人修改状态时出现403 Forbidden错误
解决Discord机器人修改状态时的403 Forbidden错误
错误原因
你调用的https://discord.com/api/v9/users/@me/settings是人类用户个人账户用于修改自身设置的接口,机器人应用账号没有权限访问该接口,因此返回403 Forbidden错误。机器人的状态管理有专门的逻辑,不能复用用户设置接口。
正确解决方案
机器人的在线状态需要通过Discord Gateway(WebSocket连接)来设置,具体步骤如下:
获取Gateway连接地址
先调用GET /gateway/bot接口获取机器人专属的WebSocket连接地址,接口返回的url字段就是连接入口。建立WebSocket连接并完成身份验证
用Delphi的WebSocket组件(如TWebSocketClient)连接到上述地址,连接成功后发送identifypayload完成身份验证,同时可以指定初始状态:{ "op": 2, "d": { "token": "你的机器人Token", "intents": 你的机器人所需权限整数, "properties": { "$os": "windows", "$browser": "delphi-bot", "$device": "delphi-bot" }, "presence": { "status": "dnd", "activities": [] } } }动态修改状态
如果需要后续随时修改状态,发送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
相关产品推荐
相关产品推荐

