75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
package interfaces
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"time"
|
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
|
"github.com/paramah/gw_telegram/internal/application/dto"
|
|
"github.com/paramah/gw_telegram/internal/application/usecase"
|
|
)
|
|
|
|
type TelegramHandler struct {
|
|
textUC *usecase.HandleTextMessage
|
|
voiceUC *usecase.HandleVoiceMessage
|
|
logger *slog.Logger
|
|
}
|
|
|
|
func NewTelegramHandler(
|
|
textUC *usecase.HandleTextMessage,
|
|
voiceUC *usecase.HandleVoiceMessage,
|
|
logger *slog.Logger,
|
|
) *TelegramHandler {
|
|
return &TelegramHandler{textUC: textUC, voiceUC: voiceUC, logger: logger}
|
|
}
|
|
|
|
func (h *TelegramHandler) Handle(ctx context.Context, update tgbotapi.Update) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
h.logger.ErrorContext(ctx, "panic in update handler", "panic", r)
|
|
}
|
|
}()
|
|
|
|
if update.Message == nil {
|
|
return
|
|
}
|
|
|
|
msg := update.Message
|
|
|
|
switch {
|
|
case msg.Voice != nil:
|
|
in := dto.IncomingMessageDTO{
|
|
MessageID: int64(msg.MessageID),
|
|
ChatID: msg.Chat.ID,
|
|
UserID: msg.From.ID,
|
|
Username: msg.From.UserName,
|
|
FirstName: msg.From.FirstName,
|
|
LastName: msg.From.LastName,
|
|
VoiceFileID: msg.Voice.FileID,
|
|
IsVoice: true,
|
|
Timestamp: time.Unix(int64(msg.Date), 0),
|
|
Language: msg.From.LanguageCode,
|
|
}
|
|
if err := h.voiceUC.Execute(ctx, in); err != nil {
|
|
h.logger.ErrorContext(ctx, "voice handler error", "error", err, "user_id", msg.From.ID)
|
|
}
|
|
|
|
case msg.Text != "":
|
|
in := dto.IncomingMessageDTO{
|
|
MessageID: int64(msg.MessageID),
|
|
ChatID: msg.Chat.ID,
|
|
UserID: msg.From.ID,
|
|
Username: msg.From.UserName,
|
|
FirstName: msg.From.FirstName,
|
|
LastName: msg.From.LastName,
|
|
Text: msg.Text,
|
|
Timestamp: time.Unix(int64(msg.Date), 0),
|
|
Language: msg.From.LanguageCode,
|
|
}
|
|
if err := h.textUC.Execute(ctx, in); err != nil {
|
|
h.logger.ErrorContext(ctx, "text handler error", "error", err, "user_id", msg.From.ID)
|
|
}
|
|
}
|
|
}
|