админка в боте
This commit is contained in:
@@ -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()
|
||||
@@ -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 <client_id> <amount>")
|
||||
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 <client_id>")
|
||||
except Exception as e:
|
||||
await message.reply(f"Произошла ошибка: {e}")
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user