Skip to content

Commit a05cf78

Browse files
author
Magomed
committed
fix minor bugs
1 parent 2c3aa4a commit a05cf78

5 files changed

Lines changed: 35 additions & 42 deletions

File tree

cmd/main.go

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func main() {
3737
botAPI.Debug = false
3838
slog.Info(fmt.Sprintf("Авторизован на аккаунте %s", botAPI.Self.UserName))
3939

40-
connDB, err := bot.ConnectPostgresDB() // Подключение к базе данных PostgreSQL
40+
connDB, err := bot.ConnectPostgresDB() // Подключение к базе данных Psql
4141
if err != nil {
4242
os.Exit(1)
4343
}
@@ -111,27 +111,3 @@ func initBotAPI() (*tgbotapi.BotAPI, tgbotapi.UpdatesChannel, error) {
111111

112112
return botAPI, updates, nil
113113
}
114-
115-
//Таблица users (Пользователи)
116-
//Поле Тип данных Описание
117-
//id SERIAL (Primary Key) Уникальный ID пользователя в базе
118-
//telegram_id BIGINT UNIQUE ID пользователя в Telegram
119-
//chat_id BIGINT UNIQUE ID чата с пользователем
120-
//referral_code VARCHAR(255) UNIQUE Реферальная ссылка пользователя
121-
//created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP Время создания записи
122-
//referred_by INT ID пользователя кто его пригласил
123-
//FOREIGN KEY (referred_by) REFERENCES users(id) ON DELETE SET NULL Внешний ключ на приглашённого
124-
125-
//Таблица keys (Ключи доступа)
126-
//Поле Тип данных Описание
127-
//id SERIAL (Primary Key) Уникальный ID ключа
128-
//user_id INT (Foreign Key) Ссылка на пользователя (users.id)
129-
//key VARCHAR(255) Ключ доступа
130-
//created_at TIMESTAMP Время создания ключа
131-
//expires_at TIMESTAMP Время истечения ключа
132-
//CHECK (expires_at > created_at) Проверка, что время истечения ключа больше времени создания
133-
134-
//CREATE INDEX idx_referral_code ON users(referral_code);
135-
//CREATE INDEX idx_telegram_id ON users(telegram_id);
136-
//CREATE INDEX idx_referred_by ON users(referred_by); - В ДАЛЁКОМ БУДУШЕМ (ЕСЛИ ПРОЕКТ БУДЕТ ЖИТЬ)
137-
//

internal/bot/http_request.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,6 @@ func (h *HttpRequest) AddedOutlineKeyLimit(keyID string, url string) error {
9797
// Формируем полный URL для запроса
9898
apiURL := fmt.Sprintf("%s/access-keys/%s/data-limit", url, keyID)
9999

100-
fmt.Println("ВОТ:", apiURL)
101-
102100
// Формируем тело запроса с ограничением (например, 10000 байт).
103101
requestBody := `{"limit": {"bytes": 1048576}}` // 1 МБ
104102

@@ -128,7 +126,7 @@ func (h *HttpRequest) AddedOutlineKeyLimit(keyID string, url string) error {
128126
return err
129127
}
130128

131-
slog.Info("Ограничение по ключу %d успешно установлено\n", keyID)
129+
slog.Info(fmt.Sprintf("Ограничение по ключу %v успешно установлено\n", keyID))
132130
return nil
133131
}
134132

internal/bot/messages.go

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,13 @@ func (m *MessengerBot) GetInfoStart(update tgbotapi.Update) {
125125
case err == nil && time.Now().After(expirationTime):
126126
// Если ключ истёк
127127
respMessage =
128-
"⚠️ *Доступ заблокирован* \n\n" +
129-
"❌ *Ваш ключ истёк!* \n\n" +
130-
"🔄 *Продлите подписку, чтобы продолжить пользоваться сервисом.*"
128+
"⚠️ *К сожалению, доступ временно заблокирован.* \n\n" +
129+
"❌ *Ваш ключ истёк, и вы больше не можете пользоваться сервисом.* \n\n" +
130+
"💡 *Что делать дальше?*\n" +
131+
"🔹 Нажмите на «Продлить».\n" +
132+
"🔹 Выберите подходящий тариф и оплатите его.\n" +
133+
"🔹 Наслаждайтесь безопасным и быстрым интернетом снова! 🚀\n\n" +
134+
"🔄 *Продлите подписку прямо сейчас и вернитесь в сеть!*"
131135

132136
case err == nil:
133137
// Если всё в порядке
@@ -448,13 +452,13 @@ func (m *MessengerBot) ManageUserDataAfterPayment(value, userTgID string) {
448452
return
449453
}
450454

451-
expirationDate := expiresAt.Format("02.01.2006 15:04")
455+
expirationDate := newExpiration.Format("02.01.2006 15:04")
452456

453457
// Формируем сообщение для пользователя о новом сроке действия
454458
text := fmt.Sprintf(
455459
"🎉 *Ваш ключ успешно продлён!* 🎉\n\n"+
456460
"📅 *Ключ действителен до: * `%s`.\n\n"+
457-
"Спасибо, что остаетесь с нами!"+
461+
"Спасибо, что остаетесь с нами!\n"+
458462
"Мы ценим вашу поддержку! 😊",
459463
expirationDate,
460464
)
@@ -485,7 +489,7 @@ func (m *MessengerBot) AddReferralSubscriptionDays(userID string, expirationTime
485489

486490
// Получаем реферала пользователя
487491
referralUserID, err := m.repo.GetUserReferral(intUserID)
488-
if errors.Is(err, sql.ErrNoRows) {
492+
if err != nil || referralUserID == 0 {
489493
// Если реферала нет, просто выходим
490494
return
491495
}
@@ -709,10 +713,20 @@ func (m *MessengerBot) GetConnectStrOrReferral(userTgID int64, referral bool) {
709713

710714
// Логируем успешную отправку ключа или реферальной ссылки
711715
if referral {
712-
text = fmt.Sprintf("🎉 *Ваша реферальная ссылка для приглашения:* \n```%s```", keyOrReferral)
716+
text = fmt.Sprintf("🎉 *Ваша реферальная ссылка:* \n\n```%s``` \n"+
717+
"💡 *Как это работает:*\n\n"+
718+
"🔹 Поделитесь ссылкой с друзьями.\n"+
719+
"🔹 За *каждый купленный месяц подписки* вашим рефералом вы получаете *+4 бесплатных дня* к своей подписке!\n"+
720+
"🔹 Чем больше друзей пригласите, тем больше бесплатных дней получите. 🚀\n\n"+
721+
"✨ *Спасибо, что пользуетесь Keeper VPN!*", keyOrReferral)
713722
} else {
714723
// Если ключ найден, отправляем его пользователю
715-
text = fmt.Sprintf("🔑 *Ваш ключ доступа:* \n```%s```", keyOrReferral)
724+
text = fmt.Sprintf("🔑 *Ваш ключ доступа:* \n\n```%s``` \n"+
725+
"💡 *Как использовать ключ:*\n\n"+
726+
"🔹 Установите приложение *Outline*.\n"+
727+
"🔹 Скопируйте ключ и вставьте его в приложение.\n"+
728+
"🔹 Наслаждайтесь безопасным и быстрым интернетом! 🚀\n\n"+
729+
"✨ *Спасибо, что пользуетесь Keeper VPN!*", keyOrReferral)
716730
}
717731

718732
// Создаем сообщение и устанавливаем ParseMode
@@ -785,12 +799,16 @@ func (m *MessengerBot) SetLimitForExpiredKeys() {
785799
for {
786800
select {
787801
case <-ticker.C:
802+
slog.Info("Старт проверки истёкших ключей")
803+
788804
// Идем в базу и вытаскиваем key_id_outline для всех просроченных ключей
789805
expiredKeysID, err := m.repo.GetExpirationTimeKeysID()
790806
if err != nil {
791807
continue
792808
}
793809

810+
slog.Info(fmt.Sprintf("Найдено %v протухших ключей", len(expiredKeysID)))
811+
794812
// Параллельно делаем HTTP-запросы к Outline Manager и ставим лимиты
795813
var wg sync.WaitGroup
796814
for _, keyID := range expiredKeysID {

internal/bot/repository.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,15 @@ func (r *Repo) GetUserReferral(userID int) (int, error) {
7070

7171
err := r.db.QueryRow(query, userID).Scan(&referralUserID)
7272
if err != nil {
73-
if errors.Is(err, sql.ErrNoRows) {
74-
slog.Warn(op, slog.String("message", "Нет реферала у пользователя"), slog.Int("userID", userID))
75-
return 0, nil // Нет реферала — это не ошибка
76-
}
7773
slog.Error(op, slog.String("Ошибка запроса к БД", err.Error()))
7874
return 0, err
7975
}
8076

77+
if referralUserID == 0 {
78+
slog.Warn(op, slog.String("message", "Нет реферала у пользователя"), slog.Int("userID", userID))
79+
return 0, nil // Нет реферала — это не ошибка
80+
}
81+
8182
return referralUserID, nil
8283
}
8384

@@ -216,7 +217,7 @@ func (r *Repo) UpdateProcessedKey(keyID int, flag bool) error {
216217
return fmt.Errorf("ключ с key_id_outline=%d не найден", keyID)
217218
}
218219

219-
slog.Info(op, "Флажок processed успешно обновлён",
220+
slog.Info("Флажок processed успешно обновлён",
220221
slog.Int("keyID", keyID),
221222
slog.Bool("flag", flag),
222223
)

internal/bot/router.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ import "net/http"
44

55
// InitRout - Функция инициализирует маршруты для HTTP-сервера.
66
func InitRout(handler *HttpHandler) {
7-
http.HandleFunc("/webhook", handler.PaymentWebhook) // TODO: изменить эндпоинт по мере необходимости.
7+
http.HandleFunc("/webhook", handler.PaymentWebhook)
88
}

0 commit comments

Comments
 (0)