feat: 哔哩哔哩cookie过期告警
This commit is contained in:
@@ -36,6 +36,8 @@
|
||||
"owner": "",
|
||||
"repos": [""],
|
||||
"token": "ghp_xxxx"
|
||||
}
|
||||
},
|
||||
"bili_msg": "xxx", // 哔哩哔哩动态的附加消息
|
||||
"bili_warn_address": "" // 哔哩哔哩cookie过期发送告警的邮件地址
|
||||
}
|
||||
```
|
||||
|
||||
+3
-1
@@ -19,5 +19,7 @@
|
||||
"owner": "",
|
||||
"repos": [""],
|
||||
"token": "ghp_xxxx"
|
||||
}
|
||||
},
|
||||
"bili_msg": "摇篮系统测试",
|
||||
"bili_warn_address": ""
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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("登录请求邮件已发送")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user