MidJourney-Wrapper源码解析:Salai.py中的Discord交互协议实现

📅 2026/7/30 18:34:15 👁️ 阅读次数 📝 编程学习
MidJourney-Wrapper源码解析:Salai.py中的Discord交互协议实现

MidJourney-Wrapper源码解析:Salai.py中的Discord交互协议实现

【免费下载链接】MidJourney-WrapperMidJourney wrapper in Discord.项目地址: https://gitcode.com/gh_mirrors/mi/MidJourney-Wrapper

MidJourney-Wrapper是一个基于Discord协议的MidJourney AI绘图工具封装库,通过Salai.py模块实现了与Discord API的交互,让开发者能够轻松集成AI绘图功能。本文将深入解析Salai.py的核心实现,帮助新手理解Discord交互协议的工作原理。

核心功能概览:MidJourney与Discord的无缝对接

Salai.py作为项目的核心模块,主要实现了四大核心功能,这些功能通过Discord的交互接口直接调用MidJourney的AI绘图能力:

  • 文本转图像:通过PassPromptToSelfBot函数发送绘画指令
  • 图像放大:提供基础放大(Upscale)和最大分辨率放大(MaxUpscale)两种模式
  • 图像变体:通过Variation函数生成相似风格的图像变体

这些功能的实现依赖于Discord的交互(Interaction)机制,这是一种比传统消息命令更强大的交互方式,支持按钮点击、下拉菜单等富交互形式。

协议实现细节:从 payload 构造到 API 调用

1. 交互请求的基本结构

Salai.py中的所有交互函数都遵循相同的请求模式:构造符合Discord API规范的payload,添加认证头,然后通过POST请求发送到Discord的交互接口。以最基础的PassPromptToSelfBot函数为例:

def PassPromptToSelfBot(prompt : str): payload ={ "type":2, "application_id":"936929561302675456", "guild_id":Globals.SERVER_ID, "channel_id":Globals.CHANNEL_ID, "session_id":"2fb980f65e5c9a77c96ca01f2c242cf6", "data":{ "version":"1077969938624553050", "id":"938956540159881230", "name":"imagine", "type":1, "options":[{"type":3,"name":"prompt","value":prompt}] }, "attachments":[] } header = {'authorization' : Globals.SALAI_TOKEN} response = requests.post("https://discord.com/api/v9/interactions", json = payload, headers = header) return response

这个函数构造了一个"imagine"命令的请求,其中几个关键参数需要特别注意:

  • type=2:表示这是一个应用命令(Application Command)
  • application_id:固定为MidJourney机器人的ID(936929561302675456)
  • data.options:包含了实际的绘画提示词(prompt)
  • authorization头:使用用户的SALAI_TOKEN进行身份验证

2. 图像操作的交互类型

与文本转图像的"应用命令"不同,图像放大和变体功能使用的是"组件交互"(Component Interaction),对应type=3。以Upscale函数为例:

def Upscale(index : int, messageId : str, messageHash : str): payload = { "type":3, "guild_id":Globals.SERVER_ID, "channel_id":Globals.CHANNEL_ID, "message_flags":0, "message_id": messageId, "application_id":"936929561302675456", "session_id":"45bc04dd4da37141a5f73dfbfaf5bdcf", "data":{ "component_type":2, "custom_id":"MJ::JOB::upsample::{}::{}".format(index, messageHash) } } # 发送请求的代码省略...

这里的关键是custom_id字段,它采用了MidJourney特定的格式:MJ::JOB::upsample::index::messageHash,其中:

  • upsample表示操作类型(放大)
  • index是要放大的图像序号(1-4)
  • messageHash是原始图像消息的唯一标识

3. 全局配置与依赖

Salai.py依赖Globals.py中定义的全局变量,包括:

  • SERVER_ID:Discord服务器ID
  • CHANNEL_ID:命令发送的频道ID
  • SALAI_TOKEN:用户认证令牌

这些配置需要用户根据自己的Discord环境进行设置,是实现交互的必要前提。

实际应用:从API调用到用户交互

Salai.py的函数在main.py中被封装为Discord机器人命令,提供用户友好的交互界面。例如:

@bot.command(description="This command is a wrapper of MidJourneyAI") async def mj_imagine(ctx, prompt: discord.Option(str)): response = PassPromptToSelfBot(prompt) # 处理响应的代码省略...

这段代码将PassPromptToSelfBot函数转换为一个Discord机器人命令/mj_imagine,用户只需输入提示词即可触发AI绘图。

总结:MidJourney-Wrapper的价值与扩展

Salai.py通过封装复杂的Discord交互协议,为开发者提供了简洁的API来调用MidJourney的强大功能。其核心价值在于:

  1. 协议抽象:隐藏了Discord API的细节,让开发者专注于业务逻辑
  2. 功能完整性:实现了从绘图到放大、变体的全流程操作
  3. 易于集成:通过简单的函数调用即可将AI绘图功能集成到自己的应用中

对于想要扩展功能的开发者,可以参考现有函数的实现模式,添加新的交互类型,如"重新生成"(Remix)或"平移"(Pan)等操作,只需构造相应的custom_id和payload即可。

要开始使用这个项目,你需要先克隆仓库:

git clone https://gitcode.com/gh_mirrors/mi/MidJourney-Wrapper

然后按照文档配置Globals.py中的必要参数,即可快速搭建自己的MidJourney交互应用。

【免费下载链接】MidJourney-WrapperMidJourney wrapper in Discord.项目地址: https://gitcode.com/gh_mirrors/mi/MidJourney-Wrapper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考