From 6c20f22548c9e21d0e63104569cb12faeeeca9a0 Mon Sep 17 00:00:00 2001 From: Eat Hatsune Shallots Date: Mon, 4 Mar 2024 14:33:36 +0800 Subject: [PATCH 01/13] =?UTF-8?q?baidu:=20=E5=AF=B9=E8=A6=81=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=9A=84=E5=86=85=E5=AE=B9=E8=BF=9B=E8=A1=8CURI?= =?UTF-8?q?=E7=BC=96=E7=A0=81=20(#866)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/baidu/search.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugin/baidu/search.go b/plugin/baidu/search.go index 3b44544a83..91ac83f06a 100644 --- a/plugin/baidu/search.go +++ b/plugin/baidu/search.go @@ -4,6 +4,7 @@ package baidu import ( "encoding/json" "fmt" + "net/url" "github.com/FloatTech/floatbox/web" ctrl "github.com/FloatTech/zbpctrl" @@ -37,9 +38,9 @@ func init() { // 主函数 var err error switch ctx.State["regex_matched"].([]string)[1] { case "百度", "百科": - es, err = web.GetData(fmt.Sprintf(duURL, key, ctx.State["regex_matched"].([]string)[2])) // 将网站返回结果赋值 + es, err = web.GetData(fmt.Sprintf(duURL, key, url.QueryEscape(ctx.State["regex_matched"].([]string)[2]))) // 将网站返回结果赋值 case "wiki", "维基": - es, err = web.GetData(fmt.Sprintf(wikiURL, key, ctx.State["regex_matched"].([]string)[2])) // 将网站返回结果赋值 + es, err = web.GetData(fmt.Sprintf(wikiURL, key, url.QueryEscape(ctx.State["regex_matched"].([]string)[2]))) // 将网站返回结果赋值 } if err != nil { ctx.SendChain(message.Text("出现错误捏:", err)) From ece68dae9b950f7f62a8eebc6d2ed208b444c9b4 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: Mon, 4 Mar 2024 15:38:26 +0900 Subject: [PATCH 02/13] chore(revive): make lint happy --- go.mod | 2 +- plugin/bilibili/bilibilimodel.go | 2 +- plugin/guessmusic/struct.go | 4 ++-- plugin/manager/timer/sleep.go | 2 +- plugin/steam/listenter.go | 10 +++++----- plugin/thesaurus/chat.go | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index ef5416dd63..41363a1f6d 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,6 @@ require ( github.com/fumiama/go-base16384 v1.7.0 github.com/fumiama/go-registry v0.2.6 github.com/fumiama/gotracemoe v0.0.3 - github.com/fumiama/imgsz v0.0.2 github.com/fumiama/jieba v0.0.0-20221203025406-36c17a10b565 github.com/fumiama/unibase2n v0.0.0-20221020155353-02876e777430 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 @@ -57,6 +56,7 @@ require ( github.com/faiface/beep v1.1.0 // indirect github.com/fumiama/go-simple-protobuf v0.1.0 // indirect github.com/fumiama/gofastTEA v0.0.10 // indirect + github.com/fumiama/imgsz v0.0.2 // indirect github.com/gabriel-vasile/mimetype v1.0.4 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect diff --git a/plugin/bilibili/bilibilimodel.go b/plugin/bilibili/bilibilimodel.go index 3fce1d01b1..70397b63d8 100644 --- a/plugin/bilibili/bilibilimodel.go +++ b/plugin/bilibili/bilibilimodel.go @@ -75,7 +75,7 @@ func updateVup() error { if err != nil { return err } - gjson.Get(binary.BytesToString(data), "@this").ForEach(func(key, value gjson.Result) bool { + gjson.Get(binary.BytesToString(data), "@this").ForEach(func(_, value gjson.Result) bool { mid := value.Get("mid").Int() uname := value.Get("uname").String() roomid := value.Get("roomid").Int() diff --git a/plugin/guessmusic/struct.go b/plugin/guessmusic/struct.go index cd4532ca3f..7e9d788cb4 100644 --- a/plugin/guessmusic/struct.go +++ b/plugin/guessmusic/struct.go @@ -241,9 +241,9 @@ type listInfoOfAPI struct { PublishTime int64 `json:"publishTime"` Tns []string `json:"tns,omitempty"` } `json:"tracks"` - VideoIds interface{} `json:"videoIds"` + VideoIDs interface{} `json:"videoIds"` Videos interface{} `json:"videos"` - TrackIds []struct { + TrackIDs []struct { ID int `json:"id"` V int `json:"v"` T int `json:"t"` diff --git a/plugin/manager/timer/sleep.go b/plugin/manager/timer/sleep.go index a6aae76378..e3652909ed 100644 --- a/plugin/manager/timer/sleep.go +++ b/plugin/manager/timer/sleep.go @@ -155,7 +155,7 @@ func (t *Timer) judgeHM() { if t.SelfID != 0 { t.sendmsg(t.GrpID, zero.GetBot(t.SelfID)) } else { - zero.RangeBot(func(id int64, ctx *zero.Ctx) (_ bool) { + zero.RangeBot(func(_ int64, ctx *zero.Ctx) (_ bool) { t.sendmsg(t.GrpID, ctx) return }) diff --git a/plugin/steam/listenter.go b/plugin/steam/listenter.go index 25032f983d..25c2c7c7af 100644 --- a/plugin/steam/listenter.go +++ b/plugin/steam/listenter.go @@ -57,14 +57,14 @@ func init() { return } // 收集这波用户的streamId,然后查当前的状态,并建立信息映射表 - streamIds := make([]string, len(infos)) + streamIDs := make([]string, len(infos)) localPlayerMap := make(map[int64]*player) for i := 0; i < len(infos); i++ { - streamIds[i] = strconv.FormatInt(infos[i].SteamID, 10) + streamIDs[i] = strconv.FormatInt(infos[i].SteamID, 10) localPlayerMap[infos[i].SteamID] = infos[i] } // 将所有用户状态查一遍 - playerStatus, err := getPlayerStatus(streamIds...) + playerStatus, err := getPlayerStatus(streamIDs...) if err != nil { // 出错就发消息 ctx.SendPrivateMessage(su, message.Text("[steam] ERROR: ", err)) @@ -117,11 +117,11 @@ func init() { } // getPlayerStatus 获取用户状态 -func getPlayerStatus(streamIds ...string) ([]*player, error) { +func getPlayerStatus(streamIDs ...string) ([]*player, error) { players := make([]*player, 0) // 拼接请求地址 apiKeyMu.Lock() - url := fmt.Sprintf(apiurl+statusurl, apiKey, strings.Join(streamIds, ",")) + url := fmt.Sprintf(apiurl+statusurl, apiKey, strings.Join(streamIDs, ",")) apiKeyMu.Unlock() // 拉取并解析数据 data, err := web.GetData(url) diff --git a/plugin/thesaurus/chat.go b/plugin/thesaurus/chat.go index 99d0f84916..6fc9303823 100644 --- a/plugin/thesaurus/chat.go +++ b/plugin/thesaurus/chat.go @@ -178,7 +178,7 @@ func init() { engine.OnMessage(canmatch(tKAWA), match(chatListK, seg)). SetBlock(false). Handle(randreply(sm.K)) - engine.OnMessage(canmatch(tALPACA), func(ctx *zero.Ctx) bool { + engine.OnMessage(canmatch(tALPACA), func(_ *zero.Ctx) bool { return alpacapiurl != "" && alpacatoken != "" }).SetBlock(false).Handle(func(ctx *zero.Ctx) { msg := ctx.ExtractPlainText() From ac52c9cfcae31587088f0466ad6c2b9a08ead808 Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Mon, 1 Apr 2024 20:26:12 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=F0=9F=8E=A8=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9F=A5=E5=BC=B9=E5=B9=95=E9=97=AE=E9=A2=98=20(#883)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 +- go.sum | 4 ++-- plugin/bilibili/bilibili.go | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 41363a1f6d..fb36708e80 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/Baidu-AIP/golang-sdk v1.1.1 - github.com/FloatTech/AnimeAPI v1.7.1-0.20231017135344-aefd1d56e900 + github.com/FloatTech/AnimeAPI v1.7.1-0.20240401063926-a06fe89b1362 github.com/FloatTech/floatbox v0.0.0-20231107124407-e38535efa2a2 github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 github.com/FloatTech/imgfactory v0.2.2-0.20230413152719-e101cc3606ef diff --git a/go.sum b/go.sum index 8e9eed39fd..90e80142fe 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/Baidu-AIP/golang-sdk v1.1.1 h1:RQsAmgDSAkiq22I6n7XJ2t3afgzFeqjY46FGhv github.com/Baidu-AIP/golang-sdk v1.1.1/go.mod h1:bXnGw7xPeKt8aF7UCELKrV6UZ/46spItONK1RQBQj1Y= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/FloatTech/AnimeAPI v1.7.1-0.20231017135344-aefd1d56e900 h1:UPXoj+lMHFBulp/m+F7uHju0MXslFKQqEplDDz/nOiU= -github.com/FloatTech/AnimeAPI v1.7.1-0.20231017135344-aefd1d56e900/go.mod h1:7Olb5U9q1oeayRZQTNBhXQNMf8QT4T9hccsn38IEt/U= +github.com/FloatTech/AnimeAPI v1.7.1-0.20240401063926-a06fe89b1362 h1:llHNgb+UIj8q/2GgR+89pnUNwKQJvKx5EwsetLhJQcE= +github.com/FloatTech/AnimeAPI v1.7.1-0.20240401063926-a06fe89b1362/go.mod h1:7Olb5U9q1oeayRZQTNBhXQNMf8QT4T9hccsn38IEt/U= github.com/FloatTech/floatbox v0.0.0-20231107124407-e38535efa2a2 h1:O4kptIzgYzNwZlBARZFv8EkA40yB6M5LGxxIF7NKLR8= github.com/FloatTech/floatbox v0.0.0-20231107124407-e38535efa2a2/go.mod h1:TeTlp+hTxpJti4JSdmUqzxGEr4wUBOVct9YWBepilpc= github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 h1:dPLeoiTVSBlgls+66EB/UJ2e38BaASmBN5nANaycSBU= diff --git a/plugin/bilibili/bilibili.go b/plugin/bilibili/bilibili.go index 9451dffe1e..74cf92aa93 100644 --- a/plugin/bilibili/bilibili.go +++ b/plugin/bilibili/bilibili.go @@ -337,12 +337,12 @@ func init() { faceH := float64(510) totalDanmuku := 0 - for i := 0; i < len(danmaku.Data.Data); i++ { - totalDanmuku += len(danmaku.Data.Data[i].Danmakus) + 1 + for i := 0; i < len(danmaku.Data.Data.Records); i++ { + totalDanmuku += len(danmaku.Data.Data.Records[i].Danmakus) + 1 } cw := 3000 mcw := float64(2000) - ch := 550 + len(danmaku.Data.Data)*int(faceH) + totalDanmuku*int(danmuH) + ch := 550 + len(danmaku.Data.Data.Records)*int(faceH) + totalDanmuku*int(danmuH) canvas = gg.NewContext(cw, ch) canvas.SetColor(color.White) canvas.Clear() @@ -372,8 +372,8 @@ func init() { canvas.DrawString("网页链接: "+fmt.Sprintf(bz.DanmakuURL, u.Mid), startWidth, 422.5) var channelStart float64 channelStart = float64(550) - for i := 0; i < len(danmaku.Data.Data); i++ { - item := danmaku.Data.Data[i] + for i := 0; i < len(danmaku.Data.Data.Records); i++ { + item := danmaku.Data.Data.Records[i] facePath = cachePath + strconv.Itoa(int(item.Channel.UID)) + "vupFace" + path.Ext(item.Channel.FaceURL) if path.Ext(item.Channel.FaceURL) != ".webp" { err = initFacePic(facePath, item.Channel.FaceURL) @@ -393,7 +393,7 @@ func init() { } canvas.SetRGB255(24, 144, 255) canvas.DrawString("标题: "+item.Live.Title, startWidth, channelStart+fontH) - canvas.DrawString("主播: "+item.Channel.Name, startWidth, channelStart+fontH*2) + canvas.DrawString("主播: "+item.Channel.UName, startWidth, channelStart+fontH*2) canvas.SetColor(color.Black) canvas.DrawString("开始时间: "+time.UnixMilli(item.Live.StartDate).Format("2006-01-02 15:04:05"), startWidth, channelStart+fontH*3) if item.Live.IsFinish { @@ -434,7 +434,7 @@ func init() { canvas.DrawString(t, moveW, danmuNow) moveW += l + dz - t = danItem.Name + t = danItem.UName l, _ = canvas.MeasureString(t) canvas.SetRGB255(24, 144, 255) canvas.DrawString(t, moveW, danmuNow) From dd878f7dfe4cd04021125d3cb724307894d363f2 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: Mon, 1 Apr 2024 21:31:04 +0900 Subject: [PATCH 04/13] =?UTF-8?q?=F0=9F=92=A9=F0=9F=91=8C=20make=20lint=20?= =?UTF-8?q?happy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/bilibili/bilibili.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/bilibili/bilibili.go b/plugin/bilibili/bilibili.go index 74cf92aa93..85eb646d93 100644 --- a/plugin/bilibili/bilibili.go +++ b/plugin/bilibili/bilibili.go @@ -374,7 +374,7 @@ func init() { channelStart = float64(550) for i := 0; i < len(danmaku.Data.Data.Records); i++ { item := danmaku.Data.Data.Records[i] - facePath = cachePath + strconv.Itoa(int(item.Channel.UID)) + "vupFace" + path.Ext(item.Channel.FaceURL) + facePath = cachePath + strconv.Itoa(item.Channel.UID) + "vupFace" + path.Ext(item.Channel.FaceURL) if path.Ext(item.Channel.FaceURL) != ".webp" { err = initFacePic(facePath, item.Channel.FaceURL) if err != nil { From 0a332245718c09fe9e43ed941b708597e6869fd9 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: Mon, 1 Apr 2024 21:33:31 +0900 Subject: [PATCH 05/13] =?UTF-8?q?=F0=9F=92=A9=F0=9F=91=8C=20make=20lint=20?= =?UTF-8?q?happy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/bilibili/bilibili.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/bilibili/bilibili.go b/plugin/bilibili/bilibili.go index 85eb646d93..f7f9335842 100644 --- a/plugin/bilibili/bilibili.go +++ b/plugin/bilibili/bilibili.go @@ -411,8 +411,8 @@ func init() { canvas.DrawString("直播时长: "+strconv.FormatFloat(float64(time.Now().UnixMilli()-item.Live.StartDate)/3600000.0, 'f', 1, 64)+"小时", startWidth, channelStart+fontH*5) } - canvas.DrawString("弹幕数量: "+strconv.Itoa(int(item.Live.DanmakusCount)), startWidth, channelStart+fontH*6) - canvas.DrawString("观看次数: "+strconv.Itoa(int(item.Live.WatchCount)), startWidth, channelStart+fontH*7) + canvas.DrawString("弹幕数量: "+strconv.Itoa(item.Live.DanmakusCount), startWidth, channelStart+fontH*6) + canvas.DrawString("观看次数: "+strconv.Itoa(item.Live.WatchCount), startWidth, channelStart+fontH*7) t := "收益:" l, _ := canvas.MeasureString(t) From cf0e87ab9a701c2863bf07decbb47e13de6e868a 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: Mon, 1 Apr 2024 21:35:41 +0900 Subject: [PATCH 06/13] =?UTF-8?q?=F0=9F=94=96=20v1.7.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kanban/banner/banner.go | 6 +++--- winres/winres.json | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/kanban/banner/banner.go b/kanban/banner/banner.go index 8f21540a97..2ce6cc5485 100644 --- a/kanban/banner/banner.go +++ b/kanban/banner/banner.go @@ -3,13 +3,13 @@ package banner // Version ... -var Version = "v1.7.6" +var Version = "v1.7.7" // Copyright ... -var Copyright = "© 2020 - 2023 FloatTech" +var Copyright = "© 2020 - 2024 FloatTech" // Banner ... var Banner = "* OneBot + ZeroBot + Golang\n" + - "* Version " + Version + " - 2023-11-08 14:13:37 +0900 JST\n" + + "* Version " + Version + " - 2024-04-01 21:34:55 +0900 JST\n" + "* Copyright " + Copyright + ". All Rights Reserved.\n" + "* Project: https://github.com/FloatTech/ZeroBot-Plugin" diff --git a/winres/winres.json b/winres/winres.json index 5627491279..41e9fe6431 100644 --- a/winres/winres.json +++ b/winres/winres.json @@ -12,7 +12,7 @@ "0409": { "identity": { "name": "ZeroBot-Plugin", - "version": "1.7.6.1905" + "version": "1.7.7.1918" }, "description": "", "minimum-os": "vista", @@ -36,23 +36,23 @@ "#1": { "0000": { "fixed": { - "file_version": "1.7.6.1905", - "product_version": "v1.7.6", - "timestamp": "2023-11-08T14:13:49+08:00" + "file_version": "1.7.7.1918", + "product_version": "v1.7.7", + "timestamp": "2024-04-01T21:35:17+08:00" }, "info": { "0409": { "Comments": "OneBot plugins based on ZeroBot", "CompanyName": "FloatTech", "FileDescription": "https://github.com/FloatTech/ZeroBot-Plugin", - "FileVersion": "1.7.6.1905", + "FileVersion": "1.7.7.1918", "InternalName": "", - "LegalCopyright": "© 2020 - 2023 FloatTech. All Rights Reserved.", + "LegalCopyright": "© 2020 - 2024 FloatTech. All Rights Reserved.", "LegalTrademarks": "", "OriginalFilename": "ZBP.EXE", "PrivateBuild": "", "ProductName": "ZeroBot-Plugin", - "ProductVersion": "v1.7.6", + "ProductVersion": "v1.7.7", "SpecialBuild": "" } } From d7cdfb1544aac7963bd3b7183946915ca0bf95f1 Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Fri, 5 Apr 2024 13:03:17 +0800 Subject: [PATCH 07/13] Fix bilibilipush 20240404 (#884) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ 添加cookie * ✨ 添加签名 * 🐛 修改嵌套错误 * 🐛 优化infoURL * ✨ 添加cookie --- plugin/bilibili/bilibilipush.go | 37 +++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/plugin/bilibili/bilibilipush.go b/plugin/bilibili/bilibilipush.go index f114d78ee2..8a944305fb 100644 --- a/plugin/bilibili/bilibilipush.go +++ b/plugin/bilibili/bilibilipush.go @@ -24,7 +24,7 @@ import ( const ( ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36" referer = "https://space.bilibili.com/%v" - infoURL = "https://api.bilibili.com/x/space/wbi/acc/info?mid=%v&token=&platform=web&web_location=1550101" + infoURL = "https://api.bilibili.com/x/space/wbi/acc/info?mid=%v" ) // bdb bilibili推送数据库 @@ -77,7 +77,7 @@ func init() { en.OnRegex(`^添加[B|b]站订阅\s?(.{1,25})$`, zero.UserOrGrpAdmin, getPara).SetBlock(true).Handle(func(ctx *zero.Ctx) { buid, _ := strconv.ParseInt(ctx.State["uid"].(string), 10, 64) - name, err := getName(buid) + name, err := getName(buid, cfg) if err != nil || name == "" { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -95,7 +95,7 @@ func init() { en.OnRegex(`^取消[B|b]站订阅\s?(.{1,25})$`, zero.UserOrGrpAdmin, getPara).SetBlock(true).Handle(func(ctx *zero.Ctx) { buid, _ := strconv.ParseInt(ctx.State["uid"].(string), 10, 64) - name, err := getName(buid) + name, err := getName(buid, cfg) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -112,7 +112,7 @@ func init() { }) en.OnRegex(`^取消[B|b]站动态订阅\s?(.{1,25})$`, zero.UserOrGrpAdmin, getPara).SetBlock(true).Handle(func(ctx *zero.Ctx) { buid, _ := strconv.ParseInt(ctx.State["uid"].(string), 10, 64) - name, err := getName(buid) + name, err := getName(buid, cfg) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -133,7 +133,7 @@ func init() { if gid == 0 { gid = -ctx.Event.UserID } - name, err := getName(buid) + name, err := getName(buid, cfg) if err != nil { ctx.SendChain(message.Text("ERROR: ", err)) return @@ -200,10 +200,18 @@ func changeAtAll(gid int64, b int) (err error) { } // 取得uid的名字 -func getName(buid int64) (name string, err error) { +func getName(buid int64, cookiecfg *bz.CookieConfig) (name string, err error) { var ok bool if name, ok = upMap[buid]; !ok { data, err := web.RequestDataWithHeaders(web.NewDefaultClient(), bz.SignURL(fmt.Sprintf(infoURL, buid)), "GET", func(r *http.Request) error { + if cookiecfg != nil { + cookie := "" + cookie, err = cookiecfg.Load() + if err != nil { + return err + } + r.Header.Add("Cookie", cookie) + } r.Header.Set("User-Agent", ua) return nil }, nil) @@ -262,8 +270,19 @@ func unsubscribeLive(buid, groupid int64) (err error) { return bdb.insertOrUpdateLiveAndDynamic(bpMap) } -func getUserDynamicCard(buid int64) (cardList []gjson.Result, err error) { - data, err := web.RequestDataWith(web.NewDefaultClient(), fmt.Sprintf(bz.SpaceHistoryURL, buid, 0), "GET", referer, ua, nil) +func getUserDynamicCard(buid int64, cookiecfg *bz.CookieConfig) (cardList []gjson.Result, err error) { + data, err := web.RequestDataWithHeaders(web.NewDefaultClient(), fmt.Sprintf(bz.SpaceHistoryURL, buid, 0), "GET", func(req *http.Request) error { + if cookiecfg != nil { + cookie := "" + cookie, err = cookiecfg.Load() + if err != nil { + return err + } + req.Header.Add("Cookie", cookie) + } + req.Header.Add("User-Agent", ua) + return nil + }, nil) if err != nil { return } @@ -289,7 +308,7 @@ func sendDynamic(ctx *zero.Ctx) error { uids := bdb.getAllBuidByDynamic() for _, buid := range uids { time.Sleep(2 * time.Second) - cardList, err := getUserDynamicCard(buid) + cardList, err := getUserDynamicCard(buid, cfg) if err != nil { return err } From 5c6af1af61c6e293d00784505b5233b2dc1a3648 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: Thu, 11 Apr 2024 16:35:39 +0900 Subject: [PATCH 08/13] chore(plugin): remove scale due to deletion --- README.md | 8 --- go.mod | 4 +- go.sum | 8 +-- main.go | 1 - plugin/scale/main.go | 152 ------------------------------------------- 5 files changed, 6 insertions(+), 167 deletions(-) delete mode 100644 plugin/scale/main.go diff --git a/README.md b/README.md index b6a5390ab6..68efcbd6c4 100644 --- a/README.md +++ b/README.md @@ -1250,14 +1250,6 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 设置 saucenao api key [apikey] - -
- 叔叔的AI二次元图片放大 - - `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/scale"` - - - [x] 放大图片[图片] -
签到得分 diff --git a/go.mod b/go.mod index fb36708e80..233622e859 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.20 require ( github.com/Baidu-AIP/golang-sdk v1.1.1 - github.com/FloatTech/AnimeAPI v1.7.1-0.20240401063926-a06fe89b1362 - github.com/FloatTech/floatbox v0.0.0-20231107124407-e38535efa2a2 + github.com/FloatTech/AnimeAPI v1.7.1-0.20240411073357-0be3d9a5706d + github.com/FloatTech/floatbox v0.0.0-20240304064110-78a83f1af9a6 github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 github.com/FloatTech/imgfactory v0.2.2-0.20230413152719-e101cc3606ef github.com/FloatTech/rendercard v0.0.10-0.20230223064326-45d29fa4ede9 diff --git a/go.sum b/go.sum index 90e80142fe..1351145460 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,10 @@ github.com/Baidu-AIP/golang-sdk v1.1.1 h1:RQsAmgDSAkiq22I6n7XJ2t3afgzFeqjY46FGhv github.com/Baidu-AIP/golang-sdk v1.1.1/go.mod h1:bXnGw7xPeKt8aF7UCELKrV6UZ/46spItONK1RQBQj1Y= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/FloatTech/AnimeAPI v1.7.1-0.20240401063926-a06fe89b1362 h1:llHNgb+UIj8q/2GgR+89pnUNwKQJvKx5EwsetLhJQcE= -github.com/FloatTech/AnimeAPI v1.7.1-0.20240401063926-a06fe89b1362/go.mod h1:7Olb5U9q1oeayRZQTNBhXQNMf8QT4T9hccsn38IEt/U= -github.com/FloatTech/floatbox v0.0.0-20231107124407-e38535efa2a2 h1:O4kptIzgYzNwZlBARZFv8EkA40yB6M5LGxxIF7NKLR8= -github.com/FloatTech/floatbox v0.0.0-20231107124407-e38535efa2a2/go.mod h1:TeTlp+hTxpJti4JSdmUqzxGEr4wUBOVct9YWBepilpc= +github.com/FloatTech/AnimeAPI v1.7.1-0.20240411073357-0be3d9a5706d h1:eKJxkCzayyHPvQ7+uhF6acGBTnoq5c9K7J6sHbv6xwQ= +github.com/FloatTech/AnimeAPI v1.7.1-0.20240411073357-0be3d9a5706d/go.mod h1:bNHsYcUd1+Y5Al3CR6tdzKxcc0XLivXjmUsL9xG6sSw= +github.com/FloatTech/floatbox v0.0.0-20240304064110-78a83f1af9a6 h1:Vaj8ulVbN8vTD4W7aj+BYeT6x8iKFneDnkgBCezomDY= +github.com/FloatTech/floatbox v0.0.0-20240304064110-78a83f1af9a6/go.mod h1:TeTlp+hTxpJti4JSdmUqzxGEr4wUBOVct9YWBepilpc= github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 h1:dPLeoiTVSBlgls+66EB/UJ2e38BaASmBN5nANaycSBU= github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08/go.mod h1:uzPzAeT35egARdRuu+1oyjU3CmTwCceoq3Vvje7LpcI= github.com/FloatTech/imgfactory v0.2.2-0.20230413152719-e101cc3606ef h1:CJbK/2FRwPuZpeb6M4sWK2d7oXDnBEGhpkQuQrgc91A= diff --git a/main.go b/main.go index 29afe0da7c..d267d696e2 100644 --- a/main.go +++ b/main.go @@ -129,7 +129,6 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/reborn" // 投胎 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/runcode" // 在线运行代码 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/saucenao" // 以图搜图 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin/scale" // 叔叔的AI二次元图片放大 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/score" // 分数 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/setutime" // 来份涩图 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/shadiao" // 沙雕app diff --git a/plugin/scale/main.go b/plugin/scale/main.go deleted file mode 100644 index 12fa6fe854..0000000000 --- a/plugin/scale/main.go +++ /dev/null @@ -1,152 +0,0 @@ -// Package scale 叔叔的AI二次元图片放大 -package scale - -import ( - "bytes" - "image" - "math" - "os" - "strconv" - "time" - - _ "image/gif" // import gif decoding - _ "image/jpeg" // import jpg decoding - _ "image/png" // import png decoding - - _ "golang.org/x/image/webp" // import webp decoding - - zero "github.com/wdvxdr1123/ZeroBot" - "github.com/wdvxdr1123/ZeroBot/message" - - "github.com/FloatTech/AnimeAPI/nsfw" - "github.com/FloatTech/AnimeAPI/scale" - "github.com/FloatTech/imgfactory" - - "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" -) - -func init() { - engine := control.AutoRegister(&ctrl.Options[*zero.Ctx]{ - DisableOnDefault: false, - Brief: "二次元图片放大", - Help: "- 放大图片[图片]", - PrivateDataFolder: "scale", - }).ApplySingle(ctxext.DefaultSingle) - cachedir := engine.DataFolder() - // 上传一张图进行评价 - engine.OnKeywordGroup([]string{"放大图片"}, zero.OnlyGroup, zero.MustProvidePicture, getPara).SetBlock(true). - Handle(func(ctx *zero.Ctx) { - url := ctx.State["image_url"].([]string) - if len(url) > 0 { - datachan := make(chan []byte, 1) - var errsub error - go func() { - var d []byte - d, errsub = web.GetData(url[0]) - datachan <- d - }() - ctx.SendChain(message.Text("少女祈祷中...")) - - p, err := nsfw.Classify(url[0]) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - if p.Drawings < 0.1 || p.Neutral > 0.8 { - ctx.SendChain(message.Text("请发送二次元图片!")) - return - } - - data := <-datachan - if errsub != nil { - ctx.SendChain(message.Text("ERROR: ", errsub)) - return - } - im, _, err := image.Decode(bytes.NewReader(data)) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - px := im.Bounds().Size().X * im.Bounds().Size().Y - paras := ctx.State["scale_paras"].([2]int) - - if px > 512*512 { - px = int(math.Pow(float64(px), 0.5) + 0.5) - x := im.Bounds().Size().X * 512 / px - y := im.Bounds().Size().Y * 512 / px - ctx.SendChain(message.Text("图片", im.Bounds().Size().X, "x", im.Bounds().Size().Y, "过大,调整图片至", x, "x", y)) - im = imgfactory.Size(im, x, y).Image() - w := binary.SelectWriter() - defer binary.PutWriter(w) - _, err = imgfactory.WriteTo(im, w) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - data, err = scale.Post(bytes.NewReader(w.Bytes()), paras[0], paras[1], 2) - } else { - data, err = scale.Get(url[0], paras[0], paras[1], 2) - } - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - - n := cachedir + strconv.Itoa(int(ctx.Event.UserID)) - f, err := os.Create(n) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - _, _ = f.Write(data) - _ = f.Close() - ctx.SendChain(message.Image("file:///" + file.BOTPATH + "/" + n)) - } - }) -} - -func getPara(ctx *zero.Ctx) bool { - next := zero.NewFutureEvent("message", 999, false, ctx.CheckSession()) - recv, cancel := next.Repeat() - i := 0 - paras := [2]int{} - ctx.SendChain(message.Text("请输入模型序号\n0.", scale.Models[0], "\n1.", scale.Models[1], "\n2.", scale.Models[2], "\n3.", scale.Models[3], "\n4.", scale.Models[4])) - for { - select { - case <-time.After(time.Second * 120): - cancel() - return false - case c := <-recv: - msg := c.Event.Message.ExtractPlainText() - num, err := strconv.Atoi(msg) - if err != nil { - ctx.SendChain(message.Text("请输入数字!")) - continue - } - switch i { - case 0: - if num < 0 || num > 4 { - ctx.SendChain(message.Text("模型序号非法!")) - continue - } - paras[0] = num - ctx.SendChain(message.Text("请输入放大倍数(2-4)")) - case 1: - if num < 2 || num > 4 { - ctx.SendChain(message.Text("放大倍数非法!")) - continue - } - cancel() - paras[1] = num - ctx.State["scale_paras"] = paras - return true - } - i++ - } - } -} From dfe6d347a59432b1764469465b9eea9b34987668 Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Sat, 13 Apr 2024 16:51:13 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E2=9C=A8=20=E6=B7=BB=E5=8A=A0=E4=B8=A4?= =?UTF-8?q?=E4=B8=AAapi=E6=8E=A5=E5=8F=A3=20(#886)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ 添加两个api接口 * ✨ 让代码简洁 * ✨ 一起处理 * ✨ 修改成map * 🎨 删掉空 --- README.md | 72 ++++++++++++++++--- go.mod | 2 +- go.sum | 4 +- main.go | 2 + plugin/lolimi/lolimi.go | 132 ++++++++++++++++++++++++++++++++++ plugin/manager/manager.go | 19 +++++ plugin/yujn/yujn.go | 144 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 364 insertions(+), 11 deletions(-) create mode 100644 plugin/lolimi/lolimi.go create mode 100644 plugin/yujn/yujn.go diff --git a/README.md b/README.md index 68efcbd6c4..f2fa6c0bab 100644 --- a/README.md +++ b/README.md @@ -242,6 +242,8 @@ zerobot [-h] [-m] [-n nickname] [-t token] [-u url] [-g url] [-p prefix] [-d|w] - [x] 列出所有提醒 - [x] 翻牌 + + - [x] 赞我 - [x] [开启 | 关闭]入群验证 @@ -959,6 +961,24 @@ print("run[CQ:image,file="+j["img"]+"]") 来份萝莉 ``` +
+
+ 桑帛云 API + + `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolimi"` + + - [x] 随机妹子 + + - [x] 随机绕口令 + + - [x] 颜值鉴定[图片] + + - [x] 随机情话 + + - [x] 发病 嘉然 + + - [x] 让[塔菲|嘉然|东雪莲]说我测尼玛 +
MagicPrompt-Stable-Diffusion吟唱提示 @@ -1509,6 +1529,18 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 团队七阶猜单词 +
+
+ 鬼东西 + + `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wtf"` + + - [x] 鬼东西列表 + + - [x] 查询鬼东西[序号][@xxx] + + - 注:由于需要科学,默认注释。 +
一些游戏王插件 @@ -1550,15 +1582,39 @@ print("run[CQ:image,file="+j["img"]+"]")
- 鬼东西 + 遇见API - `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wtf"` - - - [x] 鬼东西列表 - - - [x] 查询鬼东西[序号][@xxx] - - - 注:由于需要科学,默认注释。 + `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/yujn"` + + - [x] 小姐姐视频 + - [x] 小姐姐视频2 + - [x] 黑丝视频 + - [x] 白丝视频 + - [x] 欲梦视频 + - [x] 甜妹视频 + - [x] 双倍快乐 + - [x] 纯情女高 + - [x] 萝莉视频 + - [x] 玉足视频 + - [x] 帅哥视频 + - [x] 热舞视频 + - [x] 吊带视频 + - [x] 汉服视频 + - [x] 极品狱卒 + - [x] 清纯视频 + - [x] 快手变装 + - [x] 抖音变装 + - [x] 萌娃视频 + - [x] 穿搭视频 + - [x] 完美身材 + - [x] 御姐撒娇 + - [x] 绿茶语音 + - [x] 怼人语音 + - [x] 随机骚话 + - [x] 随机污句子 + - [x] 随机美句 + - [x] 土味情话 + - [x] 让[丁真|陈泽|梅西|孙笑川|科比|懒羊羊|胡桃|雫るる]说我测尼玛
diff --git a/go.mod b/go.mod index 233622e859..bca063579b 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/tidwall/gjson v1.14.4 github.com/wcharczuk/go-chart/v2 v2.1.0 - github.com/wdvxdr1123/ZeroBot v1.7.5-0.20231009162356-57f71b9f5258 + github.com/wdvxdr1123/ZeroBot v1.7.5-0.20240410141841-6970df23ca54 gitlab.com/gomidi/midi/v2 v2.0.25 golang.org/x/image v0.3.0 golang.org/x/sys v0.8.0 diff --git a/go.sum b/go.sum index 1351145460..b551b3d3f8 100644 --- a/go.sum +++ b/go.sum @@ -216,8 +216,8 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/wcharczuk/go-chart/v2 v2.1.0 h1:tY2slqVQ6bN+yHSnDYwZebLQFkphK4WNrVwnt7CJZ2I= github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= -github.com/wdvxdr1123/ZeroBot v1.7.5-0.20231009162356-57f71b9f5258 h1:Q0dKoj9SHrR8WjjlcX+eyYBjQKqBn/x1pdJJO1IIOxQ= -github.com/wdvxdr1123/ZeroBot v1.7.5-0.20231009162356-57f71b9f5258/go.mod h1:y29UIOy0RD3P+0meDNIWRhcJF3jtWPN9xP9hgt/AJAU= +github.com/wdvxdr1123/ZeroBot v1.7.5-0.20240410141841-6970df23ca54 h1:s7k0Pf4RoeCUHe9rlVsg0mqAH3WO7xLMhe9qih/CxnE= +github.com/wdvxdr1123/ZeroBot v1.7.5-0.20240410141841-6970df23ca54/go.mod h1:y29UIOy0RD3P+0meDNIWRhcJF3jtWPN9xP9hgt/AJAU= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= diff --git a/main.go b/main.go index d267d696e2..715a8d825e 100644 --- a/main.go +++ b/main.go @@ -108,6 +108,7 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/juejuezi" // 绝绝子生成器 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/kfccrazythursday" // 疯狂星期四 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolicon" // lolicon 随机图片 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin/lolimi" // 桑帛云 API _ "github.com/FloatTech/ZeroBot-Plugin/plugin/magicprompt" // magicprompt吟唱提示 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/mcfish" // 钓鱼模拟器 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/midicreate" // 简易midi音乐制作 @@ -152,6 +153,7 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wordle" // 猜单词 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ygo" // 游戏王相关插件 _ "github.com/FloatTech/ZeroBot-Plugin/plugin/ymgal" // 月幕galgame + _ "github.com/FloatTech/ZeroBot-Plugin/plugin/yujn" // 遇见API // _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wtf" // 鬼东西 diff --git a/plugin/lolimi/lolimi.go b/plugin/lolimi/lolimi.go new file mode 100644 index 0000000000..7506b93369 --- /dev/null +++ b/plugin/lolimi/lolimi.go @@ -0,0 +1,132 @@ +// Package lolimi 来源于 https://api.lolimi.cn/ 的接口 +package lolimi + +import ( + "fmt" + "net/url" + "strconv" + "strings" + + "github.com/FloatTech/floatbox/binary" + "github.com/FloatTech/floatbox/web" + ctrl "github.com/FloatTech/zbpctrl" + "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" + "github.com/tidwall/gjson" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +const ( + lolimiURL = "https://api.lolimi.cn" + jiaranURL = lolimiURL + "/API/yyhc/jr.php?msg=%v&type=2" + tafeiURL = lolimiURL + "/API/yyhc/taf.php?msg=%v&type=2" + dxlURL = lolimiURL + "/API/yyhc/dxl.php?msg=%v&type=2" + raoURL = lolimiURL + "/API/rao/api.php" + yanURL = lolimiURL + "/API/yan/?url=%v" + xjjURL = lolimiURL + "/API/tup/xjj.php" + qingURL = lolimiURL + "/API/qing/api.php" + fabingURL = lolimiURL + "/API/fabing/fb.php?name=%v" +) + +var ( + engine = control.AutoRegister(&ctrl.Options[*zero.Ctx]{ + DisableOnDefault: false, + Brief: "桑帛云 API", + Help: "- 让[塔菲|嘉然|东雪莲]说我测尼玛\n- 随机绕口令\n- 颜值鉴定[图片]\n" + + "- 随机妹子\n- 随机情话\n- 发病 嘉然\n\n说明: 颜值鉴定只能鉴定三次元图片", + }) +) + +func init() { + engine.OnFullMatch("随机妹子").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + ctx.SendChain(message.Image(xjjURL)) + }) + engine.OnFullMatch("随机绕口令").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + data, err := web.GetData(raoURL) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(gjson.Get(binary.BytesToString(data), "data.Msg").String())) + }) + engine.OnFullMatch("随机情话").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + data, err := web.GetData(qingURL) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(binary.BytesToString(data))) + }) + engine.OnPrefix(`发病`).SetBlock(true).Handle(func(ctx *zero.Ctx) { + name := ctx.NickName() + data, err := web.GetData(fmt.Sprintf(fabingURL, url.QueryEscape(name))) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(gjson.Get(binary.BytesToString(data), "data").String())) + }) + engine.OnKeywordGroup([]string{"颜值鉴定"}, zero.MustProvidePicture).SetBlock(true). + Handle(func(ctx *zero.Ctx) { + list := ctx.State["image_url"].([]string) + if len(list) > 0 { + ctx.SendChain(message.Text("少女祈祷中...")) + data, err := web.GetData(fmt.Sprintf(yanURL, url.QueryEscape(list[0]))) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + assessment := gjson.Get(binary.BytesToString(data), "data.text").String() + if assessment == "" { + ctx.SendChain(message.Text("ERROR: 请输入正确的图片")) + return + } + var text strings.Builder // 创建一个strings.Builder实例 + text.WriteString("评价: ") + text.WriteString(assessment) // 添加评估信息 + + for i := 0; i <= 2; i++ { + key := gjson.Get(binary.BytesToString(data), "data.grade.key"+strconv.Itoa(i)).String() + score := gjson.Get(binary.BytesToString(data), "data.grade.score"+strconv.Itoa(i)).String() + if key != "" { + text.WriteString("\n") + text.WriteString(key) + text.WriteString(": ") + text.WriteString(score) + } + } + + ctx.SendChain(message.Text(text.String())) // 发送构建好的字符串 + } + }) + engine.OnRegex("^让(塔菲|嘉然|东雪莲)说([\\s\u4e00-\u9fa5\u3040-\u309F\u30A0-\u30FF\\w\\p{P}\u3000-\u303F\uFF00-\uFFEF]+)$").Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) { + name := ctx.State["regex_matched"].([]string)[1] + msg := ctx.State["regex_matched"].([]string)[2] + recordURL := "" + switch name { + case "塔菲", "东雪莲": + ttsURL := "" + if name == "塔菲" { + ttsURL = tafeiURL + } else { + ttsURL = dxlURL + } + data, err := web.GetData(fmt.Sprintf(ttsURL, url.QueryEscape(msg))) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + recordURL = gjson.Get(binary.BytesToString(data), "music").String() + case "嘉然": + recordURL = fmt.Sprintf(jiaranURL, url.QueryEscape(msg)) + default: + recordURL = fmt.Sprintf(jiaranURL, url.QueryEscape(msg)) + } + if recordURL == "" { + ctx.SendChain(message.Text("ERROR: 语音生成失败")) + return + } + ctx.SendChain(message.Record(recordURL)) + }) +} diff --git a/plugin/manager/manager.go b/plugin/manager/manager.go index d4dcec52a5..6b81376389 100644 --- a/plugin/manager/manager.go +++ b/plugin/manager/manager.go @@ -47,6 +47,7 @@ const ( "- 取消在\"cron\"的提醒\n" + "- 列出所有提醒\n" + "- 翻牌\n" + + "- 赞我\n" + "- 设置欢迎语XXX 可选添加 [{at}] [{nickname}] [{avatar}] [{uid}] [{gid}] [{groupname}]\n" + "- 测试欢迎语\n" + "- 设置告别辞 参数同设置欢迎语\n" + @@ -384,6 +385,24 @@ func init() { // 插件主体 ), ) }) + // 给好友点赞 + engine.OnFullMatch("赞我").SetBlock(true).Limit(ctxext.LimitByUser). + Handle(func(ctx *zero.Ctx) { + list := ctx.GetFriendList().Array() + flag := false + for _, v := range list { + if ctx.Event.UserID == v.Get("user_id").Int() { + flag = true + break + } + } + if !flag { + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("不加好友不给赞!")) + return + } + ctx.SendLike(ctx.Event.UserID, 10) + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("给你赞了10下哦,记得回我~")) + }) // 入群欢迎 engine.OnNotice().SetBlock(false). Handle(func(ctx *zero.Ctx) { diff --git a/plugin/yujn/yujn.go b/plugin/yujn/yujn.go new file mode 100644 index 0000000000..ac9e2ac579 --- /dev/null +++ b/plugin/yujn/yujn.go @@ -0,0 +1,144 @@ +// Package yujn 来源于 https://api.yujn.cn/ 的接口 +package yujn + +import ( + "fmt" + "net/url" + "strings" + + "github.com/FloatTech/floatbox/binary" + "github.com/FloatTech/floatbox/web" + ctrl "github.com/FloatTech/zbpctrl" + "github.com/FloatTech/zbputils/control" + "github.com/FloatTech/zbputils/ctxext" + "github.com/tidwall/gjson" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" +) + +const ( + yujnURL = "https://api.yujn.cn" + zzxjjURL = yujnURL + "/api/zzxjj.php?type=video" + baisisURL = yujnURL + "/api/baisis.php?type=video" + heisisURL = yujnURL + "/api/heisis.php?type=video" + xjjURL = yujnURL + "/api/xjj.php?type=video" + tianmeiURL = yujnURL + "/api/tianmei.php?type=video" + ndymURL = yujnURL + "/api/ndym.php?type=video" + sbklURL = yujnURL + "/api/sbkl.php?type=video" + nvgaoURL = yujnURL + "/api/nvgao.php?type=video" + luoliURL = yujnURL + "/api/luoli.php?type=video" + yuzuURL = yujnURL + "/api/yuzu.php?type=video" + xggURL = yujnURL + "/api/xgg.php?type=video" + rewuURL = yujnURL + "/api/rewu.php?type=video" + diaodaiURL = yujnURL + "/api/diaodai.php?type=video" + hanfuURL = yujnURL + "/api/hanfu.php?type=video" + jpyzURL = yujnURL + "/api/jpmt.php?type=video" + qingchunURL = yujnURL + "/api/qingchun.php?type=video" + ksbianzhuang = yujnURL + "/api/ksbianzhuang.php?type=video" + dybianzhuang = yujnURL + "/api/bianzhuang.php?type=video" + mengwaURL = yujnURL + "/api/mengwa.php?type=video" + chuandaURL = yujnURL + "/api/chuanda.php?type=video" + wmscURL = yujnURL + "/api/wmsc.php?type=video" + yujieURL = yujnURL + "/api/yujie.php" + luchaURL = yujnURL + "/api/lvcha.php" + duirenURL = yujnURL + "/api/duiren.php" + saohuaURL = yujnURL + "/api/saohua.php" + qinghuaURL = yujnURL + "/api/qinghua.php" + wuURL = yujnURL + "/api/text_wu.php" + wenanURL = yujnURL + "/api/wenan.php" + yuyinURL = yujnURL + "/api/yuyin.php?type=json&from=%v&msg=%v" +) + +var ( + engine = control.AutoRegister(&ctrl.Options[*zero.Ctx]{ + DisableOnDefault: false, + Brief: "遇见API", + Help: "- 小姐姐视频\n- 小姐姐视频2\n- 黑丝视频\n- 白丝视频\n" + + "- 欲梦视频\n- 甜妹视频\n- 双倍快乐\n- 纯情女高\n" + + "- 萝莉视频\n- 玉足视频\n- 帅哥视频\n- 热舞视频\n" + + "- 吊带视频\n- 汉服视频\n- 极品狱卒\n- 清纯视频\n" + + "- 快手变装\n- 抖音变装\n- 萌娃视频\n- 穿搭视频\n" + + "- 完美身材\n- 御姐撒娇\n- 绿茶语音\n- 怼人语音\n" + + "- 随机骚话\n- 随机污句子\n- 随机美句\n- 土味情话\n- 让[丁真|陈泽|梅西|孙笑川|科比|懒羊羊|胡桃|雫るる]说我测尼玛", + }) + urlMap = map[string]string{ + "小姐姐视频": zzxjjURL, + "小姐姐视频2": xjjURL, + "黑丝视频": heisisURL, + "白丝视频": baisisURL, + "欲梦视频": ndymURL, + "甜妹视频": tianmeiURL, + "双倍快乐": sbklURL, + "纯情女高": nvgaoURL, + "萝莉视频": luoliURL, + "玉足视频": yuzuURL, + "帅哥视频": xggURL, + "热舞视频": rewuURL, + "吊带视频": diaodaiURL, + "汉服视频": hanfuURL, + "极品狱卒": jpyzURL, + "清纯视频": qingchunURL, + "快手变装": ksbianzhuang, + "抖音变装": dybianzhuang, + "萌娃视频": mengwaURL, + "穿搭视频": chuandaURL, + "完美身材": wmscURL, + "御姐撒娇": yujieURL, + "绿茶语音": luchaURL, + "怼人语音": duirenURL, + "随机骚话": saohuaURL, + "土味情话": qinghuaURL, + "随机污句子": wuURL, + } +) + +func init() { + // 这里是您的处理逻辑的switch case重构版本 + engine.OnFullMatchGroup([]string{"小姐姐视频", "小姐姐视频2", "黑丝视频", "白丝视频", "欲梦视频", "甜妹视频", "双倍快乐", "纯情女高", "萝莉视频", "玉足视频", "帅哥视频", "热舞视频", "吊带视频", "汉服视频", "极品狱卒", "清纯视频", "快手变装", "抖音变装", "萌娃视频", "穿搭视频", "完美身材"}).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + videoType := ctx.State["matched"].(string) // 假设这是获取消息文本的方式 + videoURL := urlMap[videoType] + ctx.SendChain(message.Video(videoURL)) + }) + engine.OnFullMatchGroup([]string{"御姐撒娇", "绿茶语音", "怼人语音"}).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + recordType := ctx.State["matched"].(string) // 假设这是获取消息文本的方式 + recordURL := urlMap[recordType] + ctx.SendChain(message.Record(recordURL)) + + }) + engine.OnFullMatchGroup([]string{"随机骚话", "土味情话", "随机污句子"}).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + textType := ctx.State["matched"].(string) // 假设这是获取消息文本的方式 + textURL := urlMap[textType] + data, err := web.GetData(textURL) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(binary.BytesToString(data))) + }) + engine.OnFullMatch("随机美句").SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { + data, err := web.GetData(wenanURL) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + text := binary.BytesToString(data) + text = strings.ReplaceAll(text, "

", "") + text = strings.ReplaceAll(text, "

", "") + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text)) + }) + engine.OnRegex("^让(丁真|陈泽|梅西|孙笑川|科比|懒羊羊|胡桃|雫るる)说([\\s\u4e00-\u9fa5\u3040-\u309F\u30A0-\u30FF\\w\\p{P}\u3000-\u303F\uFF00-\uFFEF]+)$").Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) { + name := ctx.State["regex_matched"].([]string)[1] + msg := ctx.State["regex_matched"].([]string)[2] + data, err := web.GetData(fmt.Sprintf(yuyinURL, url.QueryEscape(name), url.QueryEscape(msg))) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) + return + } + recordURL := gjson.Get(binary.BytesToString(data), "url").String() + if recordURL == "" { + ctx.SendChain(message.Text("ERROR: 语音生成失败")) + return + } + ctx.SendChain(message.Record(recordURL)) + }) +} From cab917d054700ea252ba5df3c2f268ead6df410b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 17:52:33 +0900 Subject: [PATCH 10/13] =?UTF-8?q?chore(lint):=20=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=B7=E5=BC=8F=20(#888)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- plugin/yujn/yujn.go | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin/yujn/yujn.go b/plugin/yujn/yujn.go index ac9e2ac579..f36718e91a 100644 --- a/plugin/yujn/yujn.go +++ b/plugin/yujn/yujn.go @@ -103,7 +103,6 @@ func init() { recordType := ctx.State["matched"].(string) // 假设这是获取消息文本的方式 recordURL := urlMap[recordType] ctx.SendChain(message.Record(recordURL)) - }) engine.OnFullMatchGroup([]string{"随机骚话", "土味情话", "随机污句子"}).SetBlock(true).Limit(ctxext.LimitByUser).Handle(func(ctx *zero.Ctx) { textType := ctx.State["matched"].(string) // 假设这是获取消息文本的方式 From 2ff164c2dfebb0eec24474940745037815074aa6 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: Sun, 14 Apr 2024 15:28:03 +0900 Subject: [PATCH 11/13] chore(plugin): remove moegoe due to deletion --- README.md | 4 ---- plugin/moegoe/main.go | 26 +------------------------- 2 files changed, 1 insertion(+), 29 deletions(-) diff --git a/README.md b/README.md index f2fa6c0bab..58b80394c2 100644 --- a/README.md +++ b/README.md @@ -1032,10 +1032,6 @@ print("run[CQ:image,file="+j["img"]+"]") `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/moegoe"` - - [x] 让[宁宁|爱瑠|芳乃|茉子|丛雨|小春|七海]说(日语) - - - [x] 让[수아|미미르|아린|연화|유화|선배]说(韩语) - - [x] 让[派蒙|空|荧|阿贝多|枫原万叶|温迪|八重神子|纳西妲|钟离|诺艾尔|凝光|托马|北斗|莫娜|荒泷一斗|提纳里|芭芭拉|艾尔海森|雷电将军|赛诺|琴|班尼特|五郎|神里绫华|迪希雅|夜兰|辛焱|安柏|宵宫|云堇|妮露|烟绯|鹿野院平藏|凯亚|达达利亚|迪卢克|可莉|早柚|香菱|重云|刻晴|久岐忍|珊瑚宫心海|迪奥娜|戴因斯雷布|魈|神里绫人|丽莎|优菈|凯瑟琳|雷泽|菲谢尔|九条裟罗|甘雨|行秋|胡桃|迪娜泽黛|柯莱|申鹤|砂糖|萍姥姥|奥兹|罗莎莉亚|式大将|哲平|坎蒂丝|托克|留云借风真君|昆钧|塞琉斯|多莉|大肉丸|莱依拉|散兵|拉赫曼|杜拉夫|阿守|玛乔丽|纳比尔|海芭夏|九条镰治|阿娜耶|阿晃|阿扎尔|七七|博士|白术|埃洛伊|大慈树王|女士|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|芽衣|雷之律者|阿波尼亚]说(中文) diff --git a/plugin/moegoe/main.go b/plugin/moegoe/main.go index 5b43f17771..fa8038edc1 100644 --- a/plugin/moegoe/main.go +++ b/plugin/moegoe/main.go @@ -18,38 +18,14 @@ import ( "github.com/FloatTech/zbputils/ctxext" ) -const ( - jpapi = "https://moegoe.azurewebsites.net/api/speak?text=%s&id=%d" - krapi = "https://moegoe.azurewebsites.net/api/speakkr?text=%s&id=%d" -) - -var speakers = map[string]uint{ - "宁宁": 0, "爱瑠": 1, "芳乃": 2, "茉子": 3, "丛雨": 4, "小春": 5, "七海": 6, - "Sua": 0, "Mimiru": 1, "Arin": 2, "Yeonhwa": 3, "Yuhwa": 4, "Seonbae": 5, -} - var 原 = newapikeystore("./data/tts/o.txt") func init() { en := control.AutoRegister(&ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "日韩中 VITS 模型拟声", - Help: "- 让[宁宁|爱瑠|芳乃|茉子|丛雨|小春|七海]说(日语)\n" + - "- 让[Sua|Mimiru|Arin|Yeonhwa|Yuhwa|Seonbae]说(韩语)\n" + - "- 让[空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然|标贝]说(中文)", + Help: "- 让[空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然|标贝]说(中文)", }).ApplySingle(ctxext.DefaultSingle) - en.OnRegex("^让(宁宁|爱瑠|芳乃|茉子|丛雨|小春|七海)说([A-Za-z\\s\\d\u3005\u3040-\u30ff\u4e00-\u9fff\uff11-\uff19\uff21-\uff3a\uff41-\uff5a\uff66-\uff9d\\pP]+)$").Limit(ctxext.LimitByGroup).SetBlock(true). - Handle(func(ctx *zero.Ctx) { - text := ctx.State["regex_matched"].([]string)[2] - id := speakers[ctx.State["regex_matched"].([]string)[1]] - ctx.SendChain(message.Record(fmt.Sprintf(jpapi, url.QueryEscape(text), id))) - }) - en.OnRegex("^让(Sua|Mimiru|Arin|Yeonhwa|Yuhwa|Seonbae)说([A-Za-z\\s\\d\u3131-\u3163\uac00-\ud7ff\\pP]+)$").Limit(ctxext.LimitByGroup).SetBlock(true). - Handle(func(ctx *zero.Ctx) { - text := ctx.State["regex_matched"].([]string)[2] - id := speakers[ctx.State["regex_matched"].([]string)[1]] - ctx.SendChain(message.Record(fmt.Sprintf(krapi, url.QueryEscape(text), id))) - }) en.OnRegex("^让(空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然|标贝)说([\\s\u4e00-\u9fa5\\pP]+)$").Limit(ctxext.LimitByGroup).SetBlock(true). Handle(func(ctx *zero.Ctx) { if 原.k == "" { From b050b5d5b5c9f8876182d1fceb477c40ece46f38 Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Tue, 23 Apr 2024 15:11:30 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8Dtts?= =?UTF-8?q?=E8=AF=AD=E9=9F=B3=E5=88=87=E6=8D=A2=E9=97=AE=E9=A2=98=20(#890)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🐛 修复tts语音切换问题 * 🎨 文案不变化 * 🎨 语音放到上层方法 * ✨ 添加新回复模式 * ✨ 优化回复内容 * 🐛 调整顺序 --- README.md | 6 +-- go.mod | 2 +- go.sum | 4 +- plugin/ai_reply/ai_tts.go | 81 ++++++++++++++++++++++++--------------- plugin/ai_reply/main.go | 63 ++++++++++++++++++------------ plugin/lolimi/lolimi.go | 34 ++++------------ plugin/yujn/yujn.go | 2 +- 7 files changed, 103 insertions(+), 89 deletions(-) diff --git a/README.md b/README.md index 58b80394c2..9ee01c872d 100644 --- a/README.md +++ b/README.md @@ -977,7 +977,7 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 发病 嘉然 - - [x] 让[塔菲|嘉然|东雪莲]说我测尼玛 + - [x] 让[嘉然|塔菲|东雪莲|懒羊羊|科比|孙笑川|陈泽|丁真|空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然]说我测尼玛
@@ -1610,7 +1610,7 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] 随机污句子 - [x] 随机美句 - [x] 土味情话 - - [x] 让[丁真|陈泽|梅西|孙笑川|科比|懒羊羊|胡桃|雫るる]说我测尼玛 + - [x] 让[lulu]说我测尼玛
@@ -1633,7 +1633,7 @@ print("run[CQ:image,file="+j["img"]+"]") - [x] @Bot 任意文本(任意一句话回复) - - [x] 设置回复模式[青云客 | 小爱 | ChatGPT] + - [x] 设置文字回复模式[婧枫|沫沫|青云客|小爱|ChatGPT] - [x] 设置 ChatGPT api key xxx diff --git a/go.mod b/go.mod index bca063579b..689d7ca752 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/Baidu-AIP/golang-sdk v1.1.1 - github.com/FloatTech/AnimeAPI v1.7.1-0.20240411073357-0be3d9a5706d + github.com/FloatTech/AnimeAPI v1.7.1-0.20240423052513-58ad4b85322a github.com/FloatTech/floatbox v0.0.0-20240304064110-78a83f1af9a6 github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 github.com/FloatTech/imgfactory v0.2.2-0.20230413152719-e101cc3606ef diff --git a/go.sum b/go.sum index b551b3d3f8..c3b72dbb82 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/Baidu-AIP/golang-sdk v1.1.1 h1:RQsAmgDSAkiq22I6n7XJ2t3afgzFeqjY46FGhv github.com/Baidu-AIP/golang-sdk v1.1.1/go.mod h1:bXnGw7xPeKt8aF7UCELKrV6UZ/46spItONK1RQBQj1Y= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/FloatTech/AnimeAPI v1.7.1-0.20240411073357-0be3d9a5706d h1:eKJxkCzayyHPvQ7+uhF6acGBTnoq5c9K7J6sHbv6xwQ= -github.com/FloatTech/AnimeAPI v1.7.1-0.20240411073357-0be3d9a5706d/go.mod h1:bNHsYcUd1+Y5Al3CR6tdzKxcc0XLivXjmUsL9xG6sSw= +github.com/FloatTech/AnimeAPI v1.7.1-0.20240423052513-58ad4b85322a h1:K+1RAkIBb+3kkSxSkSTdTugSIsXJXrjEbwuv/BwUsP8= +github.com/FloatTech/AnimeAPI v1.7.1-0.20240423052513-58ad4b85322a/go.mod h1:bNHsYcUd1+Y5Al3CR6tdzKxcc0XLivXjmUsL9xG6sSw= github.com/FloatTech/floatbox v0.0.0-20240304064110-78a83f1af9a6 h1:Vaj8ulVbN8vTD4W7aj+BYeT6x8iKFneDnkgBCezomDY= github.com/FloatTech/floatbox v0.0.0-20240304064110-78a83f1af9a6/go.mod h1:TeTlp+hTxpJti4JSdmUqzxGEr4wUBOVct9YWBepilpc= github.com/FloatTech/gg v1.1.3-0.20230226151425-6ea91286ba08 h1:dPLeoiTVSBlgls+66EB/UJ2e38BaASmBN5nANaycSBU= diff --git a/plugin/ai_reply/ai_tts.go b/plugin/ai_reply/ai_tts.go index eaa7579e72..fc0b49e5aa 100644 --- a/plugin/ai_reply/ai_tts.go +++ b/plugin/ai_reply/ai_tts.go @@ -11,28 +11,29 @@ import ( "github.com/FloatTech/AnimeAPI/tts" "github.com/FloatTech/AnimeAPI/tts/baidutts" "github.com/FloatTech/AnimeAPI/tts/genshin" + "github.com/FloatTech/AnimeAPI/tts/lolimi" "github.com/FloatTech/AnimeAPI/tts/ttscn" ctrl "github.com/FloatTech/zbpctrl" "github.com/FloatTech/zbputils/control" ) -// 数据结构: [4 bits] [4 bits] [8 bits] [8 bits] -// [ttscn模式] [百度模式] [tts模式] [回复模式] +// 数据结构: [8 bits] [8 bits] [8 bits] +// [具体人物] [tts模式] [回复模式] // defaultttsindexkey -// 数据结构: [4 bits] [4 bits] [8 bits] -// [ttscn模式] [百度模式] [tts模式] +// 数据结构: [8 bits] [8 bits] +// [具体人物] [tts模式] -// [tts模式]: 0~200 genshin 201 baidu 202 ttscn +// [tts模式]: 0~200 genshin 201 baidu 202 ttscn 203 lolimi const ( - lastgsttsindex = 200 + iota - baiduttsindex + baiduttsindex = 201 + iota ttscnttsindex + lolimittsindex ) // extrattsname is the tts other than genshin vits -var extrattsname = []string{"百度", "TTSCN"} +var extrattsname = []string{"百度", "TTSCN", "桑帛云"} var ttscnspeakers = [...]string{ "晓晓(女 - 年轻人)", @@ -84,7 +85,7 @@ func (r replymode) setReplyMode(ctx *zero.Ctx, name string) error { if !ok { return errors.New("no such plugin") } - return m.SetData(gid, (m.GetData(index)&^0xff)|(index&0xff)) + return m.SetData(gid, (m.GetData(gid)&^0xff)|(index&0xff)) } func (r replymode) getReplyMode(ctx *zero.Ctx) aireply.AIReply { @@ -96,18 +97,22 @@ func (r replymode) getReplyMode(ctx *zero.Ctx) aireply.AIReply { if ok { switch m.GetData(gid) & 0xff { case 0: - return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName) + return aireply.NewLolimiAi(aireply.JingfengURL, aireply.JingfengBotName) case 1: - return aireply.NewXiaoAi(aireply.XiaoAiURL, aireply.XiaoAiBotName) + return aireply.NewLolimiAi(aireply.MomoURL, aireply.MomoBotName) case 2: + return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName) + case 3: + return aireply.NewXiaoAi(aireply.XiaoAiURL, aireply.XiaoAiBotName) + case 4: k := ཆཏ.k if k != "" { return aireply.NewChatGPT(aireply.ChatGPTURL, k) } - return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName) + return aireply.NewLolimiAi(aireply.JingfengURL, aireply.JingfengBotName) } } - return aireply.NewQYK(aireply.QYKURL, aireply.QYKBotName) + return aireply.NewLolimiAi(aireply.JingfengURL, aireply.JingfengBotName) } var ttsins = func() map[string]tts.TTS { @@ -119,8 +124,8 @@ var ttsins = func() map[string]tts.TTS { }() var ttsModes = func() []string { - s := append(genshin.SoundList[:], make([]string, lastgsttsindex-len(genshin.SoundList))...) // 0-200 - s = append(s, extrattsname...) // 201 202 ... + s := append(genshin.SoundList[:], make([]string, baiduttsindex-len(genshin.SoundList))...) // 0-200 + s = append(s, extrattsname...) // 201 202 ... return s }() @@ -146,14 +151,14 @@ func newttsmode() *ttsmode { if ok { index := m.GetData(defaultttsindexkey) msk := index & 0xff - if msk >= 0 && (msk < int64(len(genshin.SoundList)) || msk == baiduttsindex || msk == ttscnttsindex) { + if msk >= 0 && (msk < int64(len(ttsModes))) { (*syncx.Map[int64, int64])(t).Store(defaultttsindexkey, index) } } return t } -func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt int) error { +func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, character int) error { gid := ctx.Event.GroupID if gid == 0 { gid = -ctx.Event.UserID @@ -165,7 +170,7 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt var index = int64(-1) for i, s := range genshin.SoundList { if s == name { - index = int64(i) + index = int64(i + 1) break } } @@ -175,13 +180,17 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, baiduper, mockingsynt index = baiduttsindex case extrattsname[1]: index = ttscnttsindex + case extrattsname[2]: + index = lolimittsindex default: return errors.New("语音人物" + name + "未注册index") } } m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]) - (*syncx.Map[int64, int64])(t).Store(gid, index) - return m.SetData(gid, (m.GetData(gid)&^0xffff00)|((index<<8)&0xff00)|((int64(baiduper)<<16)&0x0f0000)|((int64(mockingsynt)<<20)&0xf00000)) + //按原来的逻辑map存的是前16位 + storeIndex := (m.GetData(gid) &^ 0xffff00) | ((index << 8) & 0xff00) | ((int64(character) << 16) & 0xff0000) + (*syncx.Map[int64, int64])(t).Store(gid, (storeIndex>>8)&0xffff) + return m.SetData(gid, storeIndex) } func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) { @@ -195,8 +204,12 @@ func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) { i = m.GetData(gid) >> 8 } m := i & 0xff - if m < 0 || (m >= int64(len(genshin.SoundList)) && m != baiduttsindex && m != ttscnttsindex) { + if m <= 0 || (m >= int64(len(ttsModes))) { i, _ = (*syncx.Map[int64, int64])(t).Load(defaultttsindexkey) + if i == 0 { + i = ctx.State["manager"].(*ctrl.Control[*zero.Ctx]).GetData(defaultttsindexkey) + (*syncx.Map[int64, int64])(t).Store(defaultttsindexkey, i) + } m = i & 0xff } mode := ttsModes[m] @@ -205,20 +218,22 @@ func (t *ttsmode) getSoundMode(ctx *zero.Ctx) (tts.TTS, error) { switch mode { case extrattsname[0]: id, sec, _ := strings.Cut(百.k, ",") - ins = baidutts.NewBaiduTTS(int(i&0x0f00)>>8, id, sec) + ins = baidutts.NewBaiduTTS(int(i&0xff00)>>8, id, sec) case extrattsname[1]: var err error - ins, err = ttscn.NewTTSCN("中文(普通话,简体)", ttscnspeakers[int(i&0xf000)>>12], ttscn.KBRates[0]) + ins, err = ttscn.NewTTSCN("中文(普通话,简体)", ttscnspeakers[int(i&0xff00)>>8], ttscn.KBRates[0]) if err != nil { return nil, err } + case extrattsname[2]: + ins = lolimi.NewLolimi(int(i&0xff00) >> 8) default: // 原神 k := 原.k if k != "" { - ins = genshin.NewGenshin(int(m), 原.k) + ins = genshin.NewGenshin(int(m-1), 原.k) ttsins[mode] = ins } else { - return nil, errors.New("no valid speaker") + ins = lolimi.NewLolimi(int(i&0xff00) >> 8) } } } @@ -231,11 +246,12 @@ func (t *ttsmode) resetSoundMode(ctx *zero.Ctx) error { gid = -ctx.Event.UserID } m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]) - index := m.GetData(defaultttsindexkey) - return m.SetData(gid, (m.GetData(gid)&0xff)|((index&^0xff)<<8)) // 重置数据 + // 只保留后面8位 + (*syncx.Map[int64, int64])(t).Delete(gid) + return m.SetData(gid, (m.GetData(gid) & 0xff)) // 重置数据 } -func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) error { +func (t *ttsmode) setDefaultSoundMode(name string, character int) error { _, ok := ttsins[name] if !ok { return errors.New("不支持设置语音人物" + name) @@ -243,7 +259,7 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er index := int64(-1) for i, s := range genshin.SoundList { if s == name { - index = int64(i) + index = int64(i + 1) break } } @@ -253,6 +269,8 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er index = baiduttsindex case extrattsname[1]: index = ttscnttsindex + case extrattsname[2]: + index = lolimittsindex default: return errors.New("语音人物" + name + "未注册index") } @@ -261,6 +279,7 @@ func (t *ttsmode) setDefaultSoundMode(name string, baiduper, mockingsynt int) er if !ok { return errors.New("[tts] service not found") } - (*syncx.Map[int64, int64])(t).Store(defaultttsindexkey, index) - return m.SetData(defaultttsindexkey, (index&0xff)|((int64(baiduper)<<8)&0x0f00)|((int64(mockingsynt)<<12)&0xf000)) + storeIndex := (index & 0xff) | ((int64(character) << 8) & 0xff00) + (*syncx.Map[int64, int64])(t).Store(defaultttsindexkey, storeIndex) + return m.SetData(defaultttsindexkey, storeIndex) } diff --git a/plugin/ai_reply/main.go b/plugin/ai_reply/main.go index 447ee33469..40faff1714 100644 --- a/plugin/ai_reply/main.go +++ b/plugin/ai_reply/main.go @@ -5,6 +5,7 @@ import ( "os" "regexp" "strconv" + "strings" "time" "github.com/FloatTech/AnimeAPI/tts/genshin" @@ -16,7 +17,7 @@ import ( "github.com/wdvxdr1123/ZeroBot/message" ) -var replmd = replymode([]string{"青云客", "小爱", "ChatGPT"}) +var replmd = replymode([]string{"婧枫", "沫沫", "青云客", "小爱", "ChatGPT"}) var ttsmd = newttsmode() @@ -25,9 +26,10 @@ func init() { // 插件主体 DisableOnDefault: true, Brief: "人工智能语音回复", Help: "- @Bot 任意文本(任意一句话回复)\n" + - "- 设置语音模式[原神人物/百度/TTSCN] 数字(百度/TTSCN说话人)\n" + - "- 设置默认语音模式[原神人物/百度/TTSCN] 数字(百度/TTSCN说话人)\n" + + "- 设置语音模式[原神人物/百度/TTSCN/桑帛云] 数字(百度/TTSCN说话人/桑帛云)\n" + + "- 设置默认语音模式[原神人物/百度/TTSCN/桑帛云] 数字(百度/TTSCN说话人/桑帛云)\n" + "- 恢复成默认语音模式\n" + + "- 设置语音回复模式[沫沫|婧枫|青云客|小爱|ChatGPT]\n" + "- 设置原神语音 api key xxxxxx (key请加开发群获得)\n" + "- 设置百度语音 api id xxxxxx secret xxxxxx (请自行获得)\n" + "当前适用的原神人物含有以下: \n" + list(genshin.SoundList[:], 5) + @@ -38,7 +40,7 @@ func init() { // 插件主体 enr := control.Register("aireply", &ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "人工智能回复", - Help: "- @Bot 任意文本(任意一句话回复)\n- 设置回复模式[青云客|小爱|ChatGPT]\n- 设置 ChatGPT api key xxx", + Help: "- @Bot 任意文本(任意一句话回复)\n- 设置文字回复模式[婧枫|沫沫|青云客|小爱|ChatGPT]\n- 设置 ChatGPT api key xxx", PrivateDataFolder: "aireply", }) @@ -48,15 +50,10 @@ func init() { // 插件主体 reply := message.ParseMessageFromString(aireply.Talk(ctx.Event.UserID, ctx.ExtractPlainText(), zero.BotConfig.NickName[0])) // 回复 time.Sleep(time.Second * 1) - if zero.OnlyPublic(ctx) { - reply = append(reply, message.Reply(ctx.Event.MessageID)) - ctx.Send(reply) - return - } + reply = append(reply, message.Reply(ctx.Event.MessageID)) ctx.Send(reply) }) - - enr.OnPrefix("设置回复模式", zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { + setReplyMode := func(ctx *zero.Ctx) { param := ctx.State["args"].(string) err := replmd.setReplyMode(ctx, param) if err != nil { @@ -64,8 +61,8 @@ func init() { // 插件主体 return } ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("成功")) - }) - + } + enr.OnPrefix("设置文字回复模式", zero.AdminPermission).SetBlock(true).Handle(setReplyMode) enr.OnRegex(`^设置\s*ChatGPT\s*api\s*key\s*(.*)$`, zero.OnlyPrivate, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { err := ཆཏ.set(ctx.State["regex_matched"].([]string)[1]) if err != nil { @@ -88,7 +85,20 @@ func init() { // 插件主体 // 获取回复模式 r := replmd.getReplyMode(ctx) // 获取回复的文本 - reply := r.TalkPlain(ctx.Event.UserID, msg, zero.BotConfig.NickName[0]) + reply := message.ParseMessageFromString(r.TalkPlain(ctx.Event.UserID, msg, zero.BotConfig.NickName[0])) + // 过滤掉文字消息 + filterMsg := make([]message.MessageSegment, 0, len(reply)) + sb := strings.Builder{} + for _, v := range reply { + if v.Type != "text" { + filterMsg = append(filterMsg, v) + } else { + sb.WriteString(v.Data["text"]) + } + } + // 纯文本 + plainReply := sb.String() + plainReply = strings.ReplaceAll(plainReply, "\n", "") // 获取语音 speaker, err := ttsmd.getSoundMode(ctx) if err != nil { @@ -96,21 +106,26 @@ func init() { // 插件主体 return } rec, err := speaker.Speak(ctx.Event.UserID, func() string { - if !endpre.MatchString(reply) { - return reply + "。" + if !endpre.MatchString(plainReply) { + return plainReply + "。" } - return reply + return plainReply }) + // 发送前面的图片 + if len(filterMsg) != 0 { + filterMsg = append(filterMsg, message.Reply(ctx.Event.MessageID)) + ctx.Send(filterMsg) + } if err != nil { - ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(reply)) + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(plainReply)) return } // 发送语音 if id := ctx.SendChain(message.Record(rec)); id.ID() == 0 { - ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(reply)) + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(plainReply)) } }) - + ent.OnPrefix("设置语音回复模式", zero.AdminPermission).SetBlock(true).Handle(setReplyMode) ent.OnRegex(`^设置语音模式\s*([\S\D]*)\s+(\d*)$`, zero.AdminPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { param := ctx.State["regex_matched"].([]string)[1] num := ctx.State["regex_matched"].([]string)[2] @@ -124,8 +139,8 @@ func init() { // 插件主体 } } // 保存设置 - logrus.Debugln("[tts] t.setSoundMode( ctx", param, n, n, ")") - err = ttsmd.setSoundMode(ctx, param, n, n) + logrus.Debugln("[tts] t.setSoundMode( ctx", param, n, ")") + err = ttsmd.setSoundMode(ctx, param, n) if err != nil { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err)) return @@ -153,7 +168,7 @@ func init() { // 插件主体 return } time.Sleep(time.Second * 2) - ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功")) + ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("设置成功,当前为", speaker)) }) ent.OnRegex(`^设置默认语音模式\s*([\S\D]*)\s+(\d*)$`, zero.SuperUserPermission).SetBlock(true).Handle(func(ctx *zero.Ctx) { @@ -169,7 +184,7 @@ func init() { // 插件主体 } } // 保存设置 - err = ttsmd.setDefaultSoundMode(param, n, n) + err = ttsmd.setDefaultSoundMode(param, n) if err != nil { ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(err)) return diff --git a/plugin/lolimi/lolimi.go b/plugin/lolimi/lolimi.go index 7506b93369..7f8a24becf 100644 --- a/plugin/lolimi/lolimi.go +++ b/plugin/lolimi/lolimi.go @@ -7,6 +7,7 @@ import ( "strconv" "strings" + "github.com/FloatTech/AnimeAPI/tts/lolimi" "github.com/FloatTech/floatbox/binary" "github.com/FloatTech/floatbox/web" ctrl "github.com/FloatTech/zbpctrl" @@ -19,9 +20,6 @@ import ( const ( lolimiURL = "https://api.lolimi.cn" - jiaranURL = lolimiURL + "/API/yyhc/jr.php?msg=%v&type=2" - tafeiURL = lolimiURL + "/API/yyhc/taf.php?msg=%v&type=2" - dxlURL = lolimiURL + "/API/yyhc/dxl.php?msg=%v&type=2" raoURL = lolimiURL + "/API/rao/api.php" yanURL = lolimiURL + "/API/yan/?url=%v" xjjURL = lolimiURL + "/API/tup/xjj.php" @@ -33,7 +31,7 @@ var ( engine = control.AutoRegister(&ctrl.Options[*zero.Ctx]{ DisableOnDefault: false, Brief: "桑帛云 API", - Help: "- 让[塔菲|嘉然|东雪莲]说我测尼玛\n- 随机绕口令\n- 颜值鉴定[图片]\n" + + Help: "- 让[嘉然|塔菲|东雪莲|懒羊羊|科比|孙笑川|陈泽|丁真|空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然]说我测尼玛\n- 随机绕口令\n- 颜值鉴定[图片]\n" + "- 随机妹子\n- 随机情话\n- 发病 嘉然\n\n说明: 颜值鉴定只能鉴定三次元图片", }) ) @@ -100,31 +98,13 @@ func init() { ctx.SendChain(message.Text(text.String())) // 发送构建好的字符串 } }) - engine.OnRegex("^让(塔菲|嘉然|东雪莲)说([\\s\u4e00-\u9fa5\u3040-\u309F\u30A0-\u30FF\\w\\p{P}\u3000-\u303F\uFF00-\uFFEF]+)$").Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) { + engine.OnRegex("^让(嘉然|塔菲|东雪莲|懒羊羊|科比|孙笑川|陈泽|丁真|空|荧|派蒙|纳西妲|阿贝多|温迪|枫原万叶|钟离|荒泷一斗|八重神子|艾尔海森|提纳里|迪希雅|卡维|宵宫|莱依拉|赛诺|诺艾尔|托马|凝光|莫娜|北斗|神里绫华|雷电将军|芭芭拉|鹿野院平藏|五郎|迪奥娜|凯亚|安柏|班尼特|琴|柯莱|夜兰|妮露|辛焱|珐露珊|魈|香菱|达达利亚|砂糖|早柚|云堇|刻晴|丽莎|迪卢克|烟绯|重云|珊瑚宫心海|胡桃|可莉|流浪者|久岐忍|神里绫人|甘雨|戴因斯雷布|优菈|菲谢尔|行秋|白术|九条裟罗|雷泽|申鹤|迪娜泽黛|凯瑟琳|多莉|坎蒂丝|萍姥姥|罗莎莉亚|留云借风真君|绮良良|瑶瑶|七七|奥兹|米卡|夏洛蒂|埃洛伊|博士|女士|大慈树王|三月七|娜塔莎|希露瓦|虎克|克拉拉|丹恒|希儿|布洛妮娅|瓦尔特|杰帕德|佩拉|姬子|艾丝妲|白露|星|穹|桑博|伦纳德|停云|罗刹|卡芙卡|彦卿|史瓦罗|螺丝咕姆|阿兰|银狼|素裳|丹枢|黑塔|景元|帕姆|可可利亚|半夏|符玄|公输师傅|奥列格|青雀|大毫|青镞|费斯曼|绿芙蓉|镜流|信使|丽塔|失落迷迭|缭乱星棘|伊甸|伏特加女孩|狂热蓝调|莉莉娅|萝莎莉娅|八重樱|八重霞|卡莲|第六夜想曲|卡萝尔|姬子|极地战刃|布洛妮娅|次生银翼|理之律者|真理之律者|迷城骇兔|希儿|魇夜星渊|黑希儿|帕朵菲莉丝|天元骑英|幽兰黛尔|德丽莎|月下初拥|朔夜观星|暮光骑士|明日香|李素裳|格蕾修|梅比乌斯|渡鸦|人之律者|爱莉希雅|爱衣|天穹游侠|琪亚娜|空之律者|终焉之律者|薪炎之律者|云墨丹心|符华|识之律者|维尔薇|始源之律者|芽衣|雷之律者|苏莎娜|阿波尼亚|陆景和|莫弈|夏彦|左然)说([\\s\u4e00-\u9fa5\u3040-\u309F\u30A0-\u30FF\\w\\p{P}\u3000-\u303F\uFF00-\uFFEF]+)$").Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) { name := ctx.State["regex_matched"].([]string)[1] msg := ctx.State["regex_matched"].([]string)[2] - recordURL := "" - switch name { - case "塔菲", "东雪莲": - ttsURL := "" - if name == "塔菲" { - ttsURL = tafeiURL - } else { - ttsURL = dxlURL - } - data, err := web.GetData(fmt.Sprintf(ttsURL, url.QueryEscape(msg))) - if err != nil { - ctx.SendChain(message.Text("ERROR: ", err)) - return - } - recordURL = gjson.Get(binary.BytesToString(data), "music").String() - case "嘉然": - recordURL = fmt.Sprintf(jiaranURL, url.QueryEscape(msg)) - default: - recordURL = fmt.Sprintf(jiaranURL, url.QueryEscape(msg)) - } - if recordURL == "" { - ctx.SendChain(message.Text("ERROR: 语音生成失败")) + ctx.SendChain(message.Text("少女祈祷中......")) + recordURL, err := lolimi.TTS(name, msg) + if err != nil { + ctx.SendChain(message.Text("ERROR: ", err)) return } ctx.SendChain(message.Record(recordURL)) diff --git a/plugin/yujn/yujn.go b/plugin/yujn/yujn.go index f36718e91a..c25e110204 100644 --- a/plugin/yujn/yujn.go +++ b/plugin/yujn/yujn.go @@ -125,7 +125,7 @@ func init() { text = strings.ReplaceAll(text, "

", "") ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text(text)) }) - engine.OnRegex("^让(丁真|陈泽|梅西|孙笑川|科比|懒羊羊|胡桃|雫るる)说([\\s\u4e00-\u9fa5\u3040-\u309F\u30A0-\u30FF\\w\\p{P}\u3000-\u303F\uFF00-\uFFEF]+)$").Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) { + engine.OnRegex("^让(lulu)说([\\s\u4e00-\u9fa5\u3040-\u309F\u30A0-\u30FF\\w\\p{P}\u3000-\u303F\uFF00-\uFFEF]+)$").Limit(ctxext.LimitByGroup).Handle(func(ctx *zero.Ctx) { name := ctx.State["regex_matched"].([]string)[1] msg := ctx.State["regex_matched"].([]string)[2] data, err := web.GetData(fmt.Sprintf(yuyinURL, url.QueryEscape(name), url.QueryEscape(msg))) From e0891200af2e41e70398f44adc3908d006885636 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 16:12:34 +0900 Subject: [PATCH 13/13] =?UTF-8?q?chore(lint):=20=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=B7=E5=BC=8F=20(#891)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- plugin/ai_reply/ai_tts.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/ai_reply/ai_tts.go b/plugin/ai_reply/ai_tts.go index fc0b49e5aa..dcf9a2a154 100644 --- a/plugin/ai_reply/ai_tts.go +++ b/plugin/ai_reply/ai_tts.go @@ -187,7 +187,7 @@ func (t *ttsmode) setSoundMode(ctx *zero.Ctx, name string, character int) error } } m := ctx.State["manager"].(*ctrl.Control[*zero.Ctx]) - //按原来的逻辑map存的是前16位 + // 按原来的逻辑map存的是前16位 storeIndex := (m.GetData(gid) &^ 0xffff00) | ((index << 8) & 0xff00) | ((int64(character) << 16) & 0xff0000) (*syncx.Map[int64, int64])(t).Store(gid, (storeIndex>>8)&0xffff) return m.SetData(gid, storeIndex)