玩转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