command handlers always take data param, handler dict
This commit is contained in:
@@ -58,7 +58,7 @@ async def get_player_status_text(telegram_id: int) -> str:
|
|||||||
# INSPECTION & WORLD INTERACTION HANDLERS
|
# INSPECTION & WORLD INTERACTION HANDLERS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
async def handle_inspect_area(query, user_id: int, player: dict):
|
async def handle_inspect_area(query, user_id: int, player: dict, data: list):
|
||||||
"""Handle the inspect area action."""
|
"""Handle the inspect area action."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
location_id = player['location_id']
|
location_id = player['location_id']
|
||||||
@@ -266,7 +266,7 @@ async def handle_action(query, user_id: int, player: dict, data: list):
|
|||||||
# NAVIGATION & MOVEMENT HANDLERS
|
# NAVIGATION & MOVEMENT HANDLERS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
async def handle_main_menu(query, user_id: int, player: dict):
|
async def handle_main_menu(query, user_id: int, player: dict, data: list):
|
||||||
"""Return to main menu."""
|
"""Return to main menu."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
status_text = await get_player_status_text(user_id)
|
status_text = await get_player_status_text(user_id)
|
||||||
@@ -282,7 +282,7 @@ async def handle_main_menu(query, user_id: int, player: dict):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def handle_move_menu(query, user_id: int, player: dict):
|
async def handle_move_menu(query, user_id: int, player: dict, data: list):
|
||||||
"""Show movement options."""
|
"""Show movement options."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
location = game_world.get_location(player['location_id'])
|
location = game_world.get_location(player['location_id'])
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from data.world_loader import game_world
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
async def handle_combat_attack(query, user_id: int, player: dict):
|
async def handle_combat_attack(query, user_id: int, player: dict, data: list):
|
||||||
"""Handle player attack action in combat."""
|
"""Handle player attack action in combat."""
|
||||||
from bot import combat
|
from bot import combat
|
||||||
await query.answer()
|
await query.answer()
|
||||||
@@ -54,7 +54,7 @@ async def handle_combat_attack(query, user_id: int, player: dict):
|
|||||||
await query.answer(message, show_alert=False)
|
await query.answer(message, show_alert=False)
|
||||||
|
|
||||||
|
|
||||||
async def handle_combat_flee(query, user_id: int, player: dict):
|
async def handle_combat_flee(query, user_id: int, player: dict, data: list):
|
||||||
"""Handle flee attempt in combat."""
|
"""Handle flee attempt in combat."""
|
||||||
from bot import combat
|
from bot import combat
|
||||||
await query.answer()
|
await query.answer()
|
||||||
@@ -99,7 +99,7 @@ async def handle_combat_flee(query, user_id: int, player: dict):
|
|||||||
await query.answer(message, show_alert=False)
|
await query.answer(message, show_alert=False)
|
||||||
|
|
||||||
|
|
||||||
async def handle_combat_use_item_menu(query, user_id: int, player: dict):
|
async def handle_combat_use_item_menu(query, user_id: int, player: dict, data: list):
|
||||||
"""Show menu of items that can be used in combat."""
|
"""Show menu of items that can be used in combat."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
keyboard = await keyboards.combat_items_keyboard(user_id)
|
keyboard = await keyboards.combat_items_keyboard(user_id)
|
||||||
@@ -148,7 +148,7 @@ async def handle_combat_use_item(query, user_id: int, player: dict, data: list):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def handle_combat_back(query, user_id: int, player: dict):
|
async def handle_combat_back(query, user_id: int, player: dict, data: list):
|
||||||
"""Return to combat menu from item selection."""
|
"""Return to combat menu from item selection."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
combat_data = await database.get_combat(user_id)
|
combat_data = await database.get_combat(user_id)
|
||||||
|
|||||||
110
bot/handlers.py
110
bot/handlers.py
@@ -262,6 +262,39 @@ async def spawn_stats(update: Update, context: ContextTypes.DEFAULT_TYPE) -> Non
|
|||||||
# BUTTON CALLBACK ROUTER
|
# BUTTON CALLBACK ROUTER
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
|
# Create handler mapping
|
||||||
|
ACTION_HANDLERS = {
|
||||||
|
"inspect_area": handle_inspect_area,
|
||||||
|
"attack_wandering": handle_attack_wandering,
|
||||||
|
"inspect": handle_inspect_interactable,
|
||||||
|
"action": handle_action,
|
||||||
|
"inspect_area_menu": handle_inspect_area,
|
||||||
|
"main_menu": handle_main_menu,
|
||||||
|
"move_menu": handle_move_menu,
|
||||||
|
"move": handle_move,
|
||||||
|
"profile": handle_profile,
|
||||||
|
"spend_points_menu": handle_spend_points_menu,
|
||||||
|
"spend_point": handle_spend_point,
|
||||||
|
"inventory_menu": handle_inventory_menu,
|
||||||
|
"inventory_item": handle_inventory_item,
|
||||||
|
"inventory_use": handle_inventory_use,
|
||||||
|
"inventory_drop": handle_inventory_drop,
|
||||||
|
"inventory_equip": handle_inventory_equip,
|
||||||
|
"inventory_unequip": handle_inventory_unequip,
|
||||||
|
"pickup_menu": handle_pickup_menu,
|
||||||
|
"pickup": handle_pickup,
|
||||||
|
"combat_attack": handle_combat_attack,
|
||||||
|
"combat_flee": handle_combat_flee,
|
||||||
|
"combat_use_item_menu": handle_combat_use_item_menu,
|
||||||
|
"combat_use_item": handle_combat_use_item,
|
||||||
|
"combat_back": handle_combat_back,
|
||||||
|
"loot_player_corpse": handle_loot_player_corpse,
|
||||||
|
"take_corpse_item": handle_take_corpse_item,
|
||||||
|
"scavenge_npc_corpse": handle_scavenge_npc_corpse,
|
||||||
|
"scavenge_corpse_item": handle_scavenge_corpse_item,
|
||||||
|
"no_op": lambda query, user_id, player, data: query.answer()
|
||||||
|
}
|
||||||
|
|
||||||
async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||||
"""
|
"""
|
||||||
Main router for button callbacks.
|
Main router for button callbacks.
|
||||||
@@ -294,80 +327,9 @@ async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE) ->
|
|||||||
|
|
||||||
# Route to appropriate handler based on action type
|
# Route to appropriate handler based on action type
|
||||||
try:
|
try:
|
||||||
# Inspection & World Interaction
|
handler = ACTION_HANDLERS.get(action_type)
|
||||||
if action_type == "inspect_area":
|
if handler:
|
||||||
await handle_inspect_area(query, user_id, player)
|
await handler(query, user_id, player, data)
|
||||||
elif action_type == "attack_wandering":
|
|
||||||
await handle_attack_wandering(query, user_id, player, data)
|
|
||||||
elif action_type == "inspect":
|
|
||||||
await handle_inspect_interactable(query, user_id, player, data)
|
|
||||||
elif action_type == "action":
|
|
||||||
await handle_action(query, user_id, player, data)
|
|
||||||
elif action_type == "inspect_area_menu":
|
|
||||||
await handle_inspect_area(query, user_id, player)
|
|
||||||
|
|
||||||
# Navigation & Menu
|
|
||||||
elif action_type == "main_menu":
|
|
||||||
await handle_main_menu(query, user_id, player)
|
|
||||||
elif action_type == "move_menu":
|
|
||||||
await handle_move_menu(query, user_id, player)
|
|
||||||
elif action_type == "move":
|
|
||||||
await handle_move(query, user_id, player, data)
|
|
||||||
|
|
||||||
# Profile & Stats
|
|
||||||
elif action_type == "profile":
|
|
||||||
await handle_profile(query, user_id, player)
|
|
||||||
elif action_type == "spend_points_menu":
|
|
||||||
await handle_spend_points_menu(query, user_id, player)
|
|
||||||
elif action_type == "spend_point":
|
|
||||||
await handle_spend_point(query, user_id, player, data)
|
|
||||||
|
|
||||||
# Inventory Management
|
|
||||||
elif action_type == "inventory_menu":
|
|
||||||
await handle_inventory_menu(query, user_id, player)
|
|
||||||
elif action_type == "inventory_item":
|
|
||||||
await handle_inventory_item(query, user_id, player, data)
|
|
||||||
elif action_type == "inventory_use":
|
|
||||||
await handle_inventory_use(query, user_id, player, data)
|
|
||||||
elif action_type == "inventory_drop":
|
|
||||||
await handle_inventory_drop(query, user_id, player, data)
|
|
||||||
elif action_type == "inventory_equip":
|
|
||||||
await handle_inventory_equip(query, user_id, player, data)
|
|
||||||
elif action_type == "inventory_unequip":
|
|
||||||
await handle_inventory_unequip(query, user_id, player, data)
|
|
||||||
|
|
||||||
# Item Pickup
|
|
||||||
elif action_type == "pickup_menu":
|
|
||||||
await handle_pickup_menu(query, user_id, player, data)
|
|
||||||
elif action_type == "pickup":
|
|
||||||
await handle_pickup(query, user_id, player, data)
|
|
||||||
|
|
||||||
# Combat Actions
|
|
||||||
elif action_type == "combat_attack":
|
|
||||||
await handle_combat_attack(query, user_id, player)
|
|
||||||
elif action_type == "combat_flee":
|
|
||||||
await handle_combat_flee(query, user_id, player)
|
|
||||||
elif action_type == "combat_use_item_menu":
|
|
||||||
await handle_combat_use_item_menu(query, user_id, player)
|
|
||||||
elif action_type == "combat_use_item":
|
|
||||||
await handle_combat_use_item(query, user_id, player, data)
|
|
||||||
elif action_type == "combat_back":
|
|
||||||
await handle_combat_back(query, user_id, player)
|
|
||||||
|
|
||||||
# Corpse Looting
|
|
||||||
elif action_type == "loot_player_corpse":
|
|
||||||
await handle_loot_player_corpse(query, user_id, player, data)
|
|
||||||
elif action_type == "take_corpse_item":
|
|
||||||
await handle_take_corpse_item(query, user_id, player, data)
|
|
||||||
elif action_type == "scavenge_npc_corpse":
|
|
||||||
await handle_scavenge_npc_corpse(query, user_id, player, data)
|
|
||||||
elif action_type == "scavenge_corpse_item":
|
|
||||||
await handle_scavenge_corpse_item(query, user_id, player, data)
|
|
||||||
|
|
||||||
# No-op (for disabled buttons)
|
|
||||||
elif action_type == "no_op":
|
|
||||||
await query.answer()
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logger.warning(f"Unknown action type: {action_type}")
|
logger.warning(f"Unknown action type: {action_type}")
|
||||||
await query.answer("Unknown action", show_alert=False)
|
await query.answer("Unknown action", show_alert=False)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from data.items import ITEMS
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
async def handle_inventory_menu(query, user_id: int, player: dict):
|
async def handle_inventory_menu(query, user_id: int, player: dict, data: list):
|
||||||
"""Show player inventory."""
|
"""Show player inventory."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
inventory_items = await database.get_inventory(user_id)
|
inventory_items = await database.get_inventory(user_id)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from data.world_loader import game_world
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
async def handle_profile(query, user_id: int, player: dict):
|
async def handle_profile(query, user_id: int, player: dict, data: list):
|
||||||
"""Show player profile and stats."""
|
"""Show player profile and stats."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
from bot import combat
|
from bot import combat
|
||||||
@@ -70,7 +70,7 @@ async def handle_profile(query, user_id: int, player: dict):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def handle_spend_points_menu(query, user_id: int, player: dict):
|
async def handle_spend_points_menu(query, user_id: int, player: dict, data: list):
|
||||||
"""Show stat point spending menu."""
|
"""Show stat point spending menu."""
|
||||||
await query.answer()
|
await query.answer()
|
||||||
unspent = player.get('unspent_points', 0)
|
unspent = player.get('unspent_points', 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user