From f39e4e6fb06e9474045f0e04ce75fad4b6dff18c Mon Sep 17 00:00:00 2001 From: db123 Date: Thu, 25 Jun 2026 22:08:05 +0330 Subject: [PATCH] fix: quota pre-check used max format size, blocked before format selection Changed pre-check to only reject when used >= limit (already exhausted), not when the max format size alone would exceed the limit. The actual quota is applied at 50% progress using the selected format's size. --- internal/handler/download.go | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/internal/handler/download.go b/internal/handler/download.go index f07110c..7da6e1e 100644 --- a/internal/handler/download.go +++ b/internal/handler/download.go @@ -113,19 +113,15 @@ func (h *Handler) handleURLInput(ctx context.Context, chatID int64, text string, return } + // Reject if user has already exhausted quota (used >= limit) with a minimum threshold. q, err := h.Repo.GetOrCreateQuotas(userID) if err == nil { q = h.resetQuotasIfNeeded(q) - estimatedMB := info.EstimatedSize / (1024 * 1024) - if estimatedMB > 0 { - if q.DailyUsedMB+estimatedMB > q.DailyLimitMB || - q.WeeklyUsedMB+estimatedMB > q.WeeklyLimitMB || - q.MonthlyUsedMB+estimatedMB > q.MonthlyLimitMB { - h.sendText(ctx, chatID, fmt.Sprintf( - "Quota exceeded. Daily: %d/%d MB, Weekly: %d/%d MB, Monthly: %d/%d MB.", - q.DailyUsedMB, q.DailyLimitMB, q.WeeklyUsedMB, q.WeeklyLimitMB, q.MonthlyUsedMB, q.MonthlyLimitMB)) - return - } + if q.DailyUsedMB >= q.DailyLimitMB || q.WeeklyUsedMB >= q.WeeklyLimitMB || q.MonthlyUsedMB >= q.MonthlyLimitMB { + h.sendText(ctx, chatID, fmt.Sprintf( + "Quota exceeded. Daily: %d/%d MB, Weekly: %d/%d MB, Monthly: %d/%d MB.", + q.DailyUsedMB, q.DailyLimitMB, q.WeeklyUsedMB, q.WeeklyLimitMB, q.MonthlyUsedMB, q.MonthlyLimitMB)) + return } }