правки и доработки интерфейса
This commit is contained in:
+15
-27
@@ -6,7 +6,7 @@ from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
|
||||
from bot import bot
|
||||
from config import ADMIN_ID, DATABASE_URL
|
||||
from database import get_balance, get_key_count, update_balance
|
||||
from database import get_balance, get_key_count, update_balance, add_connection, check_connection_exists
|
||||
from handlers.profile import process_callback_view_profile
|
||||
|
||||
router = Router()
|
||||
@@ -17,9 +17,6 @@ class ReplenishBalanceState(StatesGroup):
|
||||
waiting_for_admin_confirmation = State()
|
||||
|
||||
async def send_message_with_deletion(chat_id, text, reply_markup=None, state=None, message_key='last_message_id'):
|
||||
"""
|
||||
Отправляет новое сообщение и удаляет предыдущее сообщение (если оно существует), сохраненное в состоянии FSM.
|
||||
"""
|
||||
if state:
|
||||
try:
|
||||
state_data = await state.get_data()
|
||||
@@ -42,10 +39,20 @@ async def send_message_with_deletion(chat_id, text, reply_markup=None, state=Non
|
||||
async def process_callback_replenish_balance(callback_query: types.CallbackQuery, state: FSMContext):
|
||||
tg_id = callback_query.from_user.id
|
||||
|
||||
# Проверяем, есть ли у пользователя ключи
|
||||
key_count = await get_key_count(tg_id)
|
||||
|
||||
# Если ключей нет, проверяем, существует ли запись с таким tg_id
|
||||
if key_count == 0:
|
||||
exists = await check_connection_exists(tg_id)
|
||||
# Если записи нет, создаем нового клиента в базе данных
|
||||
if not exists:
|
||||
await add_connection(tg_id, balance=0.0, trial=0)
|
||||
|
||||
await state.set_state(ReplenishBalanceState.choosing_transfer_method)
|
||||
keyboard = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[InlineKeyboardButton(text='По реквизитам', callback_data='transfer_method_requisites')],
|
||||
[InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_profile')] # Кнопка "Назад"
|
||||
[InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_profile')]
|
||||
])
|
||||
|
||||
await callback_query.message.edit_text(
|
||||
@@ -54,13 +61,10 @@ async def process_callback_replenish_balance(callback_query: types.CallbackQuery
|
||||
)
|
||||
await callback_query.answer()
|
||||
|
||||
|
||||
@router.callback_query(lambda c: c.data == 'back_to_profile')
|
||||
async def back_to_profile_handler(callback_query: types.CallbackQuery, state: FSMContext):
|
||||
await process_callback_view_profile(callback_query, state)
|
||||
|
||||
|
||||
|
||||
@router.callback_query(lambda c: c.data.startswith('transfer_method_'))
|
||||
async def process_transfer_method_selection(callback_query: types.CallbackQuery, state: FSMContext):
|
||||
data = callback_query.data.split('_', 2)
|
||||
@@ -76,7 +80,7 @@ async def process_transfer_method_selection(callback_query: types.CallbackQuery,
|
||||
[InlineKeyboardButton(text='100 RUB', callback_data='amount_100')],
|
||||
[InlineKeyboardButton(text='300 RUB', callback_data='amount_300')],
|
||||
[InlineKeyboardButton(text='500 RUB', callback_data='amount_500')],
|
||||
[InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_profile')] # Кнопка "Назад"
|
||||
[InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_profile')]
|
||||
])
|
||||
|
||||
await callback_query.message.edit_text(
|
||||
@@ -90,7 +94,6 @@ async def process_transfer_method_selection(callback_query: types.CallbackQuery,
|
||||
await send_message_with_deletion(callback_query.from_user.id, "Неверный метод перевода.", state=state, message_key='transfer_method_error_message_id')
|
||||
return
|
||||
|
||||
|
||||
@router.callback_query(lambda c: c.data.startswith('amount_'))
|
||||
async def process_amount_selection(callback_query: types.CallbackQuery, state: FSMContext):
|
||||
data = callback_query.data.split('_', 1)
|
||||
@@ -102,18 +105,15 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F
|
||||
amount_str = data[1]
|
||||
amount = int(amount_str)
|
||||
|
||||
# Получаем ID сообщения с кнопками выбора суммы
|
||||
state_data = await state.get_data()
|
||||
amount_selection_message_id = state_data.get('amount_selection_message_id')
|
||||
|
||||
# Удаляем сообщение с кнопками выбора суммы
|
||||
if amount_selection_message_id:
|
||||
try:
|
||||
await bot.delete_message(chat_id=callback_query.from_user.id, message_id=amount_selection_message_id)
|
||||
except Exception as e:
|
||||
print(f"Ошибка при удалении сообщения: {e}")
|
||||
|
||||
# Обновляем состояние и сохраняем выбранную сумму
|
||||
await state.update_data(amount=amount)
|
||||
await state.set_state(ReplenishBalanceState.waiting_for_admin_confirmation)
|
||||
|
||||
@@ -126,10 +126,9 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F
|
||||
"После перевода отправьте чек и дождитесь подтверждения."
|
||||
)
|
||||
|
||||
# Редактируем текущее сообщение
|
||||
await callback_query.message.edit_text(
|
||||
text=message,
|
||||
reply_markup=None # Или добавьте клавиатуру, если нужно
|
||||
reply_markup=None
|
||||
)
|
||||
|
||||
admin_keyboard = InlineKeyboardMarkup(inline_keyboard=[
|
||||
@@ -147,8 +146,6 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F
|
||||
await send_message_with_deletion(ADMIN_ID, admin_message, reply_markup=admin_keyboard, state=state, message_key='admin_request_message_id')
|
||||
await callback_query.answer()
|
||||
|
||||
|
||||
|
||||
@router.callback_query(lambda c: c.data.startswith('admin_'))
|
||||
async def process_admin_confirmation(callback_query: types.CallbackQuery, state: FSMContext):
|
||||
if callback_query.from_user.id != ADMIN_ID:
|
||||
@@ -169,35 +166,26 @@ async def process_admin_confirmation(callback_query: types.CallbackQuery, state:
|
||||
try:
|
||||
user_id = int(user_id_str)
|
||||
|
||||
# Получаем данные из состояния для удаления сообщения с реквизитами
|
||||
state_data = await state.get_data()
|
||||
requisites_message_id = state_data.get('requisites_message_id')
|
||||
|
||||
if action == 'confirm':
|
||||
# Подключаемся к базе данных PostgreSQL
|
||||
conn = await asyncpg.connect(DATABASE_URL)
|
||||
try:
|
||||
# Обновляем баланс пользователя
|
||||
await update_balance(user_id, amount)
|
||||
|
||||
# Получаем обновленный баланс
|
||||
balance = await get_balance(user_id)
|
||||
|
||||
# Создаем клавиатуру с кнопкой "Профиль"
|
||||
profile_button = InlineKeyboardButton(text='Профиль', callback_data='view_profile')
|
||||
profile_keyboard = InlineKeyboardMarkup(inline_keyboard=[[profile_button]])
|
||||
|
||||
# Отправляем уведомление с кнопкой "Профиль" администратору
|
||||
await send_message_with_deletion(callback_query.from_user.id, f"Баланс пользователя успешно пополнен на {amount} RUB.\nТекущий баланс: {balance}", state=state, message_key='admin_confirm_message_id')
|
||||
|
||||
# Отправляем уведомление пользователю с кнопкой "Профиль"
|
||||
await bot.send_message(
|
||||
user_id,
|
||||
f"Ваш баланс был успешно пополнен на {amount} RUB.",
|
||||
reply_markup=profile_keyboard
|
||||
)
|
||||
|
||||
# Удаляем сообщение с реквизитами
|
||||
requisites_message_id = state_data.get('requisites_message_id')
|
||||
if requisites_message_id:
|
||||
try:
|
||||
@@ -218,4 +206,4 @@ async def process_admin_confirmation(callback_query: types.CallbackQuery, state:
|
||||
|
||||
finally:
|
||||
await state.clear()
|
||||
await callback_query.answer()
|
||||
await callback_query.answer()
|
||||
|
||||
Reference in New Issue
Block a user