package bot import ( "context" "fmt" "log" "github.com/go-telegram/bot" "github.com/go-telegram/bot/models" "pievr/internal/gemini" ) type Bot struct { b *bot.Bot geminiCli gemini.Client } func New(token string, geminiCli gemini.Client) (*Bot, error) { myBot := &Bot{ geminiCli: geminiCli, } opts := []bot.Option{ bot.WithDefaultHandler(myBot.handler), } b, err := bot.New(token, opts...) if err != nil { return nil, fmt.Errorf("failed to create telegram bot: %w", err) } myBot.b = b return myBot, nil } func (s *Bot) Start(ctx context.Context) { log.Println("Telegram bot is starting...") s.b.Start(ctx) } func (s *Bot) handler(ctx context.Context, b *bot.Bot, update *models.Update) { if update.Message == nil || update.Message.Text == "" { return } userMsg := update.Message.Text chatID := update.Message.Chat.ID log.Printf("Received message from %d: %s", chatID, userMsg) // Send prompt to Gemini (via interface) reply, err := s.geminiCli.Generate(ctx, userMsg) if err != nil { log.Printf("Failed to generate response from Gemini: %v", err) reply = "Извините, произошла ошибка при обращении к LLM." } _, err = b.SendMessage(ctx, &bot.SendMessageParams{ ChatID: chatID, Text: reply, }) if err != nil { log.Printf("Failed to send telegram message: %v", err) } }