Implement pet nicknames system - database, IRC command, validation
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
4de0c1a124
commit
3098be7f36
3 changed files with 101 additions and 2 deletions
|
|
@ -1316,4 +1316,46 @@ class Database:
|
|||
"total_encounters": total_encounters,
|
||||
"total_species": total_species,
|
||||
"completion_percentage": round(completion_percentage, 1)
|
||||
}
|
||||
|
||||
async def set_pet_nickname(self, player_id: int, pet_identifier: str, nickname: str) -> Dict:
|
||||
"""Set a nickname for a pet. Returns result dict."""
|
||||
# Validate nickname
|
||||
if not nickname.strip():
|
||||
return {"success": False, "error": "Nickname cannot be empty"}
|
||||
|
||||
nickname = nickname.strip()
|
||||
if len(nickname) > 20:
|
||||
return {"success": False, "error": "Nickname must be 20 characters or less"}
|
||||
|
||||
# Basic content validation
|
||||
if any(char in nickname for char in ['<', '>', '&', '"', "'"]):
|
||||
return {"success": False, "error": "Nickname contains invalid characters"}
|
||||
|
||||
async with aiosqlite.connect(self.db_path) as db:
|
||||
db.row_factory = aiosqlite.Row
|
||||
|
||||
# Find pet by current nickname or species name
|
||||
cursor = await db.execute("""
|
||||
SELECT p.*, ps.name as species_name
|
||||
FROM pets p
|
||||
JOIN pet_species ps ON p.species_id = ps.id
|
||||
WHERE p.player_id = ?
|
||||
AND (p.nickname = ? OR ps.name = ?)
|
||||
LIMIT 1
|
||||
""", (player_id, pet_identifier, pet_identifier))
|
||||
|
||||
pet = await cursor.fetchone()
|
||||
if not pet:
|
||||
return {"success": False, "error": f"Pet '{pet_identifier}' not found"}
|
||||
|
||||
# Update nickname
|
||||
await db.execute("UPDATE pets SET nickname = ? WHERE id = ?", (nickname, pet["id"]))
|
||||
await db.commit()
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"pet": dict(pet),
|
||||
"old_name": pet["nickname"] or pet["species_name"],
|
||||
"new_nickname": nickname
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue