mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-18 13:52:07 +08:00
91 lines
2.2 KiB
Go
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
|
|
}
|