- Fix \!team command to redirect to team builder web page instead of showing IRC list - Add usage commands to inventory items showing "\!use <item name>" for each item - Implement Coin Pouch treasure item with 1-3 coin rewards (rare drop rate) - Fix gym badges leaderboard database query with proper COALESCE and CASE syntax - Improve inventory item display with styled command instructions and monospace code blocks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
113 lines
No EOL
4.8 KiB
Python
113 lines
No EOL
4.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Pet management commands module for PetBot"""
|
|
|
|
from .base_module import BaseModule
|
|
|
|
class PetManagement(BaseModule):
|
|
"""Handles team, pets, and future pet management commands"""
|
|
|
|
def get_commands(self):
|
|
return ["team", "pets", "activate", "deactivate", "nickname"]
|
|
|
|
async def handle_command(self, channel, nickname, command, args):
|
|
if command == "team":
|
|
await self.cmd_team(channel, nickname)
|
|
elif command == "pets":
|
|
await self.cmd_pets(channel, nickname)
|
|
elif command == "activate":
|
|
await self.cmd_activate(channel, nickname, args)
|
|
elif command == "deactivate":
|
|
await self.cmd_deactivate(channel, nickname, args)
|
|
elif command == "nickname":
|
|
await self.cmd_nickname(channel, nickname, args)
|
|
|
|
async def cmd_team(self, channel, nickname):
|
|
"""Redirect player to their team builder page"""
|
|
player = await self.require_player(channel, nickname)
|
|
if not player:
|
|
return
|
|
|
|
# Redirect to web interface for team management
|
|
self.send_message(channel, f"⚔️ {nickname}: Manage your team at: http://petz.rdx4.com/teambuilder/{nickname}")
|
|
|
|
async def cmd_pets(self, channel, nickname):
|
|
"""Show link to pet collection web page"""
|
|
player = await self.require_player(channel, nickname)
|
|
if not player:
|
|
return
|
|
|
|
# Send URL to player's profile page instead of PM spam
|
|
self.send_message(channel, f"{nickname}: View your complete pet collection at: http://petz.rdx4.com/player/{nickname}#pets")
|
|
|
|
async def cmd_activate(self, channel, nickname, args):
|
|
"""Activate a pet for battle (PM only)"""
|
|
# Redirect to PM for privacy
|
|
if not args:
|
|
self.send_pm(nickname, "Usage: !activate <pet_name>")
|
|
self.send_message(channel, f"{nickname}: Pet activation instructions sent via PM!")
|
|
return
|
|
|
|
player = await self.require_player(channel, nickname)
|
|
if not player:
|
|
return
|
|
|
|
pet_name = " ".join(self.normalize_input(args))
|
|
result = await self.database.activate_pet(player["id"], pet_name)
|
|
|
|
if result["success"]:
|
|
pet = result["pet"]
|
|
display_name = pet["nickname"] or pet["species_name"]
|
|
position = result.get("team_position", "?")
|
|
self.send_pm(nickname, f"✅ {display_name} is now active for battle! Team position: {position}")
|
|
self.send_message(channel, f"{nickname}: Pet activated successfully!")
|
|
else:
|
|
self.send_pm(nickname, f"❌ {result['error']}")
|
|
self.send_message(channel, f"{nickname}: Pet activation failed - check PM for details!")
|
|
|
|
async def cmd_deactivate(self, channel, nickname, args):
|
|
"""Deactivate a pet to storage (PM only)"""
|
|
# Redirect to PM for privacy
|
|
if not args:
|
|
self.send_pm(nickname, "Usage: !deactivate <pet_name>")
|
|
self.send_message(channel, f"{nickname}: Pet deactivation instructions sent via PM!")
|
|
return
|
|
|
|
player = await self.require_player(channel, nickname)
|
|
if not player:
|
|
return
|
|
|
|
pet_name = " ".join(self.normalize_input(args))
|
|
result = await self.database.deactivate_pet(player["id"], pet_name)
|
|
|
|
if result["success"]:
|
|
pet = result["pet"]
|
|
display_name = pet["nickname"] or pet["species_name"]
|
|
self.send_pm(nickname, f"📦 {display_name} moved to storage!")
|
|
self.send_message(channel, f"{nickname}: Pet deactivated successfully!")
|
|
else:
|
|
self.send_pm(nickname, f"❌ {result['error']}")
|
|
self.send_message(channel, f"{nickname}: Pet deactivation failed - check PM for details!")
|
|
|
|
async def cmd_nickname(self, channel, nickname, args):
|
|
"""Set a nickname for a pet"""
|
|
if len(args) < 2:
|
|
self.send_message(channel, f"{nickname}: Usage: !nickname <pet> <new_nickname>")
|
|
self.send_message(channel, f"Example: !nickname Charmander Flamey")
|
|
return
|
|
|
|
player = await self.require_player(channel, nickname)
|
|
if not player:
|
|
return
|
|
|
|
# Split args into pet identifier and new nickname
|
|
pet_identifier = self.normalize_input(args[0])
|
|
new_nickname = " ".join(args[1:])
|
|
|
|
result = await self.database.set_pet_nickname(player["id"], pet_identifier, new_nickname)
|
|
|
|
if result["success"]:
|
|
old_name = result["old_name"]
|
|
new_name = result["new_nickname"]
|
|
self.send_message(channel, f"✨ {nickname}: {old_name} is now nicknamed '{new_name}'!")
|
|
else:
|
|
self.send_message(channel, f"❌ {nickname}: {result['error']}") |