Files
echoes-of-the-ash/docs/BOT_REFACTOR_PROGRESS.md
2025-11-07 15:27:13 +01:00

4.1 KiB

Bot Refactor Progress

Status: Bot successfully connecting to API!

The bot is now running and making API calls. Initial testing shows successful communication.

Completed

API Endpoints (Internal)

  • GET /api/internal/player/{telegram_id} - Get player by Telegram ID
  • POST /api/internal/player - Create player
  • POST /api/internal/player/{player_id}/move - Move player
  • GET /api/internal/player/{player_id}/inspect - Inspect area
  • POST /api/internal/player/{player_id}/interact - Interact with object
  • GET /api/internal/player/{player_id}/inventory - Get inventory
  • POST /api/internal/player/{player_id}/use_item - Use item
  • POST /api/internal/player/{player_id}/pickup - Pick up item
  • POST /api/internal/player/{player_id}/drop_item - Drop item
  • POST /api/internal/player/{player_id}/equip - Equip item
  • POST /api/internal/player/{player_id}/unequip - Unequip item

API Client (bot/api_client.py)

  • get_player() - Get player by Telegram ID
  • create_player() - Create new player
  • move_player() - Move in direction
  • inspect_area() - Inspect current area
  • interact() - Interact with object
  • get_inventory() - Get inventory
  • use_item() - Use item
  • pickup_item() - Pick up item
  • drop_item() - Drop item
  • equip_item() - Equip item
  • unequip_item() - Unequip item

Bot Handlers Updated

  • bot/handlers.py - Main button handler now uses API to get player
  • bot/commands.py - /start command uses API
  • bot/action_handlers.py - Movement handler updated
  • bot/inventory_handlers.py - Inventory menu uses API

Database Functions Added

  • api/database.py::remove_item_from_inventory()
  • api/database.py::update_item_equipped_status()

In Progress

Testing

  • 🔄 Movement system
  • 🔄 Inventory system
  • 🔄 Interaction system

Known Issues

  1. ⚠️ GET /api/internal/player/None/inventory - Some handler is passing None instead of player_id
    • Likely in inventory_handlers.py when player dict doesn't have 'id' field
    • Need to trace which handler is causing this

Not Yet Updated (Still using bot/database.py directly)

Handlers that need refactoring:

  • action_handlers.py:

    • handle_inspect_area() - Uses get_dropped_items_in_location, get_wandering_enemies_in_location
    • handle_attack_wandering() - Combat-related
    • handle_inspect_interactable() - Uses get_cooldown
    • handle_action() - Uses get_cooldown, set_cooldown, item rewards
  • inventory_handlers.py:

    • handle_inventory_item() - Uses get_inventory_item
    • handle_inventory_use() - Uses multiple database calls
    • handle_inventory_drop() - Uses add_dropped_item_to_location
    • handle_inventory_equip() - Direct database operations
    • handle_inventory_unequip() - Direct database operations
  • combat_handlers.py - ALL handlers (combat system not in API yet)

  • pickup_handlers.py - Uses get_dropped_items_in_location

  • profile_handlers.py - Stats management

  • corpse_handlers.py - Looting system

API endpoints still needed:

  • Combat system endpoints
  • Dropped items endpoints
  • Wandering enemies endpoints
  • Status effects endpoints
  • Cooldown management endpoints
  • Corpse/looting endpoints
  • Stats/profile endpoints

Testing Plan

  1. Bot startup
  2. API connectivity
  3. 🔄 Test /start command (player creation)
  4. 🔄 Test movement
  5. Test inventory viewing
  6. Test item usage
  7. Test interactions
  8. Test combat
  9. Test pickup/drop
  10. Test equipment

Next Steps

  1. Debug the None player_id issue - Find where we're not properly passing player['id']
  2. Test basic movement - Try moving between locations
  3. Add missing API endpoints - Combat, cooldowns, dropped items, etc.
  4. Continue refactoring handlers - One module at a time
  5. Remove bot/database.py - Once all handlers use API

Current Status: Bot is operational and communicating with API. Basic functionality working, deeper features need more endpoints and refactoring.