Add subscription purchase command/Add subscription renewal command/Improve bot version update message
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user