使用Python登录Discord并发送Slash Command报错求助
使用Discord API通过个人账号触发斜杠命令的正确方式
你遇到的问题核心在于:
- 直接发送带
/前缀的文本只是普通消息,Discord不会将其解析为斜杠命令; - 原来的代码用了普通频道消息的API端点发送命令结构,接口不识别这种格式,所以返回"空消息"错误。
要触发其他Bot的斜杠命令,必须使用Discord的交互接口,而非普通消息接口,且请求体需要严格符合格式要求。
关键参数准备
需要先获取以下参数:
AUTH_TOKEN:你的个人账号授权token(即原代码中的token);APPLICATION_ID:目标斜杠命令所属Bot的ID(比如Midjourney的Bot ID是936929561302675456);GUILD_ID:目标服务器的ID;CHANNEL_ID:目标频道的ID;COMMAND_ID:imagine命令的专属ID(获取方法见下文)。
修正后的代码示例
import requests import uuid # 替换为你的实际参数 AUTH_TOKEN = "你的个人账号token" APPLICATION_ID = "936929561302675456" # Midjourney Bot的ID GUILD_ID = "你的服务器ID" CHANNEL_ID = "你的频道ID" COMMAND_ID = "imagine命令的ID" url = "https://discord.com/api/v9/interactions" headers = { "authorization": AUTH_TOKEN, "Content-Type": "application/json" } payload = { "type": 2, # 固定值,表示应用命令交互类型 "application_id": APPLICATION_ID, "guild_id": GUILD_ID, "channel_id": CHANNEL_ID, "session_id": str(uuid.uuid4()), # 生成随机会话ID,每次请求可不同 "data": { "version": "1", # 命令版本号,一般用1即可,抓包可看到具体值 "id": COMMAND_ID, "name": "imagine", "type": 1, # 固定值,表示全局命令 "options": [ { "name": "prompt", "type": 3, # 固定值,表示字符串类型参数 "value": "a cat" } ] } } response = requests.post(url, headers=headers, json=payload) print(response.status_code) print(response.json())
如何获取COMMAND_ID
最简单的方式是通过Discord网页版抓包:
- 打开Discord网页版,进入目标服务器和频道;
- 按F12打开开发者工具,切换到「Network」标签;
- 在聊天框输入
/imagine a cat并发送,找到类型为POST、URL包含interactions的请求; - 查看该请求的「Payload」,里面
data.id的值就是COMMAND_ID。
重要提醒
用个人账号通过自动化方式调用Discord API,可能违反Discord的服务条款,存在账号被封禁的风险,请谨慎操作。
内容的提问来源于stack exchange,提问作者JustLutz
相关产品推荐
相关产品推荐

