Merge pull request #22 from Vladless/youkassa

истекшие ключи автоматически удаляются
This commit is contained in:
Vladislav Lisitsyn
2024-10-02 02:29:44 +03:00
committed by GitHub
9 changed files with 35 additions and 67 deletions
+3 -9
View File
@@ -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()
-10
View File
@@ -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
@@ -1,4 +1,3 @@
import asyncio
import re
import uuid
from datetime import datetime, timedelta
-13
View File
@@ -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):
+18 -20
View File
@@ -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"Ваш ключ <b>{email}</b> уже истек. Пожалуйста, продлите его."
message = f"Ваш ключ <b>{email}</b> уже истек и был удален. Пожалуйста, продлите его."
await bot.send_message(chat_id=tg_id, text=message, parse_mode='HTML', reply_markup=keyboard)
finally:
+7 -6
View File
@@ -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()
-2
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

+7 -6
View File
@@ -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"
"<b>Ваш ключ — ваша безопасность! Не передавайте своё шифрование сторонним лицам.</b>"
)
button_back = InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_menu')
inline_keyboard_back = InlineKeyboardMarkup(inline_keyboard=[[button_back]])