Files
unstable-cogs/rpg/inventory.py
Unstable Kitsune e0958f6f2a feat: Add RPG cog with character and inventory features
Sets up RPG system as a Redbot cog with core mechanics
Implements character creation, class selection, and stat management
Adds action commands for attacking and healing
Provides inventory and shop functionality for item management
Introduces interactive UI menus for user engagement
2025-09-11 17:23:45 -04:00

80 lines
3.4 KiB
Python

import discord
from redbot.core import commands, Config
class RPGInventory:
"""
Manages character inventories for the RPG system.
"""
def __init__(self, rpg_cog):
self.rpg_cog = rpg_cog
super().__init__()
@commands.group()
async def inventory(self, ctx):
"""Main RPG command group."""
pass
@inventory.command(name="add")
async def add_item(self, ctx, user: discord.Member, item_name, quantity=1):
"""
Adds an item to the user's active character's inventory.
"""
character_data = await self.rpg_cog.config.member(user).get_raw("active_character")
if not character_data:
return await self.rpg_cog.send_message(ctx, f"{user.mention}, you don't have an active character.")
inventory = character_data.get("inventory", {})
if item_name in inventory:
inventory[item_name] += quantity
else:
inventory[item_name] = quantity
await self.rpg_cog.config.member(user).set_raw("active_character", "inventory", value=inventory)
await self.rpg_cog.send_message(ctx, f"{quantity} {item_name}(s) added to your inventory!")
@inventory.command(name="remove")
async def remove_item(self, ctx, user: discord.Member, item_name, quantity=1):
"""
Removes an item from the user's active character's inventory.
"""
character_data = await self.rpg_cog.config.member(user).get_raw("active_character")
if not character_data:
return await self.rpg_cog.send_message(ctx, f"{user.mention}, you don't have an active character.")
inventory = character_data.get("inventory", {})
if item_name in inventory:
if inventory[item_name] >= quantity:
inventory[item_name] -= quantity
if inventory[item_name] == 0:
del inventory[item_name]
await self.rpg_cog.config.member(user).set_raw("active_character", "inventory", value=inventory)
await self.rpg_cog.send_message(ctx, f"{quantity} {item_name}(s) removed from your inventory!")
else:
await self.rpg_cog.send_message(ctx, f"You don't have enough {item_name}s.")
else:
await self.rpg_cog.send_message(ctx, f"You don't have any {item_name}s in your inventory.")
@inventory.command(name="bag")
async def get_inventory(self, user):
"""
Retrieves the inventory of the user's active character.
"""
character_data = await self.rpg_cog.config.member(user).get_raw("active_character")
if not character_data:
return None # Or handle the case where the user has no active character
return character_data.get("inventory", {})
@inventory.command(name="showbag")
async def display_inventory(self, ctx, user: discord.Member):
"""
Displays the user's inventory in a user-friendly format.
"""
inventory = await self.get_inventory(user)
if not inventory:
return await self.rpg_cog.send_message(ctx, f"{user.mention}, your inventory is empty!")
# Format the inventory for display (you can customize this)
inventory_str = "\n".join([f"{item}: {quantity}" for item, quantity in inventory.items()])
embed = discord.Embed(title=f"{user.name}'s Inventory", description=inventory_str)
await self.rpg_cog.send_message(ctx, embed=embed)