diff --git a/bot.py b/bot.py
index 7c18c5d8..0c12b0f8 100644
--- a/bot.py
+++ b/bot.py
@@ -9,19 +9,13 @@ storage = MemoryStorage()
dp = Dispatcher(bot=bot, storage=storage)
router = Router()
-from handlers import balance, keys, notifications, pay, profile, start
-from key_management import router as key_management_router
+from handlers import key_management, keys, notifications, pay, profile, start
+from handlers.key_management import router as key_management_router
# Регистрация обработчиков
dp.include_router(start.router)
dp.include_router(profile.router)
dp.include_router(keys.router)
-dp.include_router(balance.router)
-dp.include_router(key_management_router)
+dp.include_router(key_management.router)
dp.include_router(pay.router)
dp.include_router(notifications.router)
-
-
-
-async def on_startup(dispatcher: Dispatcher):
- await login_with_credentials()
diff --git a/handlers/balance.py b/handlers/balance.py
deleted file mode 100644
index 1ee5eb8c..00000000
--- a/handlers/balance.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import aiosqlite
-from aiogram import Router, types
-
-router = Router()
-
-@router.callback_query(lambda c: c.data == 'view_balance')
-async def process_callback_view_balance(callback_query: types.CallbackQuery):
- tg_id = callback_query.from_user.id
-
-
diff --git a/key_management.py b/handlers/key_management.py
similarity index 99%
rename from key_management.py
rename to handlers/key_management.py
index 0b181b10..4a1b54fd 100644
--- a/key_management.py
+++ b/handlers/key_management.py
@@ -1,4 +1,3 @@
-import asyncio
import re
import uuid
from datetime import datetime, timedelta
diff --git a/handlers/keys.py b/handlers/keys.py
index 07bd5d30..10a12eee 100644
--- a/handlers/keys.py
+++ b/handlers/keys.py
@@ -11,19 +11,6 @@ from database import get_balance, update_balance
router = Router()
-from datetime import datetime, timedelta
-
-import asyncpg
-from aiogram import Router, types
-
-from auth import login_with_credentials
-from bot import bot
-from client import delete_client, extend_client_key
-from config import ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL
-from database import get_balance, update_balance
-
-router = Router()
-
# Обработка запроса на просмотр ключей
@router.callback_query(lambda c: c.data == 'view_keys')
async def process_callback_view_keys(callback_query: types.CallbackQuery):
diff --git a/handlers/notifications.py b/handlers/notifications.py
index e2ebddb0..510886f4 100644
--- a/handlers/notifications.py
+++ b/handlers/notifications.py
@@ -1,33 +1,21 @@
from datetime import datetime, timedelta
import asyncpg
-from aiogram import Bot, Router, types
-from aiogram.filters import Command
-from aiogram.fsm.context import FSMContext
+from aiogram import Bot, Router
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import ( # Импортируем необходимые классы
InlineKeyboardButton, InlineKeyboardMarkup)
from bot import bot
-from config import ADMIN_ID, DATABASE_URL
-from database import get_all_users
+from config import DATABASE_URL, ADMIN_PASSWORD, ADMIN_USERNAME
+from client import delete_client
+from auth import login_with_credentials
router = Router()
class NotificationStates(StatesGroup):
waiting_for_notification_text = State()
-from datetime import datetime, timedelta
-
-import asyncpg
-from aiogram import Bot, Router, types
-from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
-
-from bot import bot
-from config import DATABASE_URL
-
-router = Router()
-
async def notify_expiring_keys(bot: Bot):
try:
conn = await asyncpg.connect(DATABASE_URL)
@@ -62,21 +50,31 @@ async def notify_expiring_keys(bot: Bot):
# Обрабатываем истекшие ключи
expired_records = await conn.fetch('''
- SELECT tg_id, email FROM keys
+ SELECT tg_id, email, client_id FROM keys
WHERE expiry_time <= $1
''', datetime.utcnow().timestamp() * 1000)
for record in expired_records:
tg_id = record['tg_id']
email = record['email']
+ client_id = record['client_id']
+
+ # Удаляем ключ из базы данных
+ await conn.execute('DELETE FROM keys WHERE client_id = $1', client_id)
+
+ # Создаем сессию с использованием учетных данных
+ session = login_with_credentials(ADMIN_USERNAME, ADMIN_PASSWORD)
+
+ # Удаляем клиента из панели
+ delete_client(session, client_id)
keyboard = InlineKeyboardMarkup(inline_keyboard=[
- [InlineKeyboardButton(text='1 месяц (100 руб.)', callback_data=f'renew_plan|1|{record["client_id"]}')],
- [InlineKeyboardButton(text='3 месяца (250 руб.)', callback_data=f'renew_plan|3|{record["client_id"]}')],
+ [InlineKeyboardButton(text='1 месяц (100 руб.)', callback_data=f'renew_plan|1|{client_id}')],
+ [InlineKeyboardButton(text='3 месяца (250 руб.)', callback_data=f'renew_plan|3|{client_id}')],
[InlineKeyboardButton(text='Пополнить баланс', callback_data='replenish_balance')]
])
- message = f"Ваш ключ {email} уже истек. Пожалуйста, продлите его."
+ message = f"Ваш ключ {email} уже истек и был удален. Пожалуйста, продлите его."
await bot.send_message(chat_id=tg_id, text=message, parse_mode='HTML', reply_markup=keyboard)
finally:
diff --git a/handlers/pay.py b/handlers/pay.py
index a9e19620..901cf5b7 100644
--- a/handlers/pay.py
+++ b/handlers/pay.py
@@ -1,17 +1,18 @@
+import logging
+import uuid
+
import asyncpg
from aiogram import Router, types
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
-from yookassa import Configuration, Payment # Импортируем ЮKассу
from aiohttp import web
-import logging
-import uuid
+from yookassa import Configuration, Payment # Импортируем ЮKассу
from bot import bot
-from config import YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID
-from database import (add_connection, check_connection_exists, get_balance,
- get_key_count, update_balance)
+from config import YOOKASSA_SECRET_KEY, YOOKASSA_SHOP_ID
+from database import (add_connection, check_connection_exists, get_key_count,
+ update_balance)
from handlers.profile import process_callback_view_profile
router = Router()
diff --git a/handlers/profile.py b/handlers/profile.py
index 260d47cb..e3643d2b 100644
--- a/handlers/profile.py
+++ b/handlers/profile.py
@@ -1,5 +1,3 @@
-from datetime import datetime
-
from aiogram import Router, types
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
diff --git a/handlers/solo_pic.png b/handlers/solo_pic.png
deleted file mode 100644
index 484f1bdc..00000000
Binary files a/handlers/solo_pic.png and /dev/null differ
diff --git a/handlers/start.py b/handlers/start.py
index d6d8b725..8888d894 100644
--- a/handlers/start.py
+++ b/handlers/start.py
@@ -1,14 +1,14 @@
import os
-from aiogram import Router, types
+from aiogram import Router
from aiogram.filters import Command
-from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import (BufferedInputFile, CallbackQuery,
InlineKeyboardButton, InlineKeyboardMarkup, Message)
from bot import bot
-from config import ADMIN_ID, CHANNEL_URL, SUPPORT_CHAT_URL # Добавьте SUPPORT_CHAT_URL
+from config import (ADMIN_ID, CHANNEL_URL, # Добавьте SUPPORT_CHAT_URL
+ SUPPORT_CHAT_URL)
router = Router()
@@ -60,10 +60,11 @@ async def handle_about_vpn(callback_query: CallbackQuery):
info_message = (
"*О VPN*\n\n"
- "Мы используем VLESS для обеспечения безопасного и надежного подключения к интернету. "
- "Каждому пользователю предоставляется индивидуальный ключ для подключения. "
- "Этот ключ необходим для использования нашего VPN-сервиса."
+ "Мы используем высокоскоростные серверы в разных локациях и выдаём ключ каждому индивидуально. "
+ "Также мы применяем новейшие протоколы шифрования для обеспечения безопасности ваших данных.\n\n"
+ "Ваш ключ — ваша безопасность! Не передавайте своё шифрование сторонним лицам."
)
+
button_back = InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_menu')
inline_keyboard_back = InlineKeyboardMarkup(inline_keyboard=[[button_back]])