diff --git a/plugin_diana/zhiwang.go b/plugin_diana/zhiwang.go new file mode 100644 index 00000000..fbbea5e2 --- /dev/null +++ b/plugin_diana/zhiwang.go @@ -0,0 +1,110 @@ +package plugin_diana + +import ( + "bytes" + "encoding/json" + "github.com/wdvxdr1123/ZeroBot/message" + "math" + "strconv" + + zero "github.com/wdvxdr1123/ZeroBot" + "net/http" + "strings" +) + +// json解析的结构体声明 +type zhiwang struct { + Code int `json:"code"` + Data struct { + EndTime int `json:"end_time"` + Rate float64 `json:"rate"` + Related [][]interface{} `json:"related"` + StartTime int `json:"start_time"` + } `json:"data"` + Message string `json:"message"` +} + +// 小作文查重: 回复要查的消息 查重 +func init() { + zero.OnMessage(FullMatchText("查重")). + Handle(func(ctx *zero.Ctx) { + msg := ctx.Event.Message + if msg[0].Type == "reply" { + id, _ := strconv.Atoi(msg[0].Data["id"]) + msg := ctx.GetMessage(int64(id)).Elements[0].Data["text"] + zhiwangjson := zhiwangapi(msg) + // 判断api是否能调通 + if zhiwangjson.Code != 0 { + ctx.Send("api返回错误") + return + } + // 判断json数据里Related标签是否有数据 + if len(zhiwangjson.Data.Related) == 0 { + ctx.Send("枝网没搜到,查重率为0%,我的评价是:一眼真") + return + } + // 把interface转为map方便提取其中数据 + related := zhiwangjson.Data.Related[0][1].(map[string]interface{}) + ctx.SendChain(message.Text( + "枝网文本复制检测报告(简洁)", "\n", + "查重时间: ", timecurrent(), "\n", + "总文字复制比: ", math.Floor(zhiwangjson.Data.Rate * 100), "%", "\n", + "相似小作文:", "\n", + related["content"].(string)[:102] + ".....", "\n", + "获赞数", related["like_num"], "\n", + zhiwangjson.Data.Related[0][2].(string), "\n", + "作者: ", related["m_name"], "\n", + "发表时间: ", timestamp(related["ctime"].(float64)), "\n", + "查重结果仅作参考,请注意辨别是否为原创", "\n", + "数据来源: https://asoulcnki.asia/", + )) + }else { + return + } + }) +} + +// 发起api请求并把返回body交由json库解析 +func zhiwangapi(Text string) *zhiwang { + + url := "https://asoulcnki.asia/v1/api/checksdsadas" + post := "{\"text\":\"" + Text + "\"}" + var jsonStr = []byte(post) + + req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) + req.Header.Set("Content-Type", "application/json") + client := &http.Client{} + + resp, err := client.Do(req) + if err != nil{ + panic(err) + } + defer resp.Body.Close() + + result := &zhiwang{} + if err := json.NewDecoder(resp.Body).Decode(result); err != nil { + panic(err) + } + return result +} + +// 照帮理酱的关键字匹配函数 +func FullMatchText(src ...string) zero.Rule { + return func(ctx *zero.Ctx) bool { + msg := ctx.Event.Message + for _, elem := range msg { + if elem.Type == "text" { + text := elem.Data["text"] + text = strings.ReplaceAll(text, " ", "") + text = strings.ReplaceAll(text, "\r", "") + text = strings.ReplaceAll(text, "\n", "") + for _, s := range src { + if text == s { + return true + } + } + } + } + return false + } +}