diff --git a/README.md b/README.md index 1eb01ec4..515114f8 100644 --- a/README.md +++ b/README.md @@ -247,7 +247,7 @@ zerobot [-h] [-t token] [-u url] [-n nickname] [-p prefix] [-d|w] [-g 监听地 - [x] 讲个笑话[@xxx] | 讲个笑话[qq号] - **抽象话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua"` - [x] 抽象翻译[xxx] -- **抽象话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_emojimix"` +- **合成emoji** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_emojimix"` - [x] [emoji][emoji] - **绝绝子** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi"` - [x] 喝奶茶绝绝子 | 绝绝子吃饭 diff --git a/plugin_emojimix/mix.go b/plugin_emojimix/mix.go index dbcc904f..ce50222c 100644 --- a/plugin_emojimix/mix.go +++ b/plugin_emojimix/mix.go @@ -9,10 +9,13 @@ import ( "github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/control/order" "github.com/FloatTech/zbputils/ctxext" + "github.com/sirupsen/logrus" zero "github.com/wdvxdr1123/ZeroBot" "github.com/wdvxdr1123/ZeroBot/message" ) +const bed = "https://www.gstatic.com/android/keyboard/emojikitchen/%d/u%x/u%x_u%x.png" + func init() { control.Register("emojimix", order.AcquirePrio(), &control.Options{ DisableOnDefault: false, @@ -20,39 +23,34 @@ func init() { "- [emoji][emoji]", }).OnMessage(match).SetBlock(true).Limit(ctxext.LimitByUser). Handle(func(ctx *zero.Ctx) { - r1 := ctx.State["emojimix_e1"].(rune) - r2 := ctx.State["emojimix_e2"].(rune) - u1 := fmt.Sprintf("https://www.gstatic.com/android/keyboard/emojikitchen/%d/u%x/u%x_u%x.png", emojis[r1], r1, r1, r2) - u2 := fmt.Sprintf("https://www.gstatic.com/android/keyboard/emojikitchen/%d/u%x/u%x_u%x.png", emojis[r2], r2, r2, r1) - client := &http.Client{} - resp1, err := client.Head(u1) - if err == nil && resp1.StatusCode == http.StatusOK { - ctx.SendChain(message.Image(u1)) + r := ctx.State["emojimix"].([]rune) + logrus.Debugln("[emojimix] match:", r) + r1, r2 := r[0], r[1] + u1 := fmt.Sprintf(bed, emojis[r1], r1, r1, r2) + u2 := fmt.Sprintf(bed, emojis[r2], r2, r2, r1) + logrus.Debugln("[emojimix] u1:", u1) + logrus.Debugln("[emojimix] u2:", u2) + resp1, err := http.Head(u1) + if err == nil { resp1.Body.Close() - return + if resp1.StatusCode == http.StatusOK { + ctx.SendChain(message.Image(u1)) + return + } } - resp2, err := client.Head(u2) - if err == nil && resp2.StatusCode == http.StatusOK { - ctx.SendChain(message.Image(u2)) + resp2, err := http.Head(u2) + if err == nil { resp2.Body.Close() - return + if resp2.StatusCode == http.StatusOK { + ctx.SendChain(message.Image(u2)) + return + } } }) } func match(ctx *zero.Ctx) bool { - r := []rune(ctx.Event.RawMessage) - if len(r) == 2 { - if _, ok := emojis[r[0]]; !ok { - return false - } - if _, ok := emojis[r[1]]; !ok { - return false - } - ctx.State["emojimix_e1"] = r[0] - ctx.State["emojimix_e2"] = r[1] - return true - } + logrus.Debugln("[emojimix] msg:", ctx.Event.Message) if len(ctx.Event.Message) == 2 { r1 := face2emoji(ctx.Event.Message[0]) if _, ok := emojis[r1]; !ok { @@ -62,8 +60,20 @@ func match(ctx *zero.Ctx) bool { if _, ok := emojis[r2]; !ok { return false } - ctx.State["emojimix_e1"] = r1 - ctx.State["emojimix_e2"] = r2 + ctx.State["emojimix"] = []rune{r1, r2} + return true + } + + r := []rune(ctx.Event.RawMessage) + logrus.Debugln("[emojimix] raw msg:", ctx.Event.RawMessage) + if len(r) == 2 { + if _, ok := emojis[r[0]]; !ok { + return false + } + if _, ok := emojis[r[1]]; !ok { + return false + } + ctx.State["emojimix"] = r return true } return false