From 0e2adaf74e9ab71701f2c28d566473bd3480fc77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Tue, 3 Feb 2026 21:22:14 +0500 Subject: [PATCH] Improve RunSend to track sent and failed items --- internal/send/send.go | 66 +++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/internal/send/send.go b/internal/send/send.go index 0ee2850..e1f23c0 100644 --- a/internal/send/send.go +++ b/internal/send/send.go @@ -1,6 +1,7 @@ package send import ( + "fmt" "log" "ssender/internal/models" @@ -9,40 +10,69 @@ import ( ) func RunSend(senditems *models.SendItems, config models.Config) error { - for _, v := range senditems.ItemList { + failedItems := make([]models.Item, 0) + + // Создаем бота Telegram один раз, если отправка включена + var bot *tgbotapi.BotAPI + if config.Telegram.Send { + var err error + bot, err = tgbotapi.NewBotAPI(config.Telegram.Token) + if err != nil { + return err + } + bot.Debug = config.Telegram.SendDebug + } + + // Создаем клиент VK один раз, если отправка включена + var vk *api.VK + if config.VK.Send { + vk = api.NewVK(config.VK.Token) + } + + for i, v := range senditems.ItemList { + itemSent := false + log.Printf("Processing item %d: %s", i+1, v.Title) + if config.Telegram.Send { log.Println("Send to telegram") - bot, err := tgbotapi.NewBotAPI(config.Telegram.Token) - if err != nil { - return err - } - bot.Debug = config.Telegram.SendDebug - - // s := "" + string(v.Title) + "\n" + html.UnescapeString(string(v.Description)) + - // "\nhttps://t.me/iv?url=" + v.Link + "&rhash=da76512d0ff2a2" + - // "\n\nСсылка на пост: " + v.Link msg := tgbotapi.NewMessage(config.Telegram.ChatId, v.Link) msg.ParseMode = "Html" - _, err = bot.Send(msg) + _, err := bot.Send(msg) if err != nil { - return err - + log.Printf("Failed to send to Telegram: %v", err) + } else { + log.Println("Sended to telegram") + itemSent = true } - log.Println("Sended to telegram") } + if config.VK.Send { log.Println("Send to VK") - vk := api.NewVK(config.VK.Token) _, err := vk.WallPost(api.Params{ "owner_id": config.VK.OwnerId, "attachments": v.Link, }) if err != nil { - return err + log.Printf("Failed to send to VK: %v", err) + } else { + log.Println("Sended to VK") + itemSent = true } - log.Println("Sended to VK") } - + + if !itemSent { + failedItems = append(failedItems, v) + log.Printf("Item %d failed to send: %s", i+1, v.Title) + } else { + log.Printf("Item %d successfully sent: %s", i+1, v.Title) + } + } + + if len(failedItems) > 0 { + log.Printf("Failed to send %d items out of %d", len(failedItems), len(senditems.ItemList)) + return fmt.Errorf("failed to send %d items", len(failedItems)) } + + log.Printf("Successfully sent %d items", len(senditems.ItemList)) return nil }