Файли
2026-11-08 03:46:11 +00:00

72 рядки
1.6 KiB
Go

package shared
import (
"context"
"fmt"
"github.com/mymmrac/telego"
tu "github.com/mymmrac/telego/telegoutil"
)
// Sender is the Telegram transport shared by all features.
type Sender struct {
api *telego.Bot
}
func NewSender(api *telego.Bot) *Sender {
return &Sender{api: api}
}
func (s *Sender) Send(
ctx context.Context, chatID int64, text string, keyboard telego.ReplyMarkup,
) error {
_, err := s.api.SendMessage(ctx, sendParams(chatID, text, keyboard))
if err != nil {
return fmt.Errorf("send message: %w", err)
}
return nil
}
func (s *Sender) EditOrSend(
ctx context.Context, chatID int64, messageID int, text string, keyboard *telego.InlineKeyboardMarkup,
) error {
if messageID == 0 {
return s.Send(ctx, chatID, text, keyboard)
}
_, err := s.api.EditMessageText(ctx, editParams(chatID, messageID, text, keyboard))
if err != nil {
return fmt.Errorf("edit message: %w", err)
}
return nil
}
// Only set reply_markup when a keyboard exists; Telegram rejects null.
func sendParams(
chatID int64, text string, keyboard telego.ReplyMarkup,
) *telego.SendMessageParams {
params := &telego.SendMessageParams{
ChatID: tu.ID(chatID),
Text: FitMessage(text),
ParseMode: telego.ModeHTML,
}
if keyboard != nil {
params.ReplyMarkup = keyboard
}
return params
}
func editParams(
chatID int64, messageID int, text string, keyboard *telego.InlineKeyboardMarkup,
) *telego.EditMessageTextParams {
params := &telego.EditMessageTextParams{
ChatID: tu.ID(chatID),
MessageID: messageID,
Text: FitMessage(text),
ParseMode: telego.ModeHTML,
}
if keyboard != nil {
params.ReplyMarkup = keyboard
}
return params
}