v2.4.10: stats auto-install + i18n for show_proxy_info, traffic stats (SSH+bot)

This commit is contained in:
anten-ka
2026-04-12 07:54:40 +03:00
parent 0e38c2b5b6
commit 7075ff8696
9 changed files with 177 additions and 61 deletions

View File

@@ -100,7 +100,7 @@ logger = logging.getLogger(__name__)
# CONFIGURATION
# ============================================================================
GOTELEGRAM_VERSION = "2.4.9"
GOTELEGRAM_VERSION = "2.4.10"
GOTELEGRAM_CONFIG = "/opt/gotelegram/config.json"
TELEMT_CONFIG = "/etc/telemt/config.toml"
TELEMT_SERVICE = "telemt"
@@ -687,7 +687,7 @@ async def get_status_text(user_id: Optional[int] = None) -> str:
return "\n".join(lines)
async def get_traffic_stats() -> str:
async def get_traffic_stats(user_id: Optional[int] = None) -> str:
"""Get formatted traffic statistics."""
# Read current snapshot
current_file = "/run/gotelegram/stats_current.json"
@@ -697,7 +697,7 @@ async def get_traffic_stats() -> str:
with open(current_file, "r") as f:
current = json.load(f)
except Exception:
return "📊 <b>Статистика</b>\n\n<i>Данные недоступны. Убедитесь что модуль статистики включён.</i>"
return f"📊 <b>{_t(user_id, 'stats_title', 'Statistics')}</b>\n\n<i>{_t(user_id, 'stats_unavailable', 'Data unavailable. Make sure stats module is enabled.')}</i>"
# Read history
history = []
@@ -754,21 +754,27 @@ async def get_traffic_stats() -> str:
return format_bytes(diff), format_rate(rate)
periods = [
("1 мин", 60),
("5 мин", 300),
("60 мин", 3600),
("1 день", 86400),
("7 дней", 604800),
("30 дней", 2592000),
("365 дней", 31536000),
(_t(user_id, "stats_1min", "1 min"), 60),
(_t(user_id, "stats_5min", "5 min"), 300),
(_t(user_id, "stats_60min", "60 min"), 3600),
(_t(user_id, "stats_1day", "1 day"), 86400),
(_t(user_id, "stats_7days", "7 days"), 604800),
(_t(user_id, "stats_30days", "30 days"), 2592000),
(_t(user_id, "stats_365days", "365 days"), 31536000),
]
lines = ["📊 <b>Статистика трафика</b>\n"]
hdr_period = _t(user_id, "stats_hdr_period", "Period")
hdr_traffic = _t(user_id, "stats_hdr_traffic", "Traffic")
hdr_rate = _t(user_id, "stats_hdr_rate", "Rate")
for label, key in [("Proxy (telemt)", "proxy"), ("Сайт (nginx)", "site")]:
lines = [f"📊 <b>{_t(user_id, 'stats_traffic_title', 'Traffic statistics')}</b>\n"]
lbl_proxy = _t(user_id, "stats_proxy_label", "Proxy (telemt)")
lbl_site = _t(user_id, "stats_site_label", "Site (nginx)")
for label, key in [(lbl_proxy, "proxy"), (lbl_site, "site")]:
lines.append(f"\n<b>{label}:</b>")
lines.append("<pre>")
lines.append(f"{'Период':<10}{'Трафик':>10}{'Скорость':>10}")
lines.append(f"{hdr_period:<10}{hdr_traffic:>10}{hdr_rate:>10}")
lines.append("" * 36)
for name, secs in periods:
total, rate = calc_for_period(secs, key)
@@ -783,11 +789,12 @@ async def cb_menu_stats(update: Update, context: ContextTypes.DEFAULT_TYPE) -> N
query = update.callback_query
await query.answer()
stats_text = await get_traffic_stats()
uid = _uid(update)
stats_text = await get_traffic_stats(uid)
keyboard = [
[InlineKeyboardButton("🔄 Обновить", callback_data="menu_stats")],
[InlineKeyboardButton(_t(_uid(update), "btn_back"), callback_data="menu_main")],
[InlineKeyboardButton(_t(uid, "btn_refresh", "🔄 Refresh"), callback_data="menu_stats")],
[InlineKeyboardButton(_t(uid, "btn_back"), callback_data="menu_main")],
]
await safe_edit_message(