From 0904acad4e00a108a7c3b46dd947a0d705ec87da Mon Sep 17 00:00:00 2001 From: Xiaolan Bot Date: Wed, 25 Feb 2026 16:10:37 +0800 Subject: [PATCH] refactor(ui): unify message formatting to HTML and clean imports --- SubMind.py | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/SubMind.py b/SubMind.py index 744b2a6..62940a7 100644 --- a/SubMind.py +++ b/SubMind.py @@ -22,8 +22,6 @@ from telegram.ext import ( CallbackContext, CallbackQueryHandler, ConversationHandler ) from telegram.error import TelegramError -from telegram.helpers import escape_markdown # Fallback just in case -import html def escape_html(text, version=None): if text is None: return '' @@ -427,19 +425,19 @@ async def start(update: Update, context: CallbackContext): async def help_command(update: Update, context: CallbackContext): - help_text = fr""" -*{escape_html(PROJECT_NAME)} 命令列表* -*🌟 核心功能* -/add\_sub \- 引导您添加一个新的订阅 -/list\_subs \- 列出您的所有订阅 -/list\_categories \- 按分类浏览您的订阅 -*📊 数据管理* -/stats \- 查看按类别分类的订阅统计 -/import \- 通过上传 CSV 文件批量导入订阅 -/export \- 将您的所有订阅导出为 CSV 文件 -*⚙️ 个性化设置* -/set\_currency \`\` \- 设置您的主要货币 -/cancel \- 在任何流程中取消当前操作 + help_text = f""" +{escape_html(PROJECT_NAME)} 命令列表 +🌟 核心功能 +/add_sub - 引导您添加一个新的订阅 +/list_subs - 列出您的所有订阅 +/list_categories - 按分类浏览您的订阅 +📊 数据管理 +/stats - 查看按类别分类的订阅统计 +/import - 通过上传 CSV 文件批量导入订阅 +/export - 将您的所有订阅导出为 CSV 文件 +⚙️ 个性化设置 +/set_currency <代码> - 设置您的主要货币 +/cancel - 在任何流程中取消当前操作 """ await update.message.reply_text(help_text, parse_mode='HTML') @@ -836,7 +834,7 @@ async def add_category_received(update: Update, context: CallbackContext): cursor = conn.cursor() cursor.execute("INSERT OR IGNORE INTO categories (user_id, name) VALUES (?, ?)", (user_id, category_name)) conn.commit() - await update.message.reply_text("第五步:请输入 *下一次付款日期*(例如 2025\\-10\\-01 或 10月1日)", + await update.message.reply_text("第五步:请输入 下一次付款日期(例如 2025-10-01 或 10月1日)", parse_mode='HTML') return ADD_NEXT_DUE @@ -877,7 +875,7 @@ async def add_freq_unit_received(update: Update, context: CallbackContext): await query.edit_message_text("错误:无效的周期单位,请重试。") return ConversationHandler.END sub_data['unit'] = unit - await query.edit_message_text("第七步:请输入周期的数量(例如:每3个月,输入 3)", parse_mode='Markdown') + await query.edit_message_text("第七步:请输入周期的数量(例如:每3个月,输入 3)", parse_mode='HTML') return ADD_FREQ_VALUE @@ -1029,14 +1027,14 @@ async def show_subscription_view(update: Update, context: CallbackContext, sub_i cost_str, converted_cost_str = escape_html(f"{cost:.2f}"), escape_html(f"{converted_cost:.2f}") renewal_text = "手动续费" if renewal_type == 'manual' else "自动续费" reminder_status = "开启" if reminders_enabled else "关闭" - text = (f"*订阅详情: {safe_name}*\n\n" - f"\\- *费用*: `{cost_str} {currency.upper()}` \\(\\~`{converted_cost_str} {main_currency.upper()}`\\)\n" - f"\\- *类别*: `{safe_category}`\n" - f"\\- *下次付款*: `{next_due}` \\(周期: {safe_freq}\\)\n" - f"\\- *续费方式*: `{renewal_text}`\n" - f"\\- *提醒状态*: `{reminder_status}`") + text = (f"订阅详情: {safe_name}\n\n" + f"- 费用: {cost_str} {currency.upper()} (~{converted_cost_str} {main_currency.upper()})\n" + f"- 类别: {safe_category}\n" + f"- 下次付款: {next_due} (周期: {safe_freq})\n" + f"- 续费方式: {renewal_text}\n" + f"- 提醒状态: {reminder_status}") if notes: - text += f"\n\\- *备注*: {escape_html(notes)}" + text += f"\n- 备注: {escape_html(notes)}" keyboard_buttons = [ [InlineKeyboardButton("✏️ 编辑", callback_data=f'edit_{sub_id}'), InlineKeyboardButton("🗑️ 删除", callback_data=f'delete_{sub_id}')], @@ -1173,7 +1171,7 @@ async def button_callback_handler(update: Update, context: CallbackContext): await query.answer("续费失败:无法计算新的到期日期。", show_alert=True) else: await query.answer("续费失败:此订阅可能已被删除或无权限。", show_alert=True) - await query.edit_message_text(text=query.message.text + "\n\n*(错误:此订阅不存在或无权限)*", + await query.edit_message_text(text=query.message.text + "\n\n(错误:此订阅不存在或无权限)", parse_mode='HTML', reply_markup=None) elif action == 'delete': @@ -1481,7 +1479,7 @@ async def _display_reminder_settings(query: CallbackQuery, context: CallbackCont safe_name = escape_html(sub['name']) current_status = f"🔔 提醒设置: {safe_name}\n\n" if sub['renewal_type'] == 'manual': - current_status += f"当前提前提醒: *{sub['reminder_days']}天*\n" + current_status += f"当前提前提醒: {sub['reminder_days']}天\n" keyboard.append([InlineKeyboardButton("⚙️ 更改提前天数", callback_data='remindaction_ask_days')]) keyboard.append([InlineKeyboardButton("« 返回详情", callback_data=f'view_{sub_id}')]) await query.edit_message_text(current_status, reply_markup=InlineKeyboardMarkup(keyboard), parse_mode='HTML')