command handlers always take data param, handler dict

This commit is contained in:
I. H. B.
2025-10-19 10:21:08 +02:00
parent 39f3be6980
commit 487e3b0e02
5 changed files with 46 additions and 84 deletions

View File

@@ -262,6 +262,39 @@ async def spawn_stats(update: Update, context: ContextTypes.DEFAULT_TYPE) -> Non
# 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:
"""
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
try:
# Inspection & World Interaction
if action_type == "inspect_area":
await handle_inspect_area(query, user_id, player)
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()
handler = ACTION_HANDLERS.get(action_type)
if handler:
await handler(query, user_id, player, data)
else:
logger.warning(f"Unknown action type: {action_type}")
await query.answer("Unknown action", show_alert=False)