61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package sender
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"git.faercol.me/faercol/telegram-notifier/notifier/config"
|
|
"git.faercol.me/faercol/telegram-notifier/notifier/logger"
|
|
"github.com/ahugues/go-telegram-api/bot"
|
|
"github.com/ahugues/go-telegram-api/structs"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type Sender struct {
|
|
ctx context.Context
|
|
cancel context.CancelFunc
|
|
tgBot bot.Bot
|
|
tgChatID int64
|
|
timeGetter func() time.Time
|
|
errChan chan error
|
|
exitChan chan struct{}
|
|
msgChan <-chan string
|
|
logger *logrus.Logger
|
|
}
|
|
|
|
func (s *Sender) Run(ctx context.Context) {
|
|
s.ctx, s.cancel = context.WithCancel(ctx)
|
|
for {
|
|
select {
|
|
case msg := <-s.msgChan:
|
|
s.logger.Debug("Sending a new message")
|
|
s.tgBot.SendMessage(s.ctx, s.tgChatID, msg, structs.FormattingMarkdownV2)
|
|
case <-s.ctx.Done():
|
|
s.logger.Info("Stopping Telegram sender")
|
|
s.exitChan <- struct{}{}
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *Sender) ErrChan() <-chan error {
|
|
return s.errChan
|
|
}
|
|
|
|
func (s *Sender) Exit() <-chan struct{} {
|
|
return s.exitChan
|
|
}
|
|
|
|
func New(config *config.Config, msgChan <-chan string) *Sender {
|
|
tgBot := bot.New(config.Telegram.Token)
|
|
|
|
return &Sender{
|
|
tgBot: tgBot,
|
|
tgChatID: config.Telegram.ChannelID,
|
|
timeGetter: time.Now,
|
|
errChan: make(chan error, 10),
|
|
exitChan: make(chan struct{}, 1),
|
|
logger: &logger.L,
|
|
msgChan: msgChan,
|
|
}
|
|
}
|