使用Python Requests调用Discord斜杠命令遇400错误求助
排查Discord斜杠命令接口400错误的常见原因
核心问题本质
调用/interactions接口返回400,说明请求参数完全不符合Discord API的规范——你之前把JSON里的true/null改成带引号的字符串是错误操作,JSON的布尔值、空值不需要加引号,直接用true、null才是正确格式。
常见错误点及修复方案
- 请求头缺失
Content-Type
Discord的interactions接口要求必须携带Content-Type: application/json请求头,否则API无法正确解析JSON格式的请求体,这是最容易遗漏的关键项。 - 请求体核心字段缺失或格式错误
斜杠命令的请求体必须包含以下必填字段:type: 固定为2(代表应用命令交互类型)application_id: 你的Discord应用/机器人的ID(不是用户Token对应的账号ID)guild_id、channel_id: 目标服务器和频道的ID,必须与实际环境匹配data: 需包含name(斜杠命令名称,比如rank),无参数时options传空数组[]
注意:所有字段类型必须严格匹配,比如type是数字而非字符串,null不能写成"null"。
- Token权限不足
确保Token对应的账号有权限在目标频道使用该斜杠命令,同时你的Discord应用已安装到目标服务器,权限范围包含applications.commands。 - 接口版本或URL错误
确认使用的API版本(v9是可用的),URL必须严格为https://discord.com/api/v9/interactions,不能添加额外路径。
修正后的示例代码
import requests import json def send_slash_command(token: str, application_id: str, guild_id: str, channel_id: str, command_name: str): url = "https://discord.com/api/v9/interactions" payload = { "type": 2, "application_id": application_id, "guild_id": guild_id, "channel_id": channel_id, "data": { "name": command_name, "options": [] } } headers = { "Authorization": token, "Content-Type": "application/json" } response = requests.post(url, data=json.dumps(payload), headers=headers) print(response.status_code) print(response.text) # 打印响应内容,获取具体错误提示
高效排查技巧
调用接口后一定要打印response.text,Discord的400错误通常会返回具体的错误细节(比如"message": "Invalid Form Body", "errors": {...}),根据提示调整参数比盲目试错效率高得多。
内容的提问来源于stack exchange,提问作者Mateo de Moya
相关产品推荐
相关产品推荐

