增加绝绝子和藏头诗 (#93)

* feat:添加绝绝子和藏头诗

* fix:去除日志

* fix:修一下help,replace,命名
This commit is contained in:
himawari 2021-12-26 15:17:11 +08:00 committed by GitHub
parent 0a95f3198b
commit 96802efa45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 227 additions and 10 deletions

View File

@ -233,6 +233,11 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
- [x] 讲个笑话[@xxx]|讲个笑话[qq号] - [x] 讲个笑话[@xxx]|讲个笑话[qq号]
- **抽象话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua"` - **抽象话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua"`
- [x] 抽象翻译[xxx] - [x] 抽象翻译[xxx]
- **绝绝子** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi"`
- [x] 喝奶茶绝绝子|绝绝子吃饭
- **藏头诗** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi"`
- [x] 藏头诗[xxx]
- [x] 藏尾诗[xxx]
- **TODO...** - **TODO...**
## 使用方法 ## 使用方法

View File

@ -31,12 +31,14 @@ import (
_ "github.com/FloatTech/ZeroBot-Plugin-Gif" // 制图 _ "github.com/FloatTech/ZeroBot-Plugin-Gif" // 制图
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review" // 哀伤雪刃吧推书记录 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review" // 哀伤雪刃吧推书记录
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi" // 藏头诗
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose" // 选择困难症帮手 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose" // 选择困难症帮手
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua" // 说抽象话 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua" // 说抽象话
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser" // 三次元小姐姐 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser" // 三次元小姐姐
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune" // 运势 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune" // 运势
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny" // 笑话 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny" // 笑话
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs" // 炉石 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs" // 炉石
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi" // 绝绝子生成器
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager _ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu" // 摸鱼 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu" // 摸鱼
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌

View File

@ -0,0 +1,124 @@
package cangtoushi
import (
"fmt"
"io"
"net/http"
"net/http/cookiejar"
"net/url"
"strings"
"time"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/antchfx/htmlquery"
log "github.com/sirupsen/logrus"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
)
const (
loginURL = "https://www.shicimingju.com/cangtoushi/"
searchURL = "https://www.shicimingju.com/cangtoushi/index.html"
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
referer = "https://www.shicimingju.com/cangtoushi/index.html"
prio = 20
)
var (
gCurCookieJar *cookiejar.Jar
engine = control.Register("cangtoushi", &control.Options{
DisableOnDefault: false,
Help: "藏头诗\n" +
"- 藏头诗[xxx]\n- 藏尾诗[xxx]",
})
limit = rate.NewManager(time.Minute, 20)
csrf string
)
func init() {
engine.OnRegex("藏头诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
kw := ctx.State["regex_matched"].([]string)[1]
login()
data, err := search(kw, "7", "0")
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
text := dealHTML(helper.BytesToString(data))
ctx.SendChain(message.Text(text))
})
engine.OnRegex("藏尾诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
kw := ctx.State["regex_matched"].([]string)[1]
login()
data, err := search(kw, "7", "2")
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
text := dealHTML(helper.BytesToString(data))
ctx.SendChain(message.Text(text))
})
}
func login() {
gCurCookieJar, _ = cookiejar.New(nil)
client := &http.Client{
Jar: gCurCookieJar,
}
request, err := http.NewRequest("GET", loginURL, nil)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
request.Header.Add("User-Agent", ua)
response, err := client.Do(request)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
data, err := io.ReadAll(response.Body)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
response.Body.Close()
doc, err := htmlquery.Parse(strings.NewReader(helper.BytesToString(data)))
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
csrf = htmlquery.SelectAttr(htmlquery.FindOne(doc, "//input[@name='_csrf']"), "value")
}
func search(kw, zishu, position string) (data []byte, err error) {
postStr := fmt.Sprintf("_csrf=%s&kw=%s&zishu=%s&position=%s", url.QueryEscape(csrf), url.QueryEscape(kw), zishu, position)
log.Println("postStr:", postStr)
client := &http.Client{
Jar: gCurCookieJar,
}
request, err := http.NewRequest("POST", searchURL, strings.NewReader(postStr))
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
request.Header.Add("Referer", referer)
request.Header.Add("User-Agent", ua)
request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
response, err := client.Do(request)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
data, err = io.ReadAll(response.Body)
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
response.Body.Close()
return
}
func dealHTML(data string) (text string) {
doc, err := htmlquery.Parse(strings.NewReader(data))
if err != nil {
log.Errorln("[cangtoushi]:", err)
}
text = htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@class='card']/div[@class='card']"))
text = strings.ReplaceAll(text, " ", "")
text = strings.Replace(text, "\n", "", 1)
return text
}

View File

