diff --git a/handlers/admin/users/users_handler.py b/handlers/admin/users/users_handler.py index 7d169091..99a4ec98 100644 --- a/handlers/admin/users/users_handler.py +++ b/handlers/admin/users/users_handler.py @@ -1,16 +1,18 @@ import asyncio + from datetime import datetime, timedelta, timezone from typing import Any import pytz + from aiogram import F, Router, types from aiogram.exceptions import TelegramBadRequest from aiogram.fsm.context import FSMContext from aiogram.fsm.state import State, StatesGroup from aiogram.types import CallbackQuery, Message from aiogram.utils.keyboard import InlineKeyboardBuilder - from config import TOTAL_GB + from database import ( delete_key, delete_user_data, @@ -24,10 +26,8 @@ from database import ( from filters.admin import IsAdminFilter from handlers.keys.key_utils import delete_key_from_cluster, get_user_traffic, renew_key_in_cluster, update_subscription from handlers.utils import sanitize_key_name -from logger import logger -from utils.csv_export import export_referrals_csv -from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb, build_admin_back_btn -from .keyboard import ( +from keyboards.admin.panel_kb import AdminPanelCallback, build_admin_back_btn, build_admin_back_kb +from keyboards.admin.users_kb import ( AdminUserEditorCallback, AdminUserKeyEditorCallback, build_editor_kb, @@ -41,6 +41,9 @@ from .keyboard import ( build_users_key_expiry_kb, build_users_key_show_kb, ) +from logger import logger +from utils.csv_export import export_referrals_csv + MOSCOW_TZ = pytz.timezone("Europe/Moscow") diff --git a/handlers/captcha.py b/handlers/captcha.py index 5ae3790f..6a494a94 100644 --- a/handlers/captcha.py +++ b/handlers/captcha.py @@ -8,6 +8,7 @@ from aiogram.types import CallbackQuery, Message from aiogram.utils.keyboard import InlineKeyboardBuilder from config import CAPTCHA_EMOJIS + from handlers.texts import CAPTCHA_PROMPT_MSG from logger import logger from .utils import edit_or_send_message diff --git a/handlers/coupons.py b/handlers/coupons.py index 807aa2f2..42d2b5f6 100644 --- a/handlers/coupons.py +++ b/handlers/coupons.py @@ -14,11 +14,12 @@ from database import ( update_coupon_usage_count, ) from handlers.texts import ( + COUPON_ACTIVATED_SUCCESS_MSG, + COUPON_ALREADY_USED_MSG, COUPON_INPUT_PROMPT, COUPON_NOT_FOUND_MSG, - COUPON_ALREADY_USED_MSG, - COUPON_ACTIVATED_SUCCESS_MSG, ) + from .utils import edit_or_send_message diff --git a/handlers/keys/key_management.py b/handlers/keys/key_management.py index 961ebad0..a0a48c1c 100644 --- a/handlers/keys/key_management.py +++ b/handlers/keys/key_management.py @@ -52,12 +52,12 @@ from handlers.buttons.add_subscribe import ( from handlers.keys.key_utils import create_client_on_server, create_key_on_cluster from handlers.payments.robokassa_pay import handle_custom_amount_input from handlers.texts import ( - DISCOUNTS, - key_message_success, CREATING_CONNECTION_MSG, - SELECT_TARIFF_PLAN_MSG, + DISCOUNTS, INSUFFICIENT_FUNDS_MSG, SELECT_COUNTRY_MSG, + SELECT_TARIFF_PLAN_MSG, + key_message_success, ) from handlers.utils import edit_or_send_message, generate_random_email, get_least_loaded_cluster from logger import logger diff --git a/handlers/keys/key_utils.py b/handlers/keys/key_utils.py index 3a71e8cf..d501bf8c 100644 --- a/handlers/keys/key_utils.py +++ b/handlers/keys/key_utils.py @@ -4,6 +4,9 @@ from typing import Any import asyncpg from py3xui import AsyncApi +from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL, LIMIT_IP, PUBLIC_LINK, SUPERNODE, TOTAL_GB +from py3xui import AsyncApi + from client import ClientConfig, add_client, delete_client, extend_client_key, get_client_traffic, toggle_client from config import ADMIN_PASSWORD, ADMIN_USERNAME, LIMIT_IP, PUBLIC_LINK, SUPERNODE, TOTAL_GB, DATABASE_URL from database import get_servers, store_key diff --git a/handlers/keys/subscriptions.py b/handlers/keys/subscriptions.py index ccd75c95..bfd5123a 100644 --- a/handlers/keys/subscriptions.py +++ b/handlers/keys/subscriptions.py @@ -325,7 +325,7 @@ async def handle_subscription(request: web.Request, old_subscription: bool = Fal stored_tg_id = client_data.get("tg_id") server_id = client_data["server_id"] - if not old_subscription and str(tg_id) != str(stored_tg_id): + if not old_subscription and int(tg_id) != int(stored_tg_id): logger.warning(f"Неверный tg_id для клиента с email {email}.") return web.Response(text="❌ Неверные данные. Получите свой ключ в боте.", status=403) diff --git a/handlers/pay.py b/handlers/pay.py index 9d36f57a..9f40047a 100644 --- a/handlers/pay.py +++ b/handlers/pay.py @@ -10,7 +10,9 @@ from config import ( YOOKASSA_ENABLE, YOOMONEY_ENABLE, ) + from handlers.texts import PAYMENT_METHODS_MSG + from .utils import edit_or_send_message router = Router() diff --git a/handlers/start.py b/handlers/start.py index 290c12c4..0332863d 100644 --- a/handlers/start.py +++ b/handlers/start.py @@ -1,4 +1,5 @@ import os + from typing import Any from aiogram import F, Router @@ -32,16 +33,16 @@ from database import ( from handlers.captcha import generate_captcha from handlers.keys.key_management import create_key from handlers.texts import ( + COUPON_SUCCESS_MSG, + GIFT_ALREADY_USED_OR_NOT_EXISTS_MSG, + NEW_REFERRAL_NOTIFICATION, + NOT_SUBSCRIBED_YET_MSG, + REFERRAL_SUCCESS_MSG, + SUBSCRIPTION_CHECK_ERROR_MSG, + SUBSCRIPTION_CONFIRMED_MSG, + SUBSCRIPTION_REQUIRED_MSG, WELCOME_TEXT, get_about_vpn, - SUBSCRIPTION_REQUIRED_MSG, - NOT_SUBSCRIBED_YET_MSG, - SUBSCRIPTION_CONFIRMED_MSG, - SUBSCRIPTION_CHECK_ERROR_MSG, - GIFT_ALREADY_USED_OR_NOT_EXISTS_MSG, - REFERRAL_SUCCESS_MSG, - NEW_REFERRAL_NOTIFICATION, - COUPON_SUCCESS_MSG, ) from logger import logger from .admin.panel.keyboard import AdminPanelCallback diff --git a/handlers/utils.py b/handlers/utils.py index 739334c9..871f8228 100644 --- a/handlers/utils.py +++ b/handlers/utils.py @@ -65,7 +65,7 @@ async def get_least_loaded_cluster() -> str: """ servers = await get_servers() server_to_cluster = {} - cluster_loads = {cluster: 0 for cluster in servers.keys()} + cluster_loads = dict.fromkeys(servers.keys(), 0) for cluster_name, cluster_servers in servers.items(): for server in cluster_servers: server_to_cluster[server["server_name"]] = cluster_name