diff --git a/internal/bot/handlers.go b/internal/bot/handlers.go index 3d0b57e..2a637b9 100644 --- a/internal/bot/handlers.go +++ b/internal/bot/handlers.go @@ -298,6 +298,8 @@ func (h *Handler) HandleCallback(ctx context.Context, cb *models.CallbackQuery) h.leagueToggleCallback(ctx, chatID, msgID, cb.ID) case "reporttoggle": h.reportToggleCallback(ctx, chatID, msgID, cb.ID) + case "username": + h.usernameCallback(ctx, chatID, msgID, cb.ID) case "currency": h.currencyCallback(ctx, chatID, msgID, cb.ID) case "setrate": diff --git a/internal/bot/league.go b/internal/bot/league.go index 983c244..689d8b7 100644 --- a/internal/bot/league.go +++ b/internal/bot/league.go @@ -40,6 +40,9 @@ func (h *Handler) buildLeagueText(orderBy LeagueSortOption) string { for i, e := range entries { rank := i + 1 name := e.Username + if name == "" { + name = "Anonymous" + } b.WriteString(fmt.Sprintf("%d %s\n", rank, name)) b.WriteString(fmt.Sprintf(" XP:%d Lv:%d S:%d %.1fh\n", e.XP, e.Level, e.Streak, e.TotalHours)) } diff --git a/internal/bot/settings.go b/internal/bot/settings.go index ce1f600..2a103a4 100644 --- a/internal/bot/settings.go +++ b/internal/bot/settings.go @@ -209,7 +209,10 @@ func (h *Handler) buildSettingsKeyboard(user *db.User, st *db.UserSettings, brea {Text: fmt.Sprintf("League: %s", leagueStatus), CallbackData: "leaguetoggle"}, }, { + {Text: fmt.Sprintf("Username: %s", user.Username), CallbackData: "username"}, {Text: fmt.Sprintf("Currency: %s", st.Currency), CallbackData: "currency"}, + }, + { {Text: fmt.Sprintf("Rate: %.2f", st.HourlyRate), CallbackData: "setrate"}, }, {{Text: "Back to Menu", CallbackData: "back_menu"}}, @@ -217,6 +220,22 @@ func (h *Handler) buildSettingsKeyboard(user *db.User, st *db.UserSettings, brea return "Settings:", models.InlineKeyboardMarkup{InlineKeyboard: rows} } +// usernameCallback shows the current username and how to change it. +func (h *Handler) usernameCallback(ctx context.Context, chatID int64, msgID int, callbackID string) { + defer h.answerCb(ctx, callbackID) + user, err := h.getOrCreateUser(chatID) + if err != nil { + return + } + text := fmt.Sprintf("Username: %s\n\nUse /setusername to change it.", user.Username) + kb := models.InlineKeyboardMarkup{ + InlineKeyboard: [][]models.InlineKeyboardButton{ + {{Text: "Back to Settings", CallbackData: "back_settings"}}, + }, + } + h.editText(ctx, chatID, msgID, text, &kb) +} + // accentCallback shows the accent color picker (inline edit). func (h *Handler) accentCallback(ctx context.Context, chatID int64, msgID int, callbackID string) { defer h.answerCb(ctx, callbackID) diff --git a/internal/bot/summary.go b/internal/bot/summary.go index bd62d9b..83f8867 100644 --- a/internal/bot/summary.go +++ b/internal/bot/summary.go @@ -114,6 +114,8 @@ func (h *Handler) buildMonthlySummary(user *db.User, calY, calM int, startStr, e est := computeMonthlySalary(days, h.DB, user.ID, st.HourlyRate, loc) b.WriteString(fmt.Sprintf("\nSalary: %s (%.1f hours, %d days)", est.formatSalary(st.Currency), est.WorkHours, est.WorkDays)) + } else { + b.WriteString("\nSalary: No rate configured — use /setrate ") } b.WriteString("\n\nDetails:\n")