@ -13,7 +13,7 @@ func init() {
control.Register("chouxianghua", &control.Options{ control.Register("chouxianghua", &control.Options{
DisableOnDefault: false, DisableOnDefault: false,
Help: "抽象话\n- 抽象翻译xxx\n", Help: "抽象话\n- 抽象翻译xxx\n",
}).OnRegex("^抽象翻译([\u4E00-\u9FA5A-Za-z0-9]+)$").SetBlock(true).SetPriority(prio). }).OnRegex("^抽象翻译((\\s|[\\r\\n]|[\u4E00-\u9FA5A-Za-z0-9“”,;、。《》=\\x22])+)$").SetBlock(true).SetPriority(prio).
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
r := cx(ctx.State["regex_matched"].([]string)[1]) r := cx(ctx.State["regex_matched"].([]string)[1])
ctx.SendChain(message.Text(r)) ctx.SendChain(message.Text(r))

View File

@ -14,7 +14,7 @@ import (
) )
var ( var (
engine = control.Register("curse", &control.Options{ engine = control.Register("funny", &control.Options{
DisableOnDefault: false, DisableOnDefault: false,
Help: "讲个笑话\n" + Help: "讲个笑话\n" +
"- 讲个笑话[@xxx]|讲个笑话[qq号]\n", "- 讲个笑话[@xxx]|讲个笑话[qq号]\n",
@ -32,9 +32,15 @@ func init() {
name := ctx.State["args"].(string) name := ctx.State["args"].(string)
if len(ctx.Event.Message) > 1 && ctx.Event.Message[1].Type == "at" { if len(ctx.Event.Message) > 1 && ctx.Event.Message[1].Type == "at" {
qq, _ := strconv.ParseInt(ctx.Event.Message[1].Data["qq"], 10, 64) qq, _ := strconv.ParseInt(ctx.Event.Message[1].Data["qq"], 10, 64)
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("nickname").Str name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("card").String()
if name == "" {
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("nickname").String()
}
} else if name == "" { } else if name == "" {
name = ctx.Event.Sender.NickName name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, ctx.Event.UserID, false).Get("card").String()
if name == "" {
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, ctx.Event.UserID, false).Get("nickname").String()
}
} }
var j joke var j joke
err := db.Pick("jokes", &j) err := db.Pick("jokes", &j)

View File

@ -0,0 +1,77 @@
package juejuezi
import (
"fmt"
log "github.com/sirupsen/logrus"
"io"
"net/http"
"strings"
"time"
"github.com/FloatTech/ZeroBot-Plugin/control"
"github.com/tidwall/gjson"
zero "github.com/wdvxdr1123/ZeroBot"
"github.com/wdvxdr1123/ZeroBot/extension/rate"
"github.com/wdvxdr1123/ZeroBot/message"
"github.com/wdvxdr1123/ZeroBot/utils/helper"
)
const (
juejueziURL = "https://www.offjuan.com/api/juejuezi/text"
prio = 15
referer = "https://juejuezi.offjuan.com/"
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
)
var (
engine = control.Register("juejuezi", &control.Options{
DisableOnDefault: false,
Help: "绝绝子生成器\n" +
"- 喝奶茶绝绝子|绝绝子吃饭",
})
limit = rate.NewManager(time.Minute, 20)
)
func init() {
engine.OnRegex("[\u4E00-\u9FA5]{0,10}绝绝子[\u4E00-\u9FA5]{0,10}").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
if !limit.Load(ctx.Event.GroupID).Acquire() {
return
}
toDealStr := []rune(strings.ReplaceAll(ctx.ExtractPlainText(), "绝绝子", ""))
if len(toDealStr) < 2 {
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("不要只输入绝绝子"))
} else if len(toDealStr) == 2 {
data, err := juejuezi(string(toDealStr[0]), string(toDealStr[1]))
if err != nil {
ctx.SendChain(message.Text(err))
}
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
} else {
params := ctx.GetWordSlices(string(toDealStr)).Get("slices").Array()
data, err := juejuezi(params[0].String(), params[1].String())
if err != nil {
ctx.SendChain(message.Text(err))
}
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
}
})
}
func juejuezi(verb, noun string) (data []byte, err error) {
juejueziStr := fmt.Sprintf("{\"verb\":\"%s\",\"noun\":\"%s\"}", verb, noun)
client := &http.Client{}
// 提交请求
request, err := http.NewRequest("POST", juejueziURL, strings.NewReader(juejueziStr))
if err != nil {
log.Errorln("[juejuezi]:", err)
}
request.Header.Add("Referer", referer)
request.Header.Add("User-Agent", ua)
response, err := client.Do(request)
if err != nil {
log.Errorln("[juejuezi]:", err)
}
data, err = io.ReadAll(response.Body)
response.Body.Close()
return
}

View File

@ -423,7 +423,10 @@ func init() { // 插件主体
Handle(func(ctx *zero.Ctx) { Handle(func(ctx *zero.Ctx) {
if ctx.Event.NoticeType == "group_decrease" { if ctx.Event.NoticeType == "group_decrease" {
userid := ctx.Event.UserID userid := ctx.Event.UserID
nickname := ctx.GetStrangerInfo(userid, false).Get("nickname").String() nickname := ctx.GetGroupMemberInfo(ctx.Event.GroupID, userid, false).Get("card").String()
if nickname == "" {
nickname = ctx.GetGroupMemberInfo(ctx.Event.GroupID, userid, false).Get("nickname").String()
}
ctx.SendChain(message.Text(nickname, "(", userid, ")", "离开了我们...")) ctx.SendChain(message.Text(nickname, "(", userid, ")", "离开了我们..."))
} }
}) })

View File

@ -11,14 +11,14 @@ import (
func ReqWith(url string, method string, referer string, ua string) (data []byte, err error) { func ReqWith(url string, method string, referer string, ua string) (data []byte, err error) {
client := &http.Client{} client := &http.Client{}
// 提交请求 // 提交请求
var reqest *http.Request var request *http.Request
reqest, err = http.NewRequest(method, url, nil) request, err = http.NewRequest(method, url, nil)
if err == nil { if err == nil {
// 增加header选项 // 增加header选项
reqest.Header.Add("Referer", referer) request.Header.Add("Referer", referer)
reqest.Header.Add("User-Agent", ua) request.Header.Add("User-Agent", ua)
var response *http.Response var response *http.Response
response, err = client.Do(reqest) response, err = client.Do(request)
if err == nil { if err == nil {
data, err = io.ReadAll(response.Body) data, err = io.ReadAll(response.Body)
response.Body.Close() response.Body.Close()