From a5130cd7f6eca002b7f98e0e868886911151cc16 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 1 May 2024 02:17:46 +0900
Subject: [PATCH] =?UTF-8?q?chore:=20del=20aipaint=20due=20to=20=E8=BF=87?=
=?UTF-8?q?=E6=B0=94?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 24 ----
main.go | 1 -
plugin/aipaint/aipaint.go | 224 --------------------------------------
plugin/aipaint/config.go | 56 ----------
plugin/aipaint/context.go | 41 -------
plugin/aipaint/img2img.go | 88 ---------------
6 files changed, 434 deletions(-)
delete mode 100644 plugin/aipaint/aipaint.go
delete mode 100644 plugin/aipaint/config.go
delete mode 100644 plugin/aipaint/context.go
delete mode 100644 plugin/aipaint/img2img.go
diff --git a/README.md b/README.md
index 9ee01c87..88978ae4 100644
--- a/README.md
+++ b/README.md
@@ -373,30 +373,6 @@ print("run[CQ:image,file="+j["img"]+"]")
- [x] 设置默认限速为每 m [分钟 | 秒] n 次触发
-
-
- ai绘图
-
- `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/aipaint"`
-
- - [x] [ ai绘图 | 生成色图 | 生成涩图 | ai画图 ] xxx
-
- - [x] [ ai高级绘图 | 高级生成色图 | 高级生成涩图 | ai高级画图 ] xxx
-
- - [x] [ 以图绘图 | 以图生图 | 以图画图 ] xxx [图片]|@xxx|[qq号]
-
- - [x] 设置ai绘图配置 [server] [token]
-
- - [x] 设置ai绘图撤回时间90s
-
- - [x] 查看ai绘图配置
-
- 例: 设置ai绘图配置 http://91.216.169.75:5010 abc
-
- 参考服务器 http://91.217.139.190:5010, http://91.216.169.75:5010, http://185.80.202.180:5010
-
- 通过 http://91.217.139.190:5010/token 获取token
-
AIWife
diff --git a/main.go b/main.go
index 715a8d82..a83933be 100644
--- a/main.go
+++ b/main.go
@@ -62,7 +62,6 @@ import (
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/ahsai" // ahsai tts
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/aifalse" // 服务器监控
- _ "github.com/FloatTech/ZeroBot-Plugin/plugin/aipaint" // ai绘图
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/aiwife" // 随机老婆
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/alipayvoice" // 支付宝到账语音
_ "github.com/FloatTech/ZeroBot-Plugin/plugin/autowithdraw" // 触发者撤回时也自动撤回
diff --git a/plugin/aipaint/aipaint.go b/plugin/aipaint/aipaint.go
deleted file mode 100644
index 6e370a64..00000000
--- a/plugin/aipaint/aipaint.go
+++ /dev/null
@@ -1,224 +0,0 @@
-// Package aipaint ai绘图
-package aipaint
-
-import (
- "encoding/base64"
- "encoding/json"
- "fmt"
- "net/url"
- "os"
- "regexp"
- "strconv"
- "strings"
- "time"
-
- "github.com/FloatTech/floatbox/binary"
- "github.com/FloatTech/floatbox/file"
- "github.com/FloatTech/floatbox/web"
- ctrl "github.com/FloatTech/zbpctrl"
- "github.com/FloatTech/zbputils/control"
- "github.com/FloatTech/zbputils/ctxext"
- zero "github.com/wdvxdr1123/ZeroBot"
- "github.com/wdvxdr1123/ZeroBot/message"
-)
-
-var (
- datapath string
- predictRe = regexp.MustCompile(`{"steps".+?}`)
- // 参考host http://91.217.139.190:5010 http://91.216.169.75:5010
- aipaintTxt2ImgURL = "/got_image?token=%v&tags=%v"
- aipaintImg2ImgURL = "/got_image2image?token=%v&tags=%v"
- cfg = newServerConfig("data/aipaint/config.json")
-)
-
-type result struct {
- Steps int `json:"steps"`
- Sampler string `json:"sampler"`
- Seed int `json:"seed"`
- Strength float64 `json:"strength"`
- Noise float64 `json:"noise"`
- Scale float64 `json:"scale"`
- Uc string `json:"uc"`
-}
-
-func (r *result) String() string {
- return fmt.Sprintf("steps: %v\nsampler: %v\nseed: %v\nstrength: %v\nnoise: %v\nscale: %v\nuc: %v\n", r.Steps, r.Sampler, r.Seed, r.Strength, r.Noise, r.Scale, r.Uc)
-}
-
-func init() { // 插件主体
- engine := control.AutoRegister(&ctrl.Options[*zero.Ctx]{
- DisableOnDefault: false,
- Brief: "ai绘图",
- Help: "- [ ai绘图 | 生成色图 | 生成涩图 | ai画图 ] xxx\n" +
- "- [ ai高级绘图 | 高级生成色图 | 高级生成涩图 | ai高级画图 ] [prompt]\n" +
- "- 设置ai绘图配置 [server] [token]\n" +
- "- 设置ai绘图撤回时间90s\n" +
- "- 查看ai绘图配置\n" +
- "Tips: 使用前请先前往 http://91.217.139.190:5010/token 按提示获取token" +
- "设置token示例(请确保是主人并且响应): 设置ai绘图配置 http://91.217.139.190:5010 [token] (中括号无需输入)\n" +
- "参考服务器 http://91.217.139.190:5010, http://91.216.169.75:5010, http://185.80.202.180:5010\n" +
- "[prompt]参数如下\n" +
- "tags:tag词条\nntags:ntag词条\nshape:[Portrait|Landscape|Square]\nscale:[6:20]\nseed:种子\nstrength:[0-1] 建议0-0.7\nnoise:[0-1] 建议0-0.15" +
- "参数与参数内容用:连接,每个参数之间用回车分割",
- PrivateDataFolder: "aipaint",
- })
- datapath = file.BOTPATH + "/" + engine.DataFolder()
- if file.IsNotExist(cfg.file) {
- s := serverConfig{}
- data, err := json.Marshal(s)
- if err != nil {
- panic(err)
- }
- err = os.WriteFile(cfg.file, data, 0666)
- if err != nil {
- panic(err)
- }
- }
- engine.OnPrefixGroup([]string{`ai绘图`, `生成色图`, `生成涩图`, `ai画图`}).SetBlock(true).
- Handle(func(ctx *zero.Ctx) {
- err := cfg.load()
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- ctx.SendChain(message.Text("少女祈祷中..."))
- args := ctx.State["args"].(string)
- data, err := web.GetData(cfg.BaseURL + fmt.Sprintf(aipaintTxt2ImgURL, cfg.Token, url.QueryEscape(strings.TrimSpace(strings.ReplaceAll(args, " ", "%20")))))
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- sendAiImg(ctx, data, cfg.Interval)
- })
- engine.OnPrefixGroup([]string{`ai高级绘图`, `高级生成色图`, `高级生成涩图`, `ai高级画图`}).SetBlock(true).
- Handle(func(ctx *zero.Ctx) {
- err := cfg.load()
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- tags := make(map[string]string)
- args := strings.Split(ctx.State["args"].(string), "\n")
- if len(args) < 1 {
- ctx.SendChain(message.Text("ERROR: 请输入正确的参数"))
- return
- }
- for _, info := range args {
- value := strings.Split(info, ":")
- if len(value) > 1 {
- if value[0] == "R18" && value[1] == "1" {
- value[1] = "0"
- ctx.SendChain(message.Text("不准涩涩! 已将R18设置为0. "))
- }
- tags[value[0]] = strings.Join(value[1:], ":")
- }
- }
- ctx.SendChain(message.Text("少女祈祷中..."))
- apiurl := "/got_image?token=" + cfg.Token
- if _, ok := tags["tags"]; ok {
- apiurl += "&tags=" + url.QueryEscape(strings.ReplaceAll(strings.TrimSpace(tags["tags"]), " ", "%20"))
- }
- if _, ok := tags["ntags"]; ok {
- apiurl += "&ntags=" + url.QueryEscape(strings.ReplaceAll(strings.TrimSpace(tags["ntags"]), " ", "%20"))
- }
- if _, ok := tags["R18"]; ok {
- apiurl += "&R18=" + url.QueryEscape(strings.TrimSpace(tags["R18"]))
- }
- if _, ok := tags["shape"]; ok {
- apiurl += "&shape=" + url.QueryEscape(strings.TrimSpace(tags["shape"]))
- }
- if _, ok := tags["scale"]; ok {
- apiurl += "&scale=" + url.QueryEscape(strings.TrimSpace(tags["scale"]))
- }
- if _, ok := tags["seed"]; ok {
- apiurl += "&seed=" + url.QueryEscape(strings.TrimSpace(tags["seed"]))
- }
- if _, ok := tags["strength"]; ok {
- apiurl += "&strength=" + url.QueryEscape(strings.TrimSpace(tags["strength"]))
- }
- if _, ok := tags["noise"]; ok {
- apiurl += "&noise=" + url.QueryEscape(strings.TrimSpace(tags["noise"]))
- }
- data, err := web.GetData(cfg.BaseURL + apiurl)
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- sendAiImg(ctx, data, cfg.Interval)
- })
- engine.OnRegex(`^设置ai绘图配置\s(.*[^\s$])\s(.+)$`, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).
- Handle(func(ctx *zero.Ctx) {
- regexMatched := ctx.State["regex_matched"].([]string)
- err := cfg.load()
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- err = cfg.update(regexMatched[1], regexMatched[2], cfg.Interval)
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- ctx.SendChain(message.Text("成功设置\nbase_url: ", cfg.BaseURL, "\ntoken: ", cfg.Token, "\ninterval: ", cfg.Interval))
- })
- engine.OnRegex(`^设置ai绘图撤回时间(\d{1,3})s$`, zero.SuperUserPermission).SetBlock(true).
- Handle(func(ctx *zero.Ctx) {
- regexMatched := ctx.State["regex_matched"].([]string)
- interval, err := strconv.Atoi(regexMatched[1])
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- err = cfg.load()
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- err = cfg.update(cfg.BaseURL, cfg.Token, interval)
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- ctx.SendChain(message.Text("成功设置撤回时间为", cfg.Interval, "s"))
- })
- engine.OnFullMatch(`查看ai绘图配置`, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).
- Handle(func(ctx *zero.Ctx) {
- err := cfg.load()
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- ctx.SendChain(message.Text("base_url: ", cfg.BaseURL, "\ntoken: ", cfg.Token, "\ninterval: ", cfg.Interval))
- })
-}
-
-func sendAiImg(ctx *zero.Ctx, data []byte, interval int) {
- var loadData string
- if predictRe.MatchString(binary.BytesToString(data)) {
- loadData = predictRe.FindStringSubmatch(binary.BytesToString(data))[0]
- }
- var r result
- if loadData != "" {
- err := json.Unmarshal(binary.StringToBytes(loadData), &r)
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- r.Uc, err = url.QueryUnescape(r.Uc)
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- }
- encodeStr := base64.StdEncoding.EncodeToString(data)
- m := message.Message{ctxext.FakeSenderForwardNode(ctx, message.Image("base64://"+encodeStr))}
- m = append(m, ctxext.FakeSenderForwardNode(ctx, message.Text(r.String())))
- if mid := ctx.Send(m); mid.ID() == 0 {
- ctx.SendChain(message.Text("ERROR: 可能被风控或下载图片用时过长,请耐心等待"))
- } else if interval > 0 {
- go func(i message.MessageID) {
- time.Sleep(time.Duration(interval) * time.Second)
- ctx.DeleteMessage(i)
- }(mid)
- }
-}
diff --git a/plugin/aipaint/config.go b/plugin/aipaint/config.go
deleted file mode 100644
index 12f80967..00000000
--- a/plugin/aipaint/config.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package aipaint
-
-import (
- "encoding/json"
- "errors"
- "os"
-
- "github.com/FloatTech/floatbox/file"
-)
-
-// 配置结构体
-type serverConfig struct {
- BaseURL string `json:"base_url"`
- Token string `json:"token"`
- Interval int `json:"interval"`
- file string
-}
-
-func newServerConfig(file string) *serverConfig {
- return &serverConfig{
- file: file,
- }
-}
-
-func (cfg *serverConfig) update(baseURL, token string, interval int) (err error) {
- if baseURL != "" {
- cfg.BaseURL = baseURL
- }
- if token != "" {
- cfg.Token = token
- }
- cfg.Interval = interval
- reader, err := os.Create(cfg.file)
- if err != nil {
- return err
- }
- defer reader.Close()
- return json.NewEncoder(reader).Encode(cfg)
-}
-
-func (cfg *serverConfig) load() (err error) {
- if cfg.BaseURL != "" && cfg.Token != "" && cfg.Interval != 0 {
- return
- }
- if file.IsNotExist(cfg.file) {
- err = errors.New("no server config")
- return
- }
- reader, err := os.Open(cfg.file)
- if err != nil {
- return
- }
- defer reader.Close()
- err = json.NewDecoder(reader).Decode(cfg)
- return
-}
diff --git a/plugin/aipaint/context.go b/plugin/aipaint/context.go
deleted file mode 100644
index 5e7dbc96..00000000
--- a/plugin/aipaint/context.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package aipaint
-
-import (
- "os"
- "strconv"
- "strings"
-
- "github.com/FloatTech/floatbox/file"
- "github.com/FloatTech/floatbox/process"
-)
-
-type context struct {
- usrdir string
- headimgsdir []string
-}
-
-func newContext(user int64) *context {
- c := new(context)
- c.usrdir = datapath + "users/" + strconv.FormatInt(user, 10) + `/`
- _ = os.MkdirAll(c.usrdir, 0755)
- c.headimgsdir = make([]string, 2)
- c.headimgsdir[0] = c.usrdir + "0.gif"
- c.headimgsdir[1] = c.usrdir + "1.gif"
- return c
-}
-
-func (cc *context) prepareLogos(s ...string) error {
- for i, v := range s {
- _, err := strconv.Atoi(v)
- if err != nil {
- err = file.DownloadTo("https://gchat.qpic.cn/gchatpic_new//--"+strings.ToUpper(v)+"/0", cc.usrdir+strconv.Itoa(i)+".gif")
- } else {
- err = file.DownloadTo("http://q4.qlogo.cn/g?b=qq&nk="+v+"&s=640", cc.usrdir+strconv.Itoa(i)+".gif")
- }
- if err != nil {
- return err
- }
- process.SleepAbout1sTo2s()
- }
- return nil
-}
diff --git a/plugin/aipaint/img2img.go b/plugin/aipaint/img2img.go
deleted file mode 100644
index 75c48ba7..00000000
--- a/plugin/aipaint/img2img.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// Package aipaint ai绘图
-package aipaint
-
-import (
- "bytes"
- "fmt"
- "image"
- "net/url"
- "os"
- "strconv"
- "strings"
-
- "github.com/FloatTech/floatbox/file"
- "github.com/FloatTech/floatbox/web"
- "github.com/FloatTech/imgfactory"
- ctrl "github.com/FloatTech/zbpctrl"
- "github.com/FloatTech/zbputils/control"
- zero "github.com/wdvxdr1123/ZeroBot"
- "github.com/wdvxdr1123/ZeroBot/message"
-)
-
-func init() { // 插件主体
- engine := control.Register("img2img", &ctrl.Options[*zero.Ctx]{
- DisableOnDefault: true,
- Brief: "以图绘图",
- Help: "- [ 以图绘图 | 以图生图 | 以图画图 ] xxx [图片]|@xxx|[qq号]\n" +
- "- 官方以图绘图api已失效 需要自建api 其他配置参数同ai绘图",
- PrivateDataFolder: "img2img",
- })
- datapath = file.BOTPATH + "/" + engine.DataFolder()
- engine.OnRegex(`^(以图绘图|以图生图|以图画图)[\s\S]*?(\[CQ:(image\,file=([0-9a-zA-Z]{32}).*|at.+?(\d{5,11}))\].*|(\d+))$`).SetBlock(true).
- Handle(func(ctx *zero.Ctx) {
- err := cfg.load()
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- c := newContext(ctx.Event.UserID)
- list := ctx.State["regex_matched"].([]string)
- err = c.prepareLogos(list[4]+list[5]+list[6], strconv.FormatInt(ctx.Event.UserID, 10))
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- args := strings.TrimSuffix(strings.TrimPrefix(list[0], list[1]), list[2])
- if args == "" {
- ctx.SendChain(message.Text("ERROR: 以图绘图必须添加tag"))
- return
- }
- ctx.SendChain(message.Text("少女祈祷中..."))
- postURL := cfg.BaseURL + fmt.Sprintf(aipaintImg2ImgURL, cfg.Token, url.QueryEscape(strings.TrimSpace(strings.ReplaceAll(args, " ", "%20"))))
-
- f, err := os.Open(c.headimgsdir[0])
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- defer f.Close()
-
- img, _, err := image.Decode(f)
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- imageShape := ""
- switch {
- case img.Bounds().Dx() > img.Bounds().Dy():
- imageShape = "Landscape"
- case img.Bounds().Dx() == img.Bounds().Dy():
- imageShape = "Square"
- default:
- imageShape = "Portrait"
- }
-
- // 图片转base64
- base64Bytes, err := imgfactory.ToBase64(img)
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- data, err := web.PostData(postURL+"&shape="+imageShape, "text/plain", bytes.NewReader(base64Bytes))
- if err != nil {
- ctx.SendChain(message.Text("ERROR: ", err))
- return
- }
- sendAiImg(ctx, data, cfg.Interval)
- })
-}