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服务器IDCHANNEL_ID:命令发送的频道IDSALAI_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的强大功能。其核心价值在于:
- 协议抽象:隐藏了Discord API的细节,让开发者专注于业务逻辑
- 功能完整性:实现了从绘图到放大、变体的全流程操作
- 易于集成:通过简单的函数调用即可将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),仅供参考