diff --git a/utils/backup.py b/backup.py similarity index 100% rename from utils/backup.py rename to backup.py diff --git a/utils/client.py b/client.py similarity index 100% rename from utils/client.py rename to client.py diff --git a/utils/database.py b/database.py similarity index 100% rename from utils/database.py rename to database.py diff --git a/handlers/admin/admin_coupons.py b/handlers/admin/admin_coupons.py index c7964978..5ea3ca98 100644 --- a/handlers/admin/admin_coupons.py +++ b/handlers/admin/admin_coupons.py @@ -6,7 +6,7 @@ from aiogram.fsm.state import State, StatesGroup from aiogram.types import InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder -from utils.database import create_coupon, delete_coupon_from_db, get_all_coupons +from database import create_coupon, delete_coupon_from_db, get_all_coupons from filters.admin import IsAdminFilter from logger import logger diff --git a/handlers/admin/admin_panel.py b/handlers/admin/admin_panel.py index 8afa4d6a..b0adf30a 100644 --- a/handlers/admin/admin_panel.py +++ b/handlers/admin/admin_panel.py @@ -10,7 +10,7 @@ from aiogram.fsm.state import State, StatesGroup from aiogram.types import BufferedInputFile, CallbackQuery, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder -from utils.backup import backup_database +from backup import backup_database from bot import bot from filters.admin import IsAdminFilter from logger import logger diff --git a/handlers/admin/admin_servers.py b/handlers/admin/admin_servers.py index 23bddaf6..b9260c66 100644 --- a/handlers/admin/admin_servers.py +++ b/handlers/admin/admin_servers.py @@ -6,9 +6,9 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder import asyncpg from py3xui import AsyncApi -from utils.backup import create_backup_and_send_to_admins +from backup import create_backup_and_send_to_admins from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL -from utils.database import check_unique_server_name, get_servers_from_db +from database import check_unique_server_name, get_servers_from_db from filters.admin import IsAdminFilter router = Router() diff --git a/handlers/admin/admin_user_editor.py b/handlers/admin/admin_user_editor.py index d840a875..d579cb5f 100644 --- a/handlers/admin/admin_user_editor.py +++ b/handlers/admin/admin_user_editor.py @@ -9,10 +9,10 @@ from aiogram.types import CallbackQuery, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from config import TOTAL_GB -from utils.database import get_client_id_by_email, get_servers_from_db, restore_trial, update_key_expiry +from database import get_client_id_by_email, get_servers_from_db, restore_trial, update_key_expiry from filters.admin import IsAdminFilter -from utils.keys.key_utils import delete_key_from_cluster, delete_key_from_db, renew_key_in_cluster -from utils.utils import sanitize_key_name +from handlers.keys.key_utils import delete_key_from_cluster, delete_key_from_db, renew_key_in_cluster +from handlers.utils import sanitize_key_name from logger import logger router = Router() diff --git a/handlers/coupons.py b/handlers/coupons.py index 59809fb1..ed487671 100644 --- a/handlers/coupons.py +++ b/handlers/coupons.py @@ -7,7 +7,7 @@ from aiogram.fsm.state import State, StatesGroup from aiogram.types import InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder -from utils.database import update_balance +from database import update_balance class CouponActivationState(StatesGroup): diff --git a/handlers/keys/key_management.py b/handlers/keys/key_management.py index 1c417788..9efe8ec1 100644 --- a/handlers/keys/key_management.py +++ b/handlers/keys/key_management.py @@ -15,14 +15,15 @@ from config import ( DOWNLOAD_ANDROID, DOWNLOAD_IOS, PUBLIC_LINK, + RENEWAL_PLANS, RENEWAL_PRICES, SUPPORT_CHAT_URL, TRIAL_TIME, ) -from utils.database import get_balance, get_trial, store_key, update_balance -from utils.keys.key_utils import create_key_on_cluster -from handlers.texts import DISCOUNTS, KEY, key_message_success -from utils.utils import generate_random_email, get_least_loaded_cluster +from database import get_balance, get_trial, store_key, update_balance +from handlers.keys.key_utils import create_key_on_cluster +from handlers.texts import DISCOUNTS, KEY, NULL_BALANCE, key_message_success +from handlers.utils import generate_random_email, get_least_loaded_cluster from logger import logger router = Router() diff --git a/utils/keys/key_utils.py b/handlers/keys/key_utils.py similarity index 98% rename from utils/keys/key_utils.py rename to handlers/keys/key_utils.py index 36754467..8d39c8b9 100644 --- a/utils/keys/key_utils.py +++ b/handlers/keys/key_utils.py @@ -3,9 +3,9 @@ import asyncio import asyncpg from py3xui import AsyncApi -from utils.client import add_client, delete_client, extend_client_key +from client import add_client, delete_client, extend_client_key from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL, TOTAL_GB -from utils.database import get_servers_from_db +from database import get_servers_from_db from logger import logger diff --git a/handlers/keys/keys.py b/handlers/keys/keys.py index e75c1c30..236545b4 100644 --- a/handlers/keys/keys.py +++ b/handlers/keys/keys.py @@ -9,8 +9,8 @@ from aiogram.types import BufferedInputFile, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from config import CONNECT_ANDROID, CONNECT_IOS, DOWNLOAD_ANDROID, DOWNLOAD_IOS, PUBLIC_LINK, RENEWAL_PLANS, TOTAL_GB -from utils.database import delete_key, get_balance, get_servers_from_db, store_key, update_balance, update_key_expiry -from utils.keys.key_utils import ( +from database import delete_key, get_balance, get_servers_from_db, store_key, update_balance, update_key_expiry +from handlers.keys.key_utils import ( delete_key_from_cluster, delete_key_from_db, renew_key_in_cluster, @@ -25,7 +25,7 @@ from handlers.texts import ( SUCCESS_RENEWAL_MSG, key_message, ) -from utils.utils import get_least_loaded_cluster, handle_error +from handlers.utils import get_least_loaded_cluster, handle_error from logger import logger locale.setlocale(locale.LC_TIME, "ru_RU.UTF-8") diff --git a/utils/keys/subscriptions.py b/handlers/keys/subscriptions.py similarity index 99% rename from utils/keys/subscriptions.py rename to handlers/keys/subscriptions.py index 176186c9..45b0d3fc 100644 --- a/utils/keys/subscriptions.py +++ b/handlers/keys/subscriptions.py @@ -6,7 +6,7 @@ from aiohttp import web import asyncpg from config import DATABASE_URL, TRANSITION_DATE_STR -from utils.database import get_servers_from_db +from database import get_servers_from_db from logger import logger diff --git a/utils/keys/trial_key.py b/handlers/keys/trial_key.py similarity index 91% rename from utils/keys/trial_key.py rename to handlers/keys/trial_key.py index 0ed8f7bb..819d66da 100644 --- a/utils/keys/trial_key.py +++ b/handlers/keys/trial_key.py @@ -5,11 +5,11 @@ import uuid from py3xui import AsyncApi -from utils.client import add_client +from client import add_client from config import ADMIN_PASSWORD, ADMIN_USERNAME, PUBLIC_LINK, TOTAL_GB, TRIAL_TIME -from utils.database import get_servers_from_db, store_key, use_trial +from database import get_servers_from_db, store_key, use_trial from handlers.texts import INSTRUCTIONS -from utils.utils import generate_random_email, get_least_loaded_cluster +from handlers.utils import generate_random_email, get_least_loaded_cluster async def create_trial_key(tg_id: int, session: Any): diff --git a/handlers/notifications.py b/handlers/notifications.py index 68ae5909..7ac8ccf2 100644 --- a/handlers/notifications.py +++ b/handlers/notifications.py @@ -7,7 +7,7 @@ import asyncpg from py3xui import AsyncApi from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL, DEV_MODE, RENEWAL_PLANS, TOTAL_GB, TRIAL_TIME -from utils.database import ( +from database import ( add_notification, check_notification_time, delete_key, @@ -16,7 +16,7 @@ from utils.database import ( update_balance, update_key_expiry, ) -from utils.keys.key_utils import delete_key_from_cluster, renew_key_in_cluster +from handlers.keys.key_utils import delete_key_from_cluster, renew_key_in_cluster from handlers.texts import KEY_EXPIRY_10H, KEY_EXPIRY_24H, KEY_RENEWED from logger import logger diff --git a/handlers/payments/cryprobot_pay.py b/handlers/payments/cryprobot_pay.py index 7d2188f4..6265d4db 100644 --- a/handlers/payments/cryprobot_pay.py +++ b/handlers/payments/cryprobot_pay.py @@ -9,8 +9,8 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder from aiohttp import web from config import CRYPTO_BOT_ENABLE, CRYPTO_BOT_TOKEN, RUB_TO_USDT -from utils.database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance -from utils.payments.utils import send_payment_success_notification +from database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance +from handlers.payments.utils import send_payment_success_notification from handlers.texts import PAYMENT_OPTIONS from logger import logger diff --git a/handlers/payments/freekassa_pay.py b/handlers/payments/freekassa_pay.py index 6e1c33fe..7c423129 100644 --- a/handlers/payments/freekassa_pay.py +++ b/handlers/payments/freekassa_pay.py @@ -13,8 +13,8 @@ from aiohttp import web import requests from config import FREEKASSA_API_KEY, FREEKASSA_SHOP_ID -from utils.database import add_payment, update_balance -from utils.payments.utils import send_payment_success_notification +from database import add_payment, update_balance +from handlers.payments.utils import send_payment_success_notification from handlers.texts import PAYMENT_OPTIONS router = Router() diff --git a/handlers/payments/robokassa_pay.py b/handlers/payments/robokassa_pay.py index bfa09e2c..9ae90a29 100644 --- a/handlers/payments/robokassa_pay.py +++ b/handlers/payments/robokassa_pay.py @@ -10,8 +10,8 @@ from aiohttp import web from robokassa import HashAlgorithm, Robokassa from config import ROBOKASSA_ENABLE, ROBOKASSA_LOGIN, ROBOKASSA_PASSWORD1, ROBOKASSA_PASSWORD2, ROBOKASSA_TEST_MODE -from utils.database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance -from utils.payments.utils import send_payment_success_notification +from database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance +from handlers.payments.utils import send_payment_success_notification from handlers.texts import PAYMENT_OPTIONS from logger import logger diff --git a/handlers/payments/stars_pay.py b/handlers/payments/stars_pay.py index 75135c5e..698444b8 100644 --- a/handlers/payments/stars_pay.py +++ b/handlers/payments/stars_pay.py @@ -7,8 +7,8 @@ from aiogram.types import InlineKeyboardButton, LabeledPrice, PreCheckoutQuery from aiogram.utils.keyboard import InlineKeyboardBuilder from config import RUB_TO_XTR -from utils.database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance -from utils.payments.utils import send_payment_success_notification +from database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance +from handlers.payments.utils import send_payment_success_notification from handlers.texts import PAYMENT_OPTIONS from logger import logger diff --git a/utils/payments/utils.py b/handlers/payments/utils.py similarity index 100% rename from utils/payments/utils.py rename to handlers/payments/utils.py diff --git a/handlers/payments/yookassa_pay.py b/handlers/payments/yookassa_pay.py index d0dff390..c1687107 100644 --- a/handlers/payments/yookassa_pay.py +++ b/handlers/payments/yookassa_pay.py @@ -10,8 +10,8 @@ from aiohttp import web from yookassa import Configuration, Payment from config import YOOKASSA_ENABLE, YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID -from utils.database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance -from utils.payments.utils import send_payment_success_notification +from database import add_connection, add_payment, check_connection_exists, get_key_count, update_balance +from handlers.payments.utils import send_payment_success_notification from handlers.texts import PAYMENT_OPTIONS from logger import logger diff --git a/handlers/profile.py b/handlers/profile.py index 34c514ce..005aecf1 100644 --- a/handlers/profile.py +++ b/handlers/profile.py @@ -6,7 +6,7 @@ from aiogram.types import BufferedInputFile, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from config import NEWS_MESSAGE, RENEWAL_PLANS -from utils.database import get_balance, get_key_count, get_referral_stats +from database import get_balance, get_key_count, get_referral_stats from handlers.texts import get_referral_link, invite_message_send, profile_message_send router = Router() diff --git a/handlers/start.py b/handlers/start.py index 3f678978..3c15d9bc 100644 --- a/handlers/start.py +++ b/handlers/start.py @@ -8,8 +8,8 @@ from aiogram.types import BufferedInputFile, CallbackQuery, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from config import CHANNEL_URL, CONNECT_ANDROID, CONNECT_IOS, DOWNLOAD_ANDROID, DOWNLOAD_IOS, SUPPORT_CHAT_URL -from utils.database import add_connection, add_referral, check_connection_exists, get_trial, use_trial -from utils.keys.trial_key import create_trial_key +from database import add_connection, add_referral, check_connection_exists, get_trial, use_trial +from handlers.keys.trial_key import create_trial_key from handlers.texts import INSTRUCTIONS_TRIAL, WELCOME_TEXT, get_about_vpn router = Router() diff --git a/utils/utils.py b/handlers/utils.py similarity index 98% rename from utils/utils.py rename to handlers/utils.py index 42709e76..95871cf6 100644 --- a/utils/utils.py +++ b/handlers/utils.py @@ -6,7 +6,7 @@ import asyncpg from bot import bot from config import DATABASE_URL -from utils.database import get_servers_from_db +from database import get_servers_from_db from logger import logger diff --git a/main.py b/main.py index 32d0a297..af659ad3 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,8 @@ import signal from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application from aiohttp import web -from utils.backup import backup_database + +from backup import backup_database from bot import bot, dp from handlers import router from config import ( @@ -20,15 +21,15 @@ from config import ( WEBHOOK_URL, YOOKASSA_ENABLE, ) -from utils.database import init_db -from utils.keys.subscriptions import handle_new_subscription, handle_old_subscription +from database import init_db +from handlers.keys.subscriptions import handle_new_subscription, handle_old_subscription from handlers.notifications import notify_expiring_keys from handlers.payments.cryprobot_pay import cryptobot_webhook from handlers.payments.freekassa_pay import freekassa_webhook from handlers.payments.robokassa_pay import robokassa_webhook from handlers.payments.yookassa_pay import yookassa_webhook from logger import logger -from utils.servers import check_servers, sync_servers_with_db +from servers import check_servers, sync_servers_with_db async def periodic_notifications(): diff --git a/middlewares/user.py b/middlewares/user.py index ee130b16..969020ef 100644 --- a/middlewares/user.py +++ b/middlewares/user.py @@ -3,7 +3,7 @@ from typing import Any, Awaitable, Callable, Dict from aiogram import BaseMiddleware from aiogram.types import TelegramObject, User -from utils.database import upsert_user +from database import upsert_user class UserMiddleware(BaseMiddleware): diff --git a/utils/servers.py b/servers.py similarity index 99% rename from utils/servers.py rename to servers.py index 4a275bc9..fbb81968 100644 --- a/utils/servers.py +++ b/servers.py @@ -9,7 +9,7 @@ from ping3 import ping from bot import bot from config import ADMIN_ID, DATABASE_URL -from utils.database import get_servers_from_db +from database import get_servers_from_db from logger import logger try: diff --git a/utils/__init__.py b/utils/__init__.py deleted file mode 100644 index e69de29b..00000000