Q58Bot/core/functions.go
2024-09-18 01:27:32 +08:00

91 lines
2.2 KiB
Go

package core
import (
"fmt"
"strings"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
// SendLongMessage sends a long message by splitting it into multiple messages if necessary
// SendLongMessage sends a long message by splitting it into multiple messages if necessary
func SendLongMessage(bot *tgbotapi.BotAPI, chatID int64, prefix string, items []string) error {
const maxMessageLength = 4000 // Leave some room for Telegram's message limit
message := prefix + "\n"
for i, item := range items {
newLine := fmt.Sprintf("%d. %s\n", i+1, item)
if len(message)+len(newLine) > maxMessageLength {
msg := tgbotapi.NewMessage(chatID, message)
_, err := bot.Send(msg)
if err != nil {
return err
}
message = ""
}
message += newLine
}
if message != "" {
msg := tgbotapi.NewMessage(chatID, message)
_, err := bot.Send(msg)
if err != nil {
return err
}
}
return nil
}
// SendLongMessageWithoutNumbering sends a long message without numbering the items
func SendLongMessageWithoutNumbering(bot *tgbotapi.BotAPI, chatID int64, prefix string, items []string) error {
const maxMessageLength = 4000 // Leave some room for Telegram's message limit
message := prefix + "\n"
for _, item := range items {
newLine := item + "\n"
if len(message)+len(newLine) > maxMessageLength {
msg := tgbotapi.NewMessage(chatID, message)
_, err := bot.Send(msg)
if err != nil {
return err
}
message = ""
}
message += newLine
}
if message != "" {
msg := tgbotapi.NewMessage(chatID, message)
_, err := bot.Send(msg)
if err != nil {
return err
}
}
return nil
}
// JoinLongMessage joins items into a single long message, splitting it if necessary
func JoinLongMessage(prefix string, items []string) []string {
const maxMessageLength = 4000 // Leave some room for Telegram's message limit
var messages []string
message := prefix + "\n"
for i, item := range items {
newLine := fmt.Sprintf("%d. %s\n", i+1, item)
if len(message)+len(newLine) > maxMessageLength {
messages = append(messages, strings.TrimSpace(message))
message = ""
}
message += newLine
}
if message != "" {
messages = append(messages, strings.TrimSpace(message))
}
return messages
}