Add subscription purchase command/Add subscription renewal command/Improve bot version update message

This commit is contained in:
Capybara-z
2025-07-04 17:34:21 +03:00
parent 71c8014be1
commit b817b5f087
3 changed files with 63 additions and 45 deletions
+1 -1
View File
@@ -67,7 +67,7 @@ def get_git_commit_number() -> str:
branch = "dev" branch = "dev"
except Exception as e: except Exception as e:
return f"\n(Требуется обновление через CLI: {e})" return f"\n(Требуется обновление через CLI (команда <code>sudo solobot</code>): {e})"
try: try:
remote_commit = subprocess.check_output( remote_commit = subprocess.check_output(
+10 -3
View File
@@ -53,11 +53,18 @@ class Form(FSMContext):
@router.callback_query(F.data == "create_key") @router.callback_query(F.data == "create_key")
@router.message(F.text == "/buy")
async def confirm_create_new_key( async def confirm_create_new_key(
callback_query: CallbackQuery, state: FSMContext, session: Any callback_query_or_message: CallbackQuery | Message, state: FSMContext, session: Any
): ):
tg_id = callback_query.message.chat.id if isinstance(callback_query_or_message, CallbackQuery):
await handle_key_creation(tg_id, state, session, callback_query) tg_id = callback_query_or_message.message.chat.id
message_or_query = callback_query_or_message
else:
tg_id = callback_query_or_message.chat.id
message_or_query = callback_query_or_message
await handle_key_creation(tg_id, state, session, message_or_query)
async def handle_key_creation( async def handle_key_creation(
+52 -41
View File
@@ -446,46 +446,57 @@ async def handle_reset_hwid(callback_query: CallbackQuery, session: Any):
@router.callback_query(F.data == "renew_menu") @router.callback_query(F.data == "renew_menu")
async def process_renew_menu(callback_query: CallbackQuery, session: Any): @router.message(F.text == "/extend")
tg_id = callback_query.from_user.id async def process_renew_menu(callback_query_or_message: CallbackQuery | Message, session: Any):
records = await get_keys(session, tg_id) try:
servers_dict = await get_servers(session) if isinstance(callback_query_or_message, CallbackQuery):
all_server_names = set() target_message = callback_query_or_message.message
for servers in servers_dict.values(): tg_id = callback_query_or_message.from_user.id
for s in servers: else:
all_server_names.add(s["server_name"]) target_message = callback_query_or_message
builder = InlineKeyboardBuilder() tg_id = callback_query_or_message.from_user.id
moscow_tz = pytz.timezone("Europe/Moscow")
if records: records = await get_keys(session, tg_id)
for record in records: servers_dict = await get_servers(session)
if getattr(record, 'is_frozen', False): all_server_names = set()
continue for servers in servers_dict.values():
alias = record.alias for s in servers:
email = record.email all_server_names.add(s["server_name"])
expiry_time = record.expiry_time builder = InlineKeyboardBuilder()
server_id = record.server_id moscow_tz = pytz.timezone("Europe/Moscow")
key_display = alias.strip() if alias else email if records:
for record in records:
if getattr(record, 'is_frozen', False):
continue
alias = record.alias
email = record.email
expiry_time = record.expiry_time
server_id = record.server_id
key_display = alias.strip() if alias else email
if expiry_time: if expiry_time:
expiry_date_full = datetime.fromtimestamp(expiry_time / 1000, tz=moscow_tz) expiry_date_full = datetime.fromtimestamp(expiry_time / 1000, tz=moscow_tz)
now = datetime.now(moscow_tz) now = datetime.now(moscow_tz)
days_left = (expiry_date_full - now).days days_left = (expiry_date_full - now).days
if (expiry_date_full - now).total_seconds() <= 0: if (expiry_date_full - now).total_seconds() <= 0:
days_text = "🔴 Истекла" days_text = "🔴 Истекла"
else:
days_text = format_days(days_left)
else: else:
days_text = format_days(days_left) days_text = "истекла"
else: server_info = f" ({server_id})" if server_id in all_server_names else ""
days_text = "истекла" btn_text = f"🔑 {key_display} (⏳{days_text}) {server_info}"
server_info = f" ({server_id})" if server_id in all_server_names else "" builder.row(InlineKeyboardButton(text=btn_text, callback_data=f"renew_key|{email}"))
btn_text = f"🔑 {key_display} (⏳{days_text}) {server_info}" text = "Выберите подписку для продления или купите новую"
builder.row(InlineKeyboardButton(text=btn_text, callback_data=f"renew_key|{email}")) builder.row(InlineKeyboardButton(text=ADD_SUB, callback_data="create_key"))
text = "Выберите подписку для продления или купите новую" builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile"))
builder.row(InlineKeyboardButton(text=ADD_SUB, callback_data="create_key")) image_path = os.path.join("img", "pic_view.jpg")
builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile")) await edit_or_send_message(
image_path = os.path.join("img", "pic_view.jpg") target_message=target_message,
await edit_or_send_message( text=text,
target_message=callback_query.message, reply_markup=builder.as_markup(),
text=text, media_path=image_path,
reply_markup=builder.as_markup(), )
media_path=image_path, except Exception as e:
) error_message = f"Ошибка при получении подписок для продления: {e}"
await target_message.answer(text=error_message)