Split long messages when send to telegram
This commit is contained in:
@@ -6,6 +6,10 @@ import (
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||
)
|
||||
|
||||
const (
|
||||
TextLengthLimit = 4000
|
||||
)
|
||||
|
||||
type TelegramMessageSender struct {
|
||||
bot *tgbotapi.BotAPI
|
||||
logger *slog.Logger
|
||||
@@ -24,6 +28,32 @@ func NewTelegramMessageSender(botToken string, logger *slog.Logger) (*TelegramMe
|
||||
}
|
||||
|
||||
func (s *TelegramMessageSender) Send(text string, chatId int64, replyToMessageId *int) error {
|
||||
// If message is short enough, send it directly
|
||||
if len([]rune(text)) <= TextLengthLimit {
|
||||
return s.sendSingleMessage(text, chatId, replyToMessageId)
|
||||
}
|
||||
|
||||
// Split long message into parts
|
||||
parts := s.splitMessageByWords(text, TextLengthLimit)
|
||||
|
||||
// Send each part
|
||||
for i, part := range parts {
|
||||
var replyId *int
|
||||
// Only use replyToMessageId for the first part
|
||||
if i == 0 {
|
||||
replyId = replyToMessageId
|
||||
}
|
||||
err := s.sendSingleMessage(part, chatId, replyId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// sendSingleMessage sends a single message
|
||||
func (s *TelegramMessageSender) sendSingleMessage(text string, chatId int64, replyToMessageId *int) error {
|
||||
resultMsg := tgbotapi.NewMessage(chatId, text)
|
||||
if replyToMessageId != nil {
|
||||
resultMsg.ReplyToMessageID = *replyToMessageId
|
||||
|
Reference in New Issue
Block a user