
discord 的 modal(模态窗口)是前端交互组件,其表单内容不会以明文形式暴露在 http 请求中;服务端无法通过 requests 直接读取用户填写的 modal 问题与答案,必须依赖 discord 官方事件回调机制(如 interaction.create_modal_submit)进行接收。
Discord Modal 是一种由客户端(用户浏览器或 Discord App)渲染并提交的交互式表单,其设计初衷是完全基于 Discord Bot API 的交互事件流,而非传统 Web 表单的 HTTP POST 请求。这意味着:
- ✅ Modal 提交后触发的是 Interaction 事件(类型为 InteractionType.ModalSubmit),包含所有输入字段的 components 数据;
- ❌ 无法通过抓包 requests 或逆向 Chrome Network 面板获取原始问题文本——因为 Modal 的“问题定义”(即 title、label 等)仅存在于 Bot 发送 Modal 时的 create_modal() 调用中,不随提交请求返回;
- ❌ requests 模块本身不具备监听 Discord 网关事件的能力,它只能发起主动 HTTP 请求(如发送消息、调用 API),无法被动接收用户交互。
正确做法:使用 discord.py 处理 ModalSubmit 事件
以下是一个标准的 discord.py v2.3+ 示例,展示如何定义 Modal 并安全提取用户填写内容:
import discord
from discord import ui
from discord.ext import commands
class MyModal(ui.Modal, title="用户反馈表单"):
name = ui.TextInput(label="姓名", placeholder="请输入您的姓名", required=True)
email = ui.TextInput(label="邮箱", placeholder="example@domain.com", required=False)
feedback = ui.TextInput(
label="您的建议",
style=discord.TextStyle.long,
max_length=1000,
required=True
)
async def on_submit(self, interaction: discord.Interaction):
# ✅ 此处可安全访问用户填写的所有值
await interaction.response.send_message(
f"✅ 已收到!\n姓名:{self.name}\n邮箱:{self.email}\n建议:{self.feedback}",
ephemeral=True
)
# ? 可进一步写入数据库、转发至 webhook 等
# webhook_url = "https://discord.com/api/webhooks/..."
# requests.post(webhook_url, json={"content": f"新反馈:{self.feedback}"})
# 在 command 中弹出 Modal
@commands.command()
async def feedback(ctx):
modal = MyModal()
await ctx.interaction.response.send_modal(modal)关键注意事项
- Modal 的“问题”不随提交传输:label、placeholder、required 等元信息仅在 Bot 构建 Modal 时存在,提交事件中只含用户实际输入的 value 字符串;
- 不要尝试伪造请求:Discord 后端校验严格,手动构造 /interactions 请求极难绕过签名(X-Signature-Ed25519 / X-Signature-Timestamp)和状态校验;
- Webhook 是输出通道,不是输入通道:如答案所述,requests 可用于将 Modal 数据发送出去(例如推送到外部系统),但绝不能用于“读取”或“监听”Modal 内容;
- 务必启用 message_content 权限(如需解析上下文)及 intents.message_content = True(若涉及历史消息关联)。
总结
Modal 是 Discord 交互生态中的“黑盒表单”——它的定义与呈现由 Bot 控制,而它的数据回收则严格绑定于官方 Interaction 生命周期。放弃对 requests 抓包的幻想,转而构建健壮的 ModalSubmit 事件处理器,才是符合 Discord 设计哲学与 API 规范的正解。










