️wordle逻辑优化,bilibilipush、translate添加信息 (#179)

* 添加查成分功能

* 🚨修lint

* 🚨减少空格

* 🐛修改网址

* 🐛修改vup数量错误问题

* 🐛图片读取不了,就不读了

* 🐛 固定头像大小,bilibilipush调公有库

* 🎨 修改json转换

*  bilibilipush添加新类型,同时修改命令正则,wordle添加时间提醒,和单词语义,translate充实信息

* ️使用公用的翻译函数

* 🚨 添加return和stop

Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
This commit is contained in:
himawari 2022-04-04 22:53:37 +08:00 committed by GitHub
parent ec513e8893
commit f89b6f5feb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 78 additions and 41 deletions

View File

@ -349,11 +349,11 @@ print("run[CQ:image,file="+j["img"]+"]")
- [x] 骂我 - [x] 骂我
- [x] 大力骂我 - [x] 大力骂我
- **b站推送** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili_push"` - **b站推送** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili_push"`
- [x] 添加订阅[uid] - [x] 添加b站订阅[uid]
- [x] 取消订阅[uid] - [x] 取消b站订阅[uid]
- [x] 取消动态订阅[uid] - [x] 取消b站动态订阅[uid]
- [x] 取消直播订阅[uid] - [x] 取消b站直播订阅[uid]
- [x] 推送列表 - [x] b站推送列表
- **网易云音乐热评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wangyiyun"` - **网易云音乐热评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/wangyiyun"`
- [x] 来份网易云热评 - [x] 来份网易云热评
- **b站视频链接解析** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili_parse"` - **b站视频链接解析** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin/bilibili_parse"`

View File

@ -36,13 +36,14 @@ var bdb *bilibilipushdb
var ( var (
lastTime = map[int64]int64{} lastTime = map[int64]int64{}
typeMsg = map[int64]string{ typeMsg = map[int64]string{
1: "转发了一条动态", 1: "转发了一条动态",
2: "有图营业", 2: "有图营业",
4: "无图营业", 4: "无图营业",
8: "发布了新投稿", 8: "发布了新投稿",
16: "发布了短视频", 16: "发布了短视频",
64: "发布了新专栏", 64: "发布了新专栏",
256: "发布了新音频", 256: "发布了新音频",
2048: "发布了新简报",
} }
liveStatus = map[int64]int{} liveStatus = map[int64]int{}
uidErrorMsg = map[int]string{ uidErrorMsg = map[int]string{
@ -59,11 +60,11 @@ func init() {
en := control.Register(serviceName, &control.Options{ en := control.Register(serviceName, &control.Options{
DisableOnDefault: false, DisableOnDefault: false,
Help: "bilibilipush\n" + Help: "bilibilipush\n" +
"- 添加订阅[uid]\n" + "- 添加b站订阅[uid]\n" +
"- 取消订阅[uid]\n" + "- 取消b站订阅[uid]\n" +
"- 取消动态订阅[uid]\n" + "- 取消b站动态订阅[uid]\n" +
"- 取消直播订阅[uid]\n" + "- 取消b站直播订阅[uid]\n" +
"- 推送列表", "- b站推送列表",
PrivateDataFolder: serviceName, PrivateDataFolder: serviceName,
}) })
@ -75,7 +76,7 @@ func init() {
log.Println("[bilibilipush]加载bilibilipush数据库") log.Println("[bilibilipush]加载bilibilipush数据库")
}() }()
en.OnRegex(`^添加订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) { en.OnRegex(`^添加b站订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) {
buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64)
var name string var name string
var ok bool var ok bool
@ -101,7 +102,7 @@ func init() {
ctx.SendChain(message.Text("已添加" + name + "的订阅")) ctx.SendChain(message.Text("已添加" + name + "的订阅"))
} }
}) })
en.OnRegex(`^取消订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) { en.OnRegex(`^取消b站订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) {
buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64)
var name string var name string
var ok bool var ok bool
@ -127,7 +128,7 @@ func init() {
ctx.SendChain(message.Text("已取消" + name + "的订阅")) ctx.SendChain(message.Text("已取消" + name + "的订阅"))
} }
}) })
en.OnRegex(`^取消动态订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) { en.OnRegex(`^取消b站动态订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) {
buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64)
var name string var name string
var ok bool var ok bool
@ -153,7 +154,7 @@ func init() {
ctx.SendChain(message.Text("已取消" + name + "的动态订阅")) ctx.SendChain(message.Text("已取消" + name + "的动态订阅"))
} }
}) })
en.OnRegex(`^取消直播订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) { en.OnRegex(`^取消b站直播订阅\s?(\d+)$`, zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) {
buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64) buid, _ := strconv.ParseInt(ctx.State["regex_matched"].([]string)[1], 10, 64)
var name string var name string
var ok bool var ok bool
@ -179,14 +180,14 @@ func init() {
ctx.SendChain(message.Text("已取消" + name + "的直播订阅")) ctx.SendChain(message.Text("已取消" + name + "的直播订阅"))
} }
}) })
en.OnFullMatch("推送列表", zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) { en.OnFullMatch("b站推送列表", zero.UserOrGrpAdmin).SetBlock(true).Handle(func(ctx *zero.Ctx) {
gid := ctx.Event.GroupID gid := ctx.Event.GroupID
if gid == 0 { if gid == 0 {
gid = -ctx.Event.UserID gid = -ctx.Event.UserID
} }
bpl := bdb.getAllPushByGroup(gid) bpl := bdb.getAllPushByGroup(gid)
fmt.Println(bpl) fmt.Println(bpl)
msg := "--------推送列表--------" msg := "--------b站推送列表--------"
for _, v := range bpl { for _, v := range bpl {
if _, ok := upMap[v.BilibiliUID]; !ok { if _, ok := upMap[v.BilibiliUID]; !ok {
bdb.updateAllUp() bdb.updateAllUp()
@ -401,6 +402,19 @@ func sendDynamic() {
msg = append(msg, message.Text(cTitle)) msg = append(msg, message.Text(cTitle))
cCover := gjson.Get(cOrigin, "cover").String() cCover := gjson.Get(cOrigin, "cover").String()
msg = append(msg, message.Image(cCover)) msg = append(msg, message.Image(cCover))
case 2048:
cName := gjson.Get(cOrigin, "user.uname").String()
msg = append(msg, message.Text(cName+typeMsg[cOrigType]+"\n"))
cContent := gjson.Get(cOrigin, "vest.content").String()
msg = append(msg, message.Text(cContent+"\n"))
cTitle := gjson.Get(cOrigin, "sketch.title").String()
msg = append(msg, message.Text(cTitle+"\n"))
cDescText := gjson.Get(cOrigin, "sketch.desc_text").String()
msg = append(msg, message.Text(cDescText))
cCoverURL := gjson.Get(cOrigin, "sketch.cover_url").String()
msg = append(msg, message.Image(cCoverURL))
cTargetURL := gjson.Get(cOrigin, "sketch.target_url").String()
msg = append(msg, message.Text("简报链接:"+cTargetURL+"\n"))
default: default:
msg = append(msg, message.Text("未知动态类型"+strconv.FormatInt(cOrigType, 10)+"\n")) msg = append(msg, message.Text("未知动态类型"+strconv.FormatInt(cOrigType, 10)+"\n"))
} }
@ -462,6 +476,19 @@ func sendDynamic() {
msg = append(msg, message.Text(cTitle)) msg = append(msg, message.Text(cTitle))
cCover := gjson.Get(cardStr, "cover").String() cCover := gjson.Get(cardStr, "cover").String()
msg = append(msg, message.Image(cCover)) msg = append(msg, message.Image(cCover))
case 2048:
cName := gjson.Get(cardStr, "user.uname").String()
msg = append(msg, message.Text(cName+typeMsg[cType]+"\n"))
cContent := gjson.Get(cardStr, "vest.content").String()
msg = append(msg, message.Text(cContent+"\n"))
cTitle := gjson.Get(cardStr, "sketch.title").String()
msg = append(msg, message.Text(cTitle+"\n"))
cDescText := gjson.Get(cardStr, "sketch.desc_text").String()
msg = append(msg, message.Text(cDescText))
cCoverURL := gjson.Get(cardStr, "sketch.cover_url").String()
msg = append(msg, message.Image(cCoverURL))
cTargetURL := gjson.Get(cardStr, "sketch.target_url").String()
msg = append(msg, message.Text("简报链接:"+cTargetURL+"\n"))
default: default:
msg = append(msg, message.Text("未知动态类型"+strconv.FormatInt(cType, 10)+"\n")) msg = append(msg, message.Text("未知动态类型"+strconv.FormatInt(cType, 10)+"\n"))
} }

View File

@ -2,14 +2,11 @@
package translation package translation
import ( import (
"github.com/tidwall/gjson" "github.com/FloatTech/AnimeAPI/tl"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/message"
control "github.com/FloatTech/zbputils/control" control "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/ctxext" "github.com/FloatTech/zbputils/ctxext"
"github.com/FloatTech/zbputils/process" zero "github.com/wdvxdr1123/ZeroBot"
"github.com/FloatTech/zbputils/web" "github.com/wdvxdr1123/ZeroBot/message"
) )
func init() { func init() {
@ -20,13 +17,11 @@ func init() {
}).OnRegex(`^>TL\s(-.{1,10}? )?(.*)$`).SetBlock(true).Limit(ctxext.LimitByUser). }).OnRegex(`^>TL\s(-.{1,10}? )?(.*)$`).SetBlock(true).Limit(ctxext.LimitByUser).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
msg := []string{ctx.State["regex_matched"].([]string)[2]} msg := []string{ctx.State["regex_matched"].([]string)[2]}
data, err := web.GetData("https://api.cloolc.club/fanyi?data=" + msg[0]) data, err := tl.Translate(msg[0])
if err != nil { if err != nil {
ctx.SendChain(message.Text("ERROR:", err)) ctx.SendChain(message.Text("Error:", data))
return
} }
info := gjson.ParseBytes(data) ctx.SendChain(message.Text(data))
repo := info.Get("data.0")
process.SleepAbout1sTo2s()
ctx.SendChain(message.Text(repo.Get("value.0")))
}) })
} }

