Browse Source

Improve RunSend to track sent and failed items

develop
parent
commit
0e2adaf74e
  1. 66
      internal/send/send.go

66
internal/send/send.go

@ -1,6 +1,7 @@
package send package send
import ( import (
"fmt"
"log" "log"
"ssender/internal/models" "ssender/internal/models"
@ -9,40 +10,69 @@ import (
) )
func RunSend(senditems *models.SendItems, config models.Config) error { 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 { if config.Telegram.Send {
log.Println("Send to telegram") log.Println("Send to telegram")
bot, err := tgbotapi.NewBotAPI(config.Telegram.Token)
if err != nil {
return err
}
bot.Debug = config.Telegram.SendDebug
// s := "<b>" + string(v.Title) + "</b>\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 := tgbotapi.NewMessage(config.Telegram.ChatId, v.Link)
msg.ParseMode = "Html" msg.ParseMode = "Html"
_, err = bot.Send(msg) _, err := bot.Send(msg)
if err != nil { 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 { if config.VK.Send {
log.Println("Send to VK") log.Println("Send to VK")
vk := api.NewVK(config.VK.Token)
_, err := vk.WallPost(api.Params{ _, err := vk.WallPost(api.Params{
"owner_id": config.VK.OwnerId, "owner_id": config.VK.OwnerId,
"attachments": v.Link, "attachments": v.Link,
}) })
if err != nil { 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 return nil
} }

Loading…
Cancel
Save