From 57e813e3d40296a8093feba90411c7b4139b7e49 Mon Sep 17 00:00:00 2001 From: Vladless Date: Sat, 26 Oct 2024 02:34:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B2=20=D0=B1=D0=BE=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database.py | 9 ++++++++ handlers/admin.py | 47 ++++++++++++++++++++++++++++++++++++++ handlers/key_management.py | 9 ++++++-- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 handlers/admin.py diff --git a/database.py b/database.py index 6321f57a..cd5afa70 100644 --- a/database.py +++ b/database.py @@ -216,4 +216,13 @@ async def delete_key(client_id: str): DELETE FROM keys WHERE client_id = $1 ''', client_id) + await conn.close() + +async def add_balance_to_client(client_id: str, amount: float): + conn = await asyncpg.connect(DATABASE_URL) + await conn.execute(''' + UPDATE connections + SET balance = balance + $1 + WHERE tg_id = $2 + ''', amount, client_id) await conn.close() \ No newline at end of file diff --git a/handlers/admin.py b/handlers/admin.py new file mode 100644 index 00000000..1edb3b4a --- /dev/null +++ b/handlers/admin.py @@ -0,0 +1,47 @@ +from aiogram import Router, types +from aiogram.filters import Command +from database import add_balance_to_client, get_balance, check_connection_exists # Импорт необходимых функций +from config import ADMIN_ID + +router = Router() + +@router.message(Command('add_balance')) +async def cmd_add_balance(message: types.Message): + if message.from_user.id != ADMIN_ID: + await message.reply("У вас нет доступа к этой команде.") + return + + try: + _, client_id, amount = message.text.split() + amount = float(amount) + + if not await check_connection_exists(int(client_id)): + await message.reply(f"Клиент с ID {client_id} не найден.") + return + + await add_balance_to_client(int(client_id), amount) + await message.reply(f"Баланс клиента {client_id} увеличен на {amount} у.е.") + except ValueError: + await message.reply("Пожалуйста, используйте формат: /add_balance ") + except Exception as e: + await message.reply(f"Произошла ошибка: {e}") + +@router.message(Command('check_balance')) +async def cmd_check_balance(message: types.Message): + if message.from_user.id != ADMIN_ID: + await message.reply("У вас нет доступа к этой команде.") + return + + try: + _, client_id = message.text.split() + + if not await check_connection_exists(int(client_id)): + await message.reply(f"Клиент с ID {client_id} не найден.") + return + + balance = await get_balance(int(client_id)) + await message.reply(f"Баланс клиента {client_id}: {balance} у.е.") + except ValueError: + await message.reply("Пожалуйста, используйте формат: /check_balance ") + except Exception as e: + await message.reply(f"Произошла ошибка: {e}") diff --git a/handlers/key_management.py b/handlers/key_management.py index 43276d3e..8e07ad3f 100644 --- a/handlers/key_management.py +++ b/handlers/key_management.py @@ -1,4 +1,3 @@ -import re import uuid from datetime import datetime, timedelta @@ -195,10 +194,14 @@ async def process_message_to_all(message: types.Message, state: FSMContext): await state.clear() -@router.message() +@router.message() async def handle_text(message: types.Message, state: FSMContext): current_state = await state.get_state() + # Проверяем, является ли сообщение командой + if message.text.startswith('/'): + return message.text # Возвращаем команду + if message.text in ["/send_to_all"]: await send_message_to_all_clients(message, state) return @@ -220,9 +223,11 @@ async def handle_text(message: types.Message, state: FSMContext): if current_state == Form.waiting_for_key_name.state: await handle_key_name_input(message, state) + return if message.text == "/backup": await backup_command(message) + return elif current_state is None: await start_command(message)