玩转Midjourney系列三: 使用golang调用Midjourney Bot
前几章,我介绍了Midjourney以及Midjourney Bot的基本玩法, 本章我将站在一个开发的视角,使用编程的方式来调用Midjourney Bot。
原理
由于Midjourney Bot是由Discord开发出来的Application,我们可以先通过阅读Discord Developer Platform Docs文档来了解下Discord开放的一些API能力。
/imagine发生了什么
首先,我们打开浏览器的开发者工具, 通过抓包看下客户端与服务端之间的调用请求。
以Google Chrome为例:
打开开发者工具:

当我们给Midjourney Bot发送一个/imagine指令时, 可以看到抓到的请求是:
发送/imagine指令:

抓包查看请求:

通过阅读interactions api文档, 我们可以发现这个接口就是与Discord Bot交互用的, 那么,我们完全可以通过curl, postman等一系列工具来模拟同样的请求与实现/imagine, 有兴趣的小伙伴可以手动实践试试。
经过测试,我们只需要改变prompt,其它的参数都可以保持不变,便可以实现给Midjourney Bot发送/imagine指令。
需要注意的是, 由于Discord API接口有鉴权, 我们需要在HTTP请求时带上Authorization头部, 内容可以从这里拿到:
获取Authorization头部内容:

那么通过curl测试的请求为:
curl -d '{payload_json}' -H 'Authorization: {your token}' -H 'Content-Type: application/json' https://discord.com/api/v9/interactions -v
那么通过同样的方式,我们可以实现大部分给Midjourney Bot发送的指令。
midjourney-go介绍
midjourney-go主要是方便调用Midjourney Bot, 进行以下指令的操作:
-
/imagine
-
/upscale
-
/variation
-
/describe
-
/blend
-
/reroll
它被设计为不包含任何业务逻辑,且非常轻量级,所以可以很方便的被集成到使用Golang开发的项目中,比如我们在Discord中开发了自己的Bot, 便可以很轻松的集成Midjourney Bot的能力。
环境准备
- 科学上网
- 安装golang环境
- 准备
discord token - 准备
guild_id和channel_id
使用方式
使用方式非常简单, 新建一个Golang的项目, 然后编辑main.go, 只需几行代码就可以实现/imagine:
package main
import (
"context"
"log"
"github.com/hongliang5316/midjourney-go/midjourney"
)
func main() {
client := midjourney.NewClient(&midjourney.Config{
UserToken: "",
})
// imagine
err := client.Imagine(context.Background(), &midjourney.ImagineRequest{
GuildID: "",
ChannelID: "",
Prompt: "",
})
if err != nil {
log.Fatalf("Call client.Imagine failed, err: %+v", err)
}
}
然后运行:
go mod tidy
go run main.go
然后观察discord频道里的Midjourney Bot的消息即可。
总结
本章介绍了如何使用Golang调用Midjourney Bot, 我们有了midjourney-go, 可以在我们的应用中调用Midjourney Bot了, 但是由于Midjourney Bot的输出的图片是在Discord中的, 我们还是无法完全将Midjourney的输出图片的能力集成到我们的应用中, 好在Discord非常开放, 支持通过编程的方式获取Midjourney Bot的消息, 下一章我将介绍一下如何脱离Discord, 自建Midjourney APIServer。
转载自:https://juejin.cn/post/7246924217681117244