feat: 哔哩哔哩cookie过期告警

This commit is contained in:
mei
2025-10-06 20:23:46 +08:00
parent 5e7af981ad
commit 5566c929c8
5 changed files with 117 additions and 2 deletions
+3 -1
View File
@@ -36,6 +36,8 @@
"owner": "",
"repos": [""],
"token": "ghp_xxxx"
}
},
"bili_msg": "xxx", // 哔哩哔哩动态的附加消息
"bili_warn_address": "" // 哔哩哔哩cookie过期发送告警的邮件地址
}
```
+3 -1
View File
@@ -19,5 +19,7 @@
"owner": "",
"repos": [""],
"token": "ghp_xxxx"
}
},
"bili_msg": "摇篮系统测试",
"bili_warn_address": ""
}
+1
View File
@@ -19,6 +19,7 @@ type Config struct {
MailContent string `json:"mail_content"`
GithubConfig GithubConfig `json:"github_config"`
BiliMsg string `json:"bili_msg"`
BiliWarnAddress string `json:"bili_warn_address"`
}
type SMTPConfig struct {
+95
View File
@@ -144,3 +144,98 @@ func SendBili(biliClient *bilibili.Client) {
log.Println("动态发送最终失败,已达到最大重试次数")
}
// 检查cookie有效性
func CheckCookieValidity(biliClient *bilibili.Client) {
// 读取存储的cookie文件
if _, err := os.Stat("cookies.txt"); os.IsNotExist(err) {
log.Println("cookie文件不存在,需要重新登录")
triggerLoginRequest(biliClient)
return
}
cookiesBytes, err := os.ReadFile("cookies.txt")
if err != nil {
log.Printf("读取cookie文件失败: %v", err)
triggerLoginRequest(biliClient)
return
}
cookiesString := string(cookiesBytes)
// 检查cookie是否即将过期(提前1天提醒)
if isCookiesExpiringSoon(cookiesString) {
log.Println("cookie即将过期,需要重新登录")
triggerLoginRequest(biliClient)
}
}
// 检查cookie是否即将过期(提前1天)
func isCookiesExpiringSoon(cookiesString string) bool {
lines := strings.Split(cookiesString, "\n")
for _, line := range lines {
if strings.Contains(line, "Expires=") {
// 提取过期时间字符串
expireStr := ""
parts := strings.Split(line, ";")
for _, part := range parts {
part = strings.TrimSpace(part)
if strings.HasPrefix(part, "Expires=") {
expireStr = strings.TrimPrefix(part, "Expires=")
break
}
}
if expireStr != "" {
// 解析过期时间
expireTime, err := http.ParseTime(expireStr)
if err != nil {
log.Printf("解析过期时间失败: %v", err)
return true // 如果解析失败,认为需要重新登录
}
// 检查是否即将过期(提前1天)
if time.Now().Add(24 * time.Hour).After(expireTime) {
return true // 即将过期
}
}
}
}
return false
}
// 触发登录请求
func triggerLoginRequest(biliClient *bilibili.Client) {
// 获取配置
config, err := configs.GetConfig()
if err != nil {
log.Printf("获取配置文件失败: %v", err)
return
}
// 生成新的二维码
qrCode, err := biliClient.GetQRCode()
if err != nil {
log.Printf("获取二维码失败: %v", err)
return
}
// 在命令行打印二维码
log.Println("需要重新登录哔哩哔哩")
qrCode.Print()
// 通过邮件发送登录请求
emailTitle := "B站登录请求 - Cookie即将过期"
emailMsg := "您的B站cookie即将过期,请尽快重启摇篮系统进行登陆,请尽快完成登录操作。"
// 发送邮件通知
if config.BiliWarnAddress != "" {
err = sendMailMsg(config.BiliWarnAddress, emailMsg, emailTitle)
if err != nil {
log.Printf("发送登录邮件失败: %v", err)
} else {
log.Println("登录请求邮件已发送")
}
}
}
+15
View File
@@ -13,6 +13,7 @@ import (
var timer *time.Timer
var duration time.Duration
var biliClient *bilibili.Client
var cookieCheckTimer *time.Ticker
func init() {
config, err := configs.GetConfig()
@@ -35,6 +36,7 @@ func init() {
// 初始化bilibili客户端
biliClient = bilibili.New()
initBilibili()
startCookieChecker() // 启动定期检查cookie有效性
}
func trigger() {
@@ -78,4 +80,17 @@ func initBilibili() {
} else {
log.Println("使用已存储的有效cookie登录")
}
}
// 启动cookie定期检查
func startCookieChecker() {
// 每小时检查一次cookie有效性
cookieCheckTimer = time.NewTicker(1 * time.Hour)
go func() {
for {
<-cookieCheckTimer.C
internal.CheckCookieValidity(biliClient)
}
}()
}