Files
TG_autoposter/app/utils/keyboards.py
Andrew K. Choi 48f8c6f0eb UserBot Integration Complete: Fixed container startup, integrated UserBot menu to main bot
MAJOR FIXES:
 Fixed UserBot container startup by making TELEGRAM_BOT_TOKEN optional
 Broke circular import chain between app modules
 Made Config.validate() conditional for UserBot-only mode
 Removed unused celery import from userbot_service.py

INTEGRATION:
 UserBot menu now accessible from main bot /start command
 Added 🤖 UserBot button to main keyboard
 Integrated userbot_manager.py handlers:
   - userbot_menu: Main UserBot interface
   - userbot_settings: Configuration
   - userbot_collect_groups: Gather all user groups
   - userbot_collect_members: Parse group members
 UserBot handlers properly registered in ConversationHandler

CONTAINERS:
 tg_autoposter_bot: Running and handling /start commands
 tg_autoposter_userbot: Running as standalone microservice
 All dependent services (Redis, PostgreSQL, Celery workers) operational

STATUS: Bot is fully operational and ready for testing
2025-12-21 12:09:11 +09:00

94 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from telegram import InlineKeyboardMarkup, InlineKeyboardButton
from enum import Enum
class CallbackType(str, Enum):
"""Типы callback'ов для кнопок"""
MANAGE_MESSAGES = "manage_messages"
MANAGE_GROUPS = "manage_groups"
MANAGE_USERBOT = "manage_userbot"
CREATE_MESSAGE = "create_message"
CREATE_GROUP = "create_group"
VIEW_MESSAGE = "view_message"
VIEW_GROUP = "view_group"
DELETE_MESSAGE = "delete_message"
DELETE_GROUP = "delete_group"
ADD_TO_GROUP = "add_to_group"
REMOVE_FROM_GROUP = "remove_from_group"
SEND_NOW = "send_now"
LIST_MESSAGES = "list_messages"
LIST_GROUPS = "list_groups"
BACK = "back"
MAIN_MENU = "main_menu"
def get_main_keyboard() -> InlineKeyboardMarkup:
"""Главное меню"""
keyboard = [
[
InlineKeyboardButton("📨 Сообщения", callback_data=CallbackType.MANAGE_MESSAGES.value),
InlineKeyboardButton("👥 Группы", callback_data=CallbackType.MANAGE_GROUPS.value),
],
[
InlineKeyboardButton("🤖 UserBot", callback_data=CallbackType.MANAGE_USERBOT.value),
]
]
return InlineKeyboardMarkup(keyboard)
def get_messages_keyboard() -> InlineKeyboardMarkup:
"""Меню управления сообщениями"""
keyboard = [
[InlineKeyboardButton(" Новое сообщение", callback_data=CallbackType.CREATE_MESSAGE.value)],
[InlineKeyboardButton("📜 Список сообщений", callback_data=CallbackType.LIST_MESSAGES.value)],
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.MAIN_MENU.value)],
]
return InlineKeyboardMarkup(keyboard)
def get_groups_keyboard() -> InlineKeyboardMarkup:
"""Меню управления группами"""
keyboard = [
[InlineKeyboardButton(" Добавить группу", callback_data=CallbackType.CREATE_GROUP.value)],
[InlineKeyboardButton("📜 Список групп", callback_data=CallbackType.LIST_GROUPS.value)],
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.MAIN_MENU.value)],
]
return InlineKeyboardMarkup(keyboard)
def get_back_keyboard() -> InlineKeyboardMarkup:
"""Кнопка назад"""
keyboard = [[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.MAIN_MENU.value)]]
return InlineKeyboardMarkup(keyboard)
def get_message_actions_keyboard(message_id: int) -> InlineKeyboardMarkup:
"""Действия с сообщением"""
keyboard = [
[InlineKeyboardButton("📤 Отправить", callback_data=f"send_msg_{message_id}")],
[InlineKeyboardButton("🗑️ Удалить", callback_data=f"delete_msg_{message_id}")],
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.LIST_MESSAGES.value)],
]
return InlineKeyboardMarkup(keyboard)
def get_group_actions_keyboard(group_id: int) -> InlineKeyboardMarkup:
"""Действия с группой"""
keyboard = [
[InlineKeyboardButton("📝 Сообщения", callback_data=f"group_messages_{group_id}")],
[InlineKeyboardButton("🗑️ Удалить", callback_data=f"delete_group_{group_id}")],
[InlineKeyboardButton("⬅️ Назад", callback_data=CallbackType.LIST_GROUPS.value)],
]
return InlineKeyboardMarkup(keyboard)
def get_yes_no_keyboard(action: str) -> InlineKeyboardMarkup:
"""Подтверждение да/нет"""
keyboard = [
[
InlineKeyboardButton("✅ Да", callback_data=f"confirm_{action}"),
InlineKeyboardButton("❌ Нет", callback_data=CallbackType.MAIN_MENU.value),
]
]
return InlineKeyboardMarkup(keyboard)