mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 22:00:11 +08:00
* 优化在两个命令中使用空格分隔的体验 - fortune的设置底图功能 - b14的加密功能 * 优化四个插件中使用空格分隔的体验 - 加密 - 哔哩哔哩推送 - 藏头诗 - 运势 * 优化并修正了上一个commit - 加上了因为复制粘贴疏忽又没有注意测试遗漏的`?` - 调整藏头诗和加密的正则触发,使其不必多此一举 - 删去了未被发现的测试代码 * - 删去了遗漏的Trim * 优化了更多插件中使用空格的体验 - 优化了music bilibili image_finder 中使用空格的体验 - 补上了plugin_bilibili中未实现的vup开头触发 - 为plugin_bilibili_parse输出的消息加上一个换行符,优化排版
67 lines
2.7 KiB
Go
67 lines
2.7 KiB
Go
// Package bilibiliparse b站视频链接解析
|
||
package bilibiliparse
|
||
|
||
import (
|
||
"regexp"
|
||
"strings"
|
||
|
||
"github.com/FloatTech/zbputils/control"
|
||
"github.com/antchfx/htmlquery"
|
||
log "github.com/sirupsen/logrus"
|
||
zero "github.com/wdvxdr1123/ZeroBot"
|
||
"github.com/wdvxdr1123/ZeroBot/message"
|
||
|
||
"github.com/FloatTech/ZeroBot-Plugin/order"
|
||
)
|
||
|
||
var (
|
||
bilibiliRe = "https://www.bilibili.com/video/av[0-9]+|https://www.bilibili.com/video/BV[0-9a-zA-Z]+|https://b23.tv/[0-9a-zA-Z]+"
|
||
validRe = "https://www.bilibili.com/video/(BV[0-9a-zA-Z]+)"
|
||
)
|
||
|
||
func init() {
|
||
engine := control.Register("bilibiliparse", order.PrioBiliBiliParse, &control.Options{
|
||
DisableOnDefault: false,
|
||
Help: "b站视频链接解析\n" +
|
||
"- https://www.bilibili.com/video/BV1xx411c7BF | https://www.bilibili.com/video/av1605 | https://b23.tv/I8uzWCA",
|
||
})
|
||
|
||
engine.OnRegex(bilibiliRe).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||
bilibiliURL := ctx.State["regex_matched"].([]string)[0]
|
||
m := parseURL(bilibiliURL)
|
||
if len(m) != 0 {
|
||
ctx.Send(m)
|
||
}
|
||
})
|
||
}
|
||
|
||
func parseURL(bilibiliURL string) (m message.Message) {
|
||
doc, err := htmlquery.LoadURL(bilibiliURL)
|
||
if err != nil {
|
||
log.Errorln("[bilibiliparse]:访问的链接为", bilibiliURL, ",错误为", err)
|
||
}
|
||
videoURL := htmlquery.FindOne(doc, "/html/head/meta[@itemprop='url']").Attr[2].Val
|
||
re := regexp.MustCompile(validRe)
|
||
if !re.MatchString(videoURL) {
|
||
return
|
||
}
|
||
bv := re.FindStringSubmatch(videoURL)[1]
|
||
title := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/h1/span/text()").Data
|
||
m = append(m, message.Text(title+"\n"))
|
||
view := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[@class='view']/text()").Data
|
||
dm := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[@class='dm']/text()").Data
|
||
m = append(m, message.Text(view+dm+"\n"))
|
||
t := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[3]/text()").Data
|
||
m = append(m, message.Text(t))
|
||
image := htmlquery.FindOne(doc, "/html/head/meta[@itemprop='image']").Attr[2].Val
|
||
m = append(m, message.Image(image))
|
||
like := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='like']/text()").Data
|
||
coin := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='coin']/text()").Data
|
||
m = append(m, message.Text("\n点赞:", strings.TrimSpace(like)+"投币:", strings.TrimSpace(coin)+"\n"))
|
||
collect := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='collect']/text()").Data
|
||
share := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='share']/text()").Data
|
||
m = append(m, message.Text("收藏:", strings.TrimSpace(collect)+"分享:", strings.TrimSpace(share)+"\n"))
|
||
m = append(m, message.Text(bv))
|
||
return
|
||
}
|