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

如何用Python+Discum与Midjourney的Remix变体弹窗交互?

问题描述

我正在用Discum和Discord中的Midjourney交互,已经能通过Discum操作V1、V2、V3、V4按钮,但无法给Remix提示弹窗(Modal)输入内容。我已通过/prefer remix开启Remix功能,以下是触发变体操作的代码:

url = self.discord + "interactions"
nonce = calculateNonce("now")

component_type = message.components[1]["components"][image_no - 1]

payload = {
    "type": 3,
    "application_id": CONFIG.APPLICATION_ID,
    "guild_id": CONFIG.GUILD_ID,
    "channel_id": CONFIG.CHANNEL_ID,
    "data": {
        "component_type": component_type["type"],
        "custom_id": component_type["custom_id"]
    },
    "nonce": nonce,
    "message_flags": 0,
    "message_id": message.message_id,
    "session_id": "".join(random.choice(string.ascii_letters + string.digits) for _ in range(32))
}

fields = {"payload_json": (None, json.dumps(payload))}
randomstr = ''.join(random.sample(string.ascii_letters + string.digits, 16))
body = MultipartEncoder(fields=fields, boundary='----WebKitFormBoundary' + randomstr)
headerMods = {"update": {"Content-Type": body.content_type}}

return Wrapper.sendRequest(self.s, 'post', url, body, headerModifications=headerMods, log=self.log)

如果Discum目前没有解决方案,能否直接通过Discord API实现该功能?

解决方案

Discum暂无内置处理Modal提交的方法,但可以直接调用Discord交互API完成Remix弹窗的内容输入,步骤如下:

  1. 捕获Modal交互数据:触发变体按钮后,Discord会返回包含Modal信息的交互响应,需从中提取interaction_id、interaction_token、弹窗的custom_id以及输入框的component_id。
  2. 构造Modal提交Payload:按照Discord API要求,构造类型为5的交互响应Payload,填入自定义的Remix提示词。
  3. 发送请求提交Modal:将Payload发送到指定的交互回调接口。

示例代码如下:

import json
from requests_toolbelt.multipart.encoder import MultipartEncoder
import random
import string

# 从交互响应中获取的参数
interaction_id = "实际获取的交互ID"
interaction_token = "实际获取的交互Token"
modal_custom_id = "Remix弹窗的custom_id"
input_component_id = "弹窗输入框的component_id"
new_prompt = "自定义的Remix提示词"

# 构造提交Payload
payload = {
    "type": 5,
    "data": {
        "custom_id": modal_custom_id,
        "components": [
            {
                "type": 1,
                "components": [
                    {
                        "type": 4,
                        "custom_id": input_component_id,
                        "value": new_prompt
                    }
                ]
            }
        ]
    }
}

# 发送请求
url = f"https://discord.com/api/v9/interactions/{interaction_id}/{interaction_token}/callback"
fields = {"payload_json": (None, json.dumps(payload))}
randomstr = ''.join(random.sample(string.ascii_letters + string.digits, 16))
body = MultipartEncoder(fields=fields, boundary='----WebKitFormBoundary' + randomstr)
headers = {
    "Content-Type": body.content_type,
    "Authorization": f"Bot {你的Bot令牌}"  # 若为用户账号则替换为"Bearer {用户令牌}"
}

response = self.s.post(url, data=body, headers=headers)

注意事项

  • 需监听Discum的WS事件,触发变体按钮后会收到INTERACTION_CREATE事件,其中包含Modal的完整信息。
  • 使用用户账号令牌时,需确保令牌有效且未触发Discord风控机制。
  • Midjourney版本更新可能会调整Modal的custom_id或输入组件ID,需根据实际返回数据调整参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:16:02