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)