72 рядки
1.6 KiB
Go
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
|
|
}
|