diff --git a/README.md b/README.md index dc336a5..ec037e1 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ curl -Ls https://raw.githubusercontent.com/grendervilll/mitactl/main/bootstrap.s - [x] Защита сессий: динамический Secure cookie, in-memory rate limiter - [x] Bootstrap-установщик (одна команда) - [x] Мониторинг сервера: CPU, RAM, диск на дашборде (автообновление каждые 2 сек) -- [x] Telegram-бот: inline-кнопки, меню пользователя с конфигом/Karing, create/delete/WARP/дашборд/безопасность +- [x] Telegram-бот: inline-меню, user\_ подменю, конфиг/Karing, 4096-char truncate, 100-btn limit - [x] Установка: веб-панель, CLI, полный установщик; авто-ID через API; venv + зеркала PyPI + fallback на apt ### ⬜ Запланировано diff --git a/bot.py b/bot.py index 628731b..bf260df 100644 --- a/bot.py +++ b/bot.py @@ -198,16 +198,21 @@ async def show_users(update: Update, context: ContextTypes.DEFAULT_TYPE): w = "🟢" if name in warp_users else "⚪" o = "🟢" if s.get("online") else "🔴" day = f"{s.get('day_mb', 0):.1f} МБ" if s.get("day_mb") else "—" - wk = f"{s.get('week_mb', 0):.1f} МБ" if s.get("week_mb") else "—" mon = f"{s.get('month_mb', 0):.1f} МБ" if s.get("month_mb") else "—" ename = escape_md(name) - lines.append(f"{o} {ename} {w} день: {day} нед: {wk} мес: {mon}") - # Каждый пользователь — одна кнопка, открывает меню с конфигом и Karing + lines.append(f"{o} {ename} {w} д:{day} м:{mon}") user_buttons.append([InlineKeyboardButton( f"{'🟢 ' if s.get('online') else ''}{name}", callback_data=f"user_{name}" )]) + # Ограничение Telegram: 4096 символов на сообщение + text = "\n".join(lines) + if len(text) > 4000: + text = text[:3997] + "…" + if len(user_buttons) > 96: + user_buttons = user_buttons[:96] + user_buttons.extend([ [InlineKeyboardButton("➕ Создать", callback_data="create"), InlineKeyboardButton("🗑 Удалить", callback_data="delete_menu")], @@ -223,7 +228,7 @@ async def show_users(update: Update, context: ContextTypes.DEFAULT_TYPE): ]) await query.edit_message_text( - "\n".join(lines), + text, reply_markup=InlineKeyboardMarkup(user_buttons), parse_mode="MarkdownV2" )