View File

@ -4,6 +4,7 @@ package wordle
import ( import (
"errors" "errors"
"fmt" "fmt"
"github.com/FloatTech/AnimeAPI/tl"
"image/color" "image/color"
"math/rand" "math/rand"
"sort" "sort"
@ -62,7 +63,7 @@ func init() {
en := control.Register("wordle", &control.Options{ en := control.Register("wordle", &control.Options{
DisableOnDefault: false, DisableOnDefault: false,
Help: "猜单词\n" + Help: "猜单词\n" +
"- 个人猜单词" + "- 个人猜单词\n" +
"- 团队猜单词", "- 团队猜单词",
PublicDataFolder: "Wordle", PublicDataFolder: "Wordle",
}).ApplySingle(single.New( }).ApplySingle(single.New(
@ -107,6 +108,11 @@ func init() {
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
class := classdict[ctx.State["regex_matched"].([]string)[2]] class := classdict[ctx.State["regex_matched"].([]string)[2]]
target := words[class].cet4[rand.Intn(len(words[class].cet4))] target := words[class].cet4[rand.Intn(len(words[class].cet4))]
tt, err := tl.Translate(target)
if err != nil {
ctx.SendChain(message.Text("ERROR:", err))
return
}
game := newWordleGame(target) game := newWordleGame(target)
_, img, cl, _ := game("") _, img, cl, _ := game("")
ctx.Send( ctx.Send(
@ -125,35 +131,44 @@ func init() {
zero.OnlyGroup, zero.CheckGroup(ctx.Event.GroupID)) zero.OnlyGroup, zero.CheckGroup(ctx.Event.GroupID))
} }
var win bool var win bool
var err error
recv, cancel := next.Repeat() recv, cancel := next.Repeat()
defer cancel() defer cancel()
tick := time.NewTimer(105 * time.Second)
after := time.NewTimer(120 * time.Second)
for { for {
select { select {
case <-time.After(time.Second * 120): case <-tick.C:
ctx.SendChain(message.Text("猜单词你还有15s作答时间"))
case <-after.C:
ctx.Send( ctx.Send(
message.ReplyWithMessage(ctx.Event.MessageID, message.ReplyWithMessage(ctx.Event.MessageID,
message.Text("猜单词超时,游戏结束...答案是: ", target), message.Text("猜单词超时,游戏结束...答案是: ", target, "(", tt, ")"),
), ),
) )
return return
case c := <-recv: case c := <-recv:
tick.Reset(105 * time.Second)
after.Reset(120 * time.Second)
win, img, cl, err = game(c.Event.Message.String()) win, img, cl, err = game(c.Event.Message.String())
switch { switch {
case win: case win:
tick.Stop()
after.Stop()
ctx.Send( ctx.Send(
message.ReplyWithMessage(c.Event.MessageID, message.ReplyWithMessage(c.Event.MessageID,
message.ImageBytes(img), message.ImageBytes(img),
message.Text("太棒了,你猜出来了!"), message.Text("太棒了,你猜出来了!答案是: ", target, "(", tt, ")"),
), ),
) )
cl() cl()
return return
case err == errTimesRunOut: case err == errTimesRunOut:
tick.Stop()
after.Stop()
ctx.Send( ctx.Send(
message.ReplyWithMessage(c.Event.MessageID, message.ReplyWithMessage(c.Event.MessageID,
message.ImageBytes(img), message.ImageBytes(img),
message.Text("游戏结束...答案是: ", target), message.Text("游戏结束...答案是: ", target, "(", tt, ")"),
), ),
) )
cl() cl()