Files
TG_autoposter/USERBOT_INTEGRATION_QUICK_START.md
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

4.8 KiB

🎯 UserBot Integration - Quick Start

What's New?

UserBot management is now integrated into the main Telegram bot. You can:

  • Manage UserBot settings
  • Collect all groups you're a member of
  • Parse members from selected groups
  • Save everything to PostgreSQL

Menu Structure

/start
│
└─ Main Menu 🤖
   ├─ 📨 Messages (existing)
   ├─ 👥 Groups (existing)
   └─ 🤖 UserBot ← NEW!
       ├─ ⚙️ Settings
       │   └─ Check status / Initialize
       ├─ 📥 Collect Groups
       │   └─ Get all groups you're in
       └─ 👥 Collect Members
           └─ Select group → Parse members

Three Simple Steps

Step 1: Initialize UserBot

  1. Send /start
  2. Click "🤖 UserBot"
  3. Click "⚙️ Настройки" (Settings)
  4. Click "🔄 Инициализировать" (Initialize)

Step 2: Collect Groups

  1. In UserBot menu, click "📥 Собрать группы" (Collect Groups)
  2. Wait for completion
  3. See list of your groups and member counts
  4. Data saved to DB automatically

Step 3: Collect Members

  1. In UserBot menu, click "👥 Собрать участников" (Collect Members)
  2. Select a group from the list
  3. Wait for member parsing
  4. See statistics (total, bots, admins, owners)
  5. Data saved to DB automatically

File Changes

New Files Created

  • app/handlers/userbot_manager.py - UserBot control handlers
  • USERBOT_INTEGRATION_GUIDE.md - Full documentation

Files Modified

  • app/__init__.py - Added UserBot handlers and ConversationHandler import
  • app/handlers/__init__.py - Added userbot handler exports
  • app/utils/keyboards.py - Added MANAGE_USERBOT callback type, updated main keyboard
  • app/database/repository.py - Added get_active_groups() and get_group_by_id() methods
  • app/userbot/parser.py - Added parse_groups_user_in() method

Key Functions

In app/handlers/userbot_manager.py:

async def userbot_menu()              # Main UserBot menu
async def userbot_settings()          # Settings dialog
async def userbot_init()              # Initialize UserBot
async def userbot_collect_groups()    # Collect groups
async def userbot_collect_members()   # Select group for parsing
async def userbot_parse_members()     # Parse members of group
async def cancel_userbot()            # Cancel operation

In app/userbot/parser.py:

async def parse_groups_user_in()      # Get all user's groups

In app/database/repository.py:

async def get_active_groups()         # Get active groups
async def get_group_by_id()           # Get group by ID

Database

New/Modified Tables

  • groups - Stores group information
  • group_members - Stores member information

Data Saved

Groups:

  • chat_id, title, description
  • members_count, is_active
  • created_at, updated_at

Members:

  • user_id, username, first_name, last_name
  • is_bot, is_admin, is_owner
  • group_id (reference to group)

Testing

Before deploying, test:

  1. Initialize:

    /start → 🤖 UserBot → ⚙️ Settings → 🔄 Initialize
    
  2. Collect Groups:

    🤖 UserBot → 📥 Collect Groups → ✅ See list
    
  3. Collect Members:

    🤖 UserBot → 👥 Collect Members → Select group → ✅ See stats
    
  4. Verify Data:

    docker-compose exec postgres psql -U admin -d tg_autoposter
    SELECT COUNT(*) FROM groups;
    SELECT COUNT(*) FROM group_members;
    \q
    

Workflow States

The UserBot manager uses these states (in userbot_manager.py):

USERBOT_MENU = 1
USERBOT_SETTINGS = 2
USERBOT_COLLECTING_GROUPS = 3
USERBOT_SELECT_GROUP = 4
USERBOT_COLLECTING_MEMBERS = 5

Error Handling

The integration includes error handling for:

  • UserBot not initialized → Prompt to initialize
  • FloodWait errors → Graceful retry
  • Permission errors → Inform user
  • No groups found → Clear message
  • Database errors → Error reporting

Callbacks

New callbacks added:

userbot_menu              - Main menu
userbot_settings          - Settings dialog
userbot_init              - Initialize UserBot
userbot_collect_groups    - Collect groups
userbot_collect_members   - Select group
userbot_members_\d+       - Parse specific group

Next Steps

  1. Test the new UserBot menu
  2. Verify group collection works
  3. Verify member collection works
  4. Check database for saved data
  5. Deploy to production

Full Documentation

For detailed information, see:

  • USERBOT_INTEGRATION_GUIDE.md - Complete user manual
  • docs/USERBOT_MICROSERVICE.md - Technical details
  • USERBOT_README.md - Overview in Russian

Status: Ready for Testing
Date: 2024
Components: 1 new file + 5 files modified