From 36717a10d4bcf207a38b937a6df09bac872c9f1d Mon Sep 17 00:00:00 2001 From: HugeFrog24 <62775760+HugeFrog24@users.noreply.github.com> Date: Sun, 20 Oct 2024 17:17:21 +0200 Subject: [PATCH] MVP --- bot.go | 32 +++++++++++++++++++++++++++----- config.go | 7 +++++++ config/default.json | 1 + go.mod | 2 +- handlers.go | 2 +- models.go | 1 + 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/bot.go b/bot.go index 64bb25a..76f9fdd 100755 --- a/bot.go +++ b/bot.go @@ -207,8 +207,9 @@ func initTelegramBot(token string, handleUpdate func(ctx context.Context, tgBot // Returns an error if sending the message fails. func (b *Bot) sendResponse(ctx context.Context, chatID int64, text string, businessConnectionID string) error { params := &bot.SendMessageParams{ - ChatID: chatID, - Text: text, + ChatID: chatID, + Text: text, + ParseMode: models.ParseModeMarkdown, } if businessConnectionID != "" { @@ -225,7 +226,7 @@ func (b *Bot) sendResponse(ctx context.Context, chatID int64, text string, busin } // sendStats sends the bot statistics to the specified chat. -func (b *Bot) sendStats(ctx context.Context, chatID int64, businessConnectionID string) { +func (b *Bot) sendStats(ctx context.Context, chatID int64, userID int64, username string, businessConnectionID string) { totalUsers, totalMessages, err := b.getStats() if err != nil { fmt.Printf("Error fetching stats: %v\n", err) @@ -233,8 +234,29 @@ func (b *Bot) sendStats(ctx context.Context, chatID int64, businessConnectionID return } - statsMessage := fmt.Sprintf("📊 **Bot Statistics:**\n\n- Total Users: %d\n- Total Messages: %d", totalUsers, totalMessages) - b.sendResponse(ctx, chatID, statsMessage, businessConnectionID) + // Do NOT manually escape hyphens here + statsMessage := fmt.Sprintf( + "📊 *Bot Statistics:*\n\n"+ + "\\- Total Users: %d\n"+ + "\\- Total Messages: %d", + totalUsers, + totalMessages, + ) + + // Store the user's /stats command + userMessage := b.createMessage(chatID, userID, username, "user", "/stats", true) + if err := b.storeMessage(userMessage); err != nil { + log.Printf("Error storing user message: %v", err) + } + + // Send and store the bot's response + if err := b.sendResponse(ctx, chatID, statsMessage, businessConnectionID); err != nil { + log.Printf("Error sending stats message: %v", err) + } + assistantMessage := b.createMessage(chatID, 0, "", "assistant", statsMessage, false) + if err := b.storeMessage(assistantMessage); err != nil { + log.Printf("Error storing assistant message: %v", err) + } } // getStats retrieves the total number of users and messages from the database. diff --git a/config.go b/config.go index c02496d..0ff9436 100755 --- a/config.go +++ b/config.go @@ -18,6 +18,7 @@ type BotConfig struct { TempBanDuration string `json:"temp_ban_duration"` Model anthropic.Model `json:"model"` // Changed from string to anthropic.Model SystemPrompts map[string]string `json:"system_prompts"` + Active bool `json:"active"` // New field to control bot activity } // Custom unmarshalling to handle anthropic.Model @@ -56,6 +57,12 @@ func loadAllConfigs(dir string) ([]BotConfig, error) { return nil, fmt.Errorf("failed to load config %s: %w", configPath, err) } + // Skip inactive bots + if !config.Active { + fmt.Printf("Skipping inactive bot: %s\n", config.ID) + continue + } + // Validate that ID is present if config.ID == "" { return nil, fmt.Errorf("config %s is missing 'id' field", configPath) diff --git a/config/default.json b/config/default.json index b9d0708..9df35f7 100755 --- a/config/default.json +++ b/config/default.json @@ -1,5 +1,6 @@ { "id": "default_bot", + "active": false, "telegram_token": "YOUR_TELEGRAM_BOT_TOKEN", "memory_size": 10, "messages_per_hour": 20, diff --git a/go.mod b/go.mod index 8ee2d93..a3c2ad7 100755 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/HugeFrog24/thatsky-telegram-bot +module github.com/HugeFrog24/go-telegram-bot go 1.23.2 diff --git a/handlers.go b/handlers.go index 52b1ad9..a7d9473 100755 --- a/handlers.go +++ b/handlers.go @@ -40,7 +40,7 @@ func (b *Bot) handleUpdate(ctx context.Context, tgBot *bot.Bot, update *models.U command := strings.TrimSpace(message.Text[entity.Offset : entity.Offset+entity.Length]) switch command { case "/stats": - b.sendStats(ctx, chatID, businessConnectionID) + b.sendStats(ctx, chatID, userID, message.From.Username, businessConnectionID) return } } diff --git a/models.go b/models.go index cec57fe..f518754 100755 --- a/models.go +++ b/models.go @@ -24,6 +24,7 @@ type ConfigModel struct { TempBanDuration string `json:"temp_ban_duration"` SystemPrompts string `json:"system_prompts"` // Consider JSON string or separate table TelegramToken string `json:"telegram_token"` + Active bool `json:"active"` } type Message struct {