From 791f411596c99bcd05fc9056ffd3f4c5f7d842f2 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Thu, 17 Jul 2025 14:33:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=20RSS=20?= =?UTF-8?q?=E8=AE=A2=E9=98=85=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20TestRss=20=E5=87=BD=E6=95=B0=E4=BB=A5=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=96=B0=20RSS=EF=BC=8C=E4=BF=AE=E6=94=B9=20?= =?UTF-8?q?SubscribeToFeed=20=E5=87=BD=E6=95=B0=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E4=BB=A5=E5=8C=85=E5=90=AB=E8=AE=A2=E9=98=85=E6=A0=87=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=BC=BA=E4=BB=A3=E7=A0=81=E5=8F=AF=E8=AF=BB?= =?UTF-8?q?=E6=80=A7=E5=92=8C=E5=8A=9F=E8=83=BD=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/rss/rss.go | 40 ++++++++++++++-------------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/handler/rss/rss.go b/handler/rss/rss.go index ef3bc38..d787882 100644 --- a/handler/rss/rss.go +++ b/handler/rss/rss.go @@ -22,24 +22,12 @@ func init() { handler.RegisterAtHandler("我的订阅", MySubscribed, constants.LEVEL_USER) handler.RegisterAtHandler("退订", Unsubscribe, constants.LEVEL_USER) //test - handler.RegisterHandler("test_rss", TestRss, constants.LEVEL_USER) + handler.RegisterHandler("test_rss", TestRss, constants.LEVEL_ADMIN) } func TestRss(msg model.Message) (reply *model.Reply) { - rssUrl := util.SplitN(msg.StructuredMsg[0].(*qq_message.TextMessage).Data.Text, 2)[1] - title, items, err := ParseFeed(rssUrl) - if err != nil { - return &model.Reply{ - ReplyMsg: "解析RSS源失败: " + err.Error(), - ReferOriginMsg: true, - FromMsg: msg, - } - } - return &model.Reply{ - ReplyMsg: fmt.Sprintf("解析RSS源成功: %s\n%d 个条目\n%v", title, len(items), items[0]), - ReferOriginMsg: true, - FromMsg: msg, - } + go CheckNewRss() + return nil } func Subscribe(msg model.Message) (reply *model.Reply) { @@ -51,8 +39,8 @@ func Subscribe(msg model.Message) (reply *model.Reply) { urls := regexp.MustCompile(`(?i)(?:https?://)?(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(?:/[^\s]*)?\.xml\b`).FindAllString(data.(*qq_message.TextMessage).Data.Text, -1) if len(urls) > 0 { for _, url := range urls { - if err := SubscribeToFeed(url, msg.UserId, msg.GroupInfo.GroupId); err == nil { - subscribedFeeds = append(subscribedFeeds, url) + if title, err := SubscribeToFeed(url, msg.UserId, msg.GroupInfo.GroupId); err == nil { + subscribedFeeds = append(subscribedFeeds, title) } } } @@ -61,7 +49,7 @@ func Subscribe(msg model.Message) (reply *model.Reply) { if len(subscribedFeeds) > 0 { return &model.Reply{ - ReplyMsg: fmt.Sprintf("成功订阅 %d 个RSS源", len(subscribedFeeds)), + ReplyMsg: fmt.Sprintf("成功订阅 %d 个RSS源:%s", len(subscribedFeeds), strings.Join(subscribedFeeds, "\n")), ReferOriginMsg: true, FromMsg: msg, } @@ -75,7 +63,7 @@ func Subscribe(msg model.Message) (reply *model.Reply) { } // SubscribeToFeed 订阅RSS源 -func SubscribeToFeed(feedURL string, userID int64, groupID int64) error { +func SubscribeToFeed(feedURL string, userID int64, groupID int64) (string, error) { db := sqlite3.GetGormDB().Begin() defer db.Rollback() @@ -87,7 +75,7 @@ func SubscribeToFeed(feedURL string, userID int64, groupID int64) error { //检测rss源是否有效 if err := CheckRssFeed(feedURL); err != nil { - return fmt.Errorf("RSS源无效: %v", err) + return "", fmt.Errorf("RSS源无效: %v", err) } // 检查RSS源是否已存在 @@ -103,7 +91,7 @@ func SubscribeToFeed(feedURL string, userID int64, groupID int64) error { LastUpdate: time.Now(), } if err := db.Create(&newFeed).Error; err != nil { - return fmt.Errorf("创建RSS源失败: %v", err) + return "", fmt.Errorf("创建RSS源失败: %v", err) } feedID = newFeed.ID } else { @@ -114,13 +102,13 @@ func SubscribeToFeed(feedURL string, userID int64, groupID int64) error { var existingSubscribe RssSubscribe result = db.Where("feed_id = ? AND group_id = ?", feedID, groupID).First(&existingSubscribe) if result.Error == nil { - return fmt.Errorf("该群已订阅过此RSS源") + return "", fmt.Errorf("该群已订阅过此RSS源") } //获取最新文章hash - _, items, err := ParseFeed(feedURL) + title, items, err := ParseFeed(feedURL) if err != nil { - return err + return "", err } // 创建订阅关系 @@ -130,9 +118,9 @@ func SubscribeToFeed(feedURL string, userID int64, groupID int64) error { LastItemHash: items[0].Hash, } if err := db.Create(&newSubscribe).Error; err != nil { - return fmt.Errorf("创建订阅关系失败: %v", err) + return "", fmt.Errorf("创建订阅关系失败: %v", err) } - return db.Commit().Error + return title, db.Commit().Error } func MySubscribed(msg model.Message) (reply *model.Reply) {