Skip to content

Commit 96802ef

Browse files
authored
增加绝绝子和藏头诗 (#93)
* feat:添加绝绝子和藏头诗 * fix:去除日志 * fix:修一下help,replace,命名
1 parent 0a95f31 commit 96802ef

File tree

8 files changed

+227
-10
lines changed

8 files changed

+227
-10
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,11 @@ zerobot -h -t token -u url [-d|w] [-g 监听地址:端口] qq1 qq2 qq3 ...
233233
- [x] 讲个笑话[@xxx]|讲个笑话[qq号]
234234
- **抽象话** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua"`
235235
- [x] 抽象翻译[xxx]
236+
- **绝绝子** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi"`
237+
- [x] 喝奶茶绝绝子|绝绝子吃饭
238+
- **藏头诗** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi"`
239+
- [x] 藏头诗[xxx]
240+
- [x] 藏尾诗[xxx]
236241
- **TODO...**
237242

238243
## 使用方法

main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ import (
3131
_ "github.com/FloatTech/ZeroBot-Plugin-Gif" // 制图
3232
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_ai_false" // 服务器监控
3333
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_book_review" // 哀伤雪刃吧推书记录
34+
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_cangtoushi" // 藏头诗
3435
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_choose" // 选择困难症帮手
3536
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_chouxianghua" // 说抽象话
3637
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_coser" // 三次元小姐姐
3738
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_fortune" // 运势
3839
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_funny" // 笑话
3940
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_hs" // 炉石
41+
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_juejuezi" // 绝绝子生成器
4042
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_minecraft" // MCSManager
4143
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_moyu" // 摸鱼
4244
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_music" // 点歌

plugin_cangtoushi/cangtoushi.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package cangtoushi
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"net/http"
7+
"net/http/cookiejar"
8+
"net/url"
9+
"strings"
10+
"time"
11+
12+
"github.com/FloatTech/ZeroBot-Plugin/control"
13+
"github.com/antchfx/htmlquery"
14+
log "github.com/sirupsen/logrus"
15+
zero "github.com/wdvxdr1123/ZeroBot"
16+
"github.com/wdvxdr1123/ZeroBot/extension/rate"
17+
"github.com/wdvxdr1123/ZeroBot/message"
18+
"github.com/wdvxdr1123/ZeroBot/utils/helper"
19+
)
20+
21+
const (
22+
loginURL = "https://www.shicimingju.com/cangtoushi/"
23+
searchURL = "https://www.shicimingju.com/cangtoushi/index.html"
24+
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
25+
referer = "https://www.shicimingju.com/cangtoushi/index.html"
26+
prio = 20
27+
)
28+
29+
var (
30+
gCurCookieJar *cookiejar.Jar
31+
engine = control.Register("cangtoushi", &control.Options{
32+
DisableOnDefault: false,
33+
Help: "藏头诗\n" +
34+
"- 藏头诗[xxx]\n- 藏尾诗[xxx]",
35+
})
36+
limit = rate.NewManager(time.Minute, 20)
37+
csrf string
38+
)
39+
40+
func init() {
41+
engine.OnRegex("藏头诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
42+
kw := ctx.State["regex_matched"].([]string)[1]
43+
login()
44+
data, err := search(kw, "7", "0")
45+
if err != nil {
46+
log.Errorln("[cangtoushi]:", err)
47+
}
48+
text := dealHTML(helper.BytesToString(data))
49+
ctx.SendChain(message.Text(text))
50+
})
51+
52+
engine.OnRegex("藏尾诗([\u4E00-\u9FA5]{3,10})").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
53+
kw := ctx.State["regex_matched"].([]string)[1]
54+
login()
55+
data, err := search(kw, "7", "2")
56+
if err != nil {
57+
log.Errorln("[cangtoushi]:", err)
58+
}
59+
text := dealHTML(helper.BytesToString(data))
60+
ctx.SendChain(message.Text(text))
61+
})
62+
}
63+
64+
func login() {
65+
gCurCookieJar, _ = cookiejar.New(nil)
66+
client := &http.Client{
67+
Jar: gCurCookieJar,
68+
}
69+
request, err := http.NewRequest("GET", loginURL, nil)
70+
if err != nil {
71+
log.Errorln("[cangtoushi]:", err)
72+
}
73+
request.Header.Add("User-Agent", ua)
74+
response, err := client.Do(request)
75+
if err != nil {
76+
log.Errorln("[cangtoushi]:", err)
77+
}
78+
data, err := io.ReadAll(response.Body)
79+
if err != nil {
80+
log.Errorln("[cangtoushi]:", err)
81+
}
82+
response.Body.Close()
83+
doc, err := htmlquery.Parse(strings.NewReader(helper.BytesToString(data)))
84+
if err != nil {
85+
log.Errorln("[cangtoushi]:", err)
86+
}
87+
csrf = htmlquery.SelectAttr(htmlquery.FindOne(doc, "//input[@name='_csrf']"), "value")
88+
}
89+
90+
func search(kw, zishu, position string) (data []byte, err error) {
91+
postStr := fmt.Sprintf("_csrf=%s&kw=%s&zishu=%s&position=%s", url.QueryEscape(csrf), url.QueryEscape(kw), zishu, position)
92+
log.Println("postStr:", postStr)
93+
client := &http.Client{
94+
Jar: gCurCookieJar,
95+
}
96+
request, err := http.NewRequest("POST", searchURL, strings.NewReader(postStr))
97+
if err != nil {
98+
log.Errorln("[cangtoushi]:", err)
99+
}
100+
request.Header.Add("Referer", referer)
101+
request.Header.Add("User-Agent", ua)
102+
request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
103+
response, err := client.Do(request)
104+
if err != nil {
105+
log.Errorln("[cangtoushi]:", err)
106+
}
107+
data, err = io.ReadAll(response.Body)
108+
if err != nil {
109+
log.Errorln("[cangtoushi]:", err)
110+
}
111+
response.Body.Close()
112+
return
113+
}
114+
115+
func dealHTML(data string) (text string) {
116+
doc, err := htmlquery.Parse(strings.NewReader(data))
117+
if err != nil {
118+
log.Errorln("[cangtoushi]:", err)
119+
}
120+
text = htmlquery.InnerText(htmlquery.FindOne(doc, "//div[@class='card']/div[@class='card']"))
121+
text = strings.ReplaceAll(text, " ", "")
122+
text = strings.Replace(text, "\n", "", 1)
123+
return text
124+
}

plugin_chouxianghua/chouxianghua.go

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

plugin_funny/laugh.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
)
1515

1616
var (
17-
engine = control.Register("curse", &control.Options{
17+
engine = control.Register("funny", &control.Options{
1818
DisableOnDefault: false,
1919
Help: "讲个笑话\n" +
2020
"- 讲个笑话[@xxx]|讲个笑话[qq号]\n",
@@ -32,9 +32,15 @@ func init() {
3232
name := ctx.State["args"].(string)
3333
if len(ctx.Event.Message) > 1 && ctx.Event.Message[1].Type == "at" {
3434
qq, _ := strconv.ParseInt(ctx.Event.Message[1].Data["qq"], 10, 64)
35-
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("nickname").Str
35+
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("card").String()
36+
if name == "" {
37+
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, qq, false).Get("nickname").String()
38+
}
3639
} else if name == "" {
37-
name = ctx.Event.Sender.NickName
40+
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, ctx.Event.UserID, false).Get("card").String()
41+
if name == "" {
42+
name = ctx.GetGroupMemberInfo(ctx.Event.GroupID, ctx.Event.UserID, false).Get("nickname").String()
43+
}
3844
}
3945
var j joke
4046
err := db.Pick("jokes", &j)

plugin_juejuezi/jiejiezi.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package juejuezi
2+
3+
import (
4+
"fmt"
5+
log "github.com/sirupsen/logrus"
6+
"io"
7+
"net/http"
8+
"strings"
9+
"time"
10+
11+
"github.com/FloatTech/ZeroBot-Plugin/control"
12+
"github.com/tidwall/gjson"
13+
zero "github.com/wdvxdr1123/ZeroBot"
14+
"github.com/wdvxdr1123/ZeroBot/extension/rate"
15+
"github.com/wdvxdr1123/ZeroBot/message"
16+
"github.com/wdvxdr1123/ZeroBot/utils/helper"
17+
)
18+
19+
const (
20+
juejueziURL = "https://www.offjuan.com/api/juejuezi/text"
21+
prio = 15
22+
referer = "https://juejuezi.offjuan.com/"
23+
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
24+
)
25+
26+
var (
27+
engine = control.Register("juejuezi", &control.Options{
28+
DisableOnDefault: false,
29+
Help: "绝绝子生成器\n" +
30+
"- 喝奶茶绝绝子|绝绝子吃饭",
31+
})
32+
limit = rate.NewManager(time.Minute, 20)
33+
)
34+
35+
func init() {
36+
engine.OnRegex("[\u4E00-\u9FA5]{0,10}绝绝子[\u4E00-\u9FA5]{0,10}").SetBlock(true).SetPriority(prio).Handle(func(ctx *zero.Ctx) {
37+
if !limit.Load(ctx.Event.GroupID).Acquire() {
38+
return
39+
}
40+
toDealStr := []rune(strings.ReplaceAll(ctx.ExtractPlainText(), "绝绝子", ""))
41+
if len(toDealStr) < 2 {
42+
ctx.SendChain(message.Reply(ctx.Event.MessageID), message.Text("不要只输入绝绝子"))
43+
} else if len(toDealStr) == 2 {
44+
data, err := juejuezi(string(toDealStr[0]), string(toDealStr[1]))
45+
if err != nil {
46+
ctx.SendChain(message.Text(err))
47+
}
48+
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
49+
} else {
50+
params := ctx.GetWordSlices(string(toDealStr)).Get("slices").Array()
51+
data, err := juejuezi(params[0].String(), params[1].String())
52+
if err != nil {
53+
ctx.SendChain(message.Text(err))
54+
}
55+
ctx.SendChain(message.Text(gjson.Get(helper.BytesToString(data), "text").String()))
56+
}
57+
})
58+
}
59+
60+
func juejuezi(verb, noun string) (data []byte, err error) {
61+
juejueziStr := fmt.Sprintf("{\"verb\":\"%s\",\"noun\":\"%s\"}", verb, noun)
62+
client := &http.Client{}
63+
// 提交请求
64+
request, err := http.NewRequest("POST", juejueziURL, strings.NewReader(juejueziStr))
65+
if err != nil {
66+
log.Errorln("[juejuezi]:", err)
67+
}
68+
request.Header.Add("Referer", referer)
69+
request.Header.Add("User-Agent", ua)
70+
response, err := client.Do(request)
71+
if err != nil {
72+
log.Errorln("[juejuezi]:", err)
73+
}
74+
data, err = io.ReadAll(response.Body)
75+
response.Body.Close()
76+
return
77+
}

plugin_manager/manager.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,10 @@ func init() { // 插件主体
423423
Handle(func(ctx *zero.Ctx) {
424424
if ctx.Event.NoticeType == "group_decrease" {
425425
userid := ctx.Event.UserID
426-
nickname := ctx.GetStrangerInfo(userid, false).Get("nickname").String()
426+
nickname := ctx.GetGroupMemberInfo(ctx.Event.GroupID, userid, false).Get("card").String()
427+
if nickname == "" {
428+
nickname = ctx.GetGroupMemberInfo(ctx.Event.GroupID, userid, false).Get("nickname").String()
429+
}
427430
ctx.SendChain(message.Text(nickname, "(", userid, ")", "离开了我们..."))
428431
}
429432
})

utils/web/http.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ import (
1111
func ReqWith(url string, method string, referer string, ua string) (data []byte, err error) {
1212
client := &http.Client{}
1313
// 提交请求
14-
var reqest *http.Request
15-
reqest, err = http.NewRequest(method, url, nil)
14+
var request *http.Request
15+
request, err = http.NewRequest(method, url, nil)
1616
if err == nil {
1717
// 增加header选项
18-
reqest.Header.Add("Referer", referer)
19-
reqest.Header.Add("User-Agent", ua)
18+
request.Header.Add("Referer", referer)
19+
request.Header.Add("User-Agent", ua)
2020
var response *http.Response
21-
response, err = client.Do(reqest)
21+
response, err = client.Do(request)
2222
if err == nil {
2323
data, err = io.ReadAll(response.Body)
2424
response.Body.Close()

0 commit comments

Comments
 (0)