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
This commit is contained in:
2025-09-11 17:23:45 -04:00
parent 859ac84b68
commit e0958f6f2a
9 changed files with 756 additions and 0 deletions

55
rpg/menu.py Normal file
View File

@@ -0,0 +1,55 @@
import discord
from .check import Check
class RPGMenu(discord.ui.View):
def __init__(self, rpg_cog):
super().__init__()
self.rpg_cog = rpg_cog
@discord.ui.button(label="Create Character", style=discord.ButtonStyle.primary, custom_id="create_character_button")
async def create_character_button_callback(self, interaction: discord.Interaction, button: discord.ui.Button):
await interaction.response.send_modal(CreateCharacterModal(self.rpg_cog))
@discord.ui.button(label="Attack", style=discord.ButtonStyle.red, custom_id="attack_button")
async def attack_button_callback(self, interaction: discord.Interaction, button: discord.ui.Button):
# You'll need to implement the target selection logic here (e.g., using a dropdown or another interaction)
target = None # Placeholder for now
if target:
await self.rpg_cog.actions.attack(interaction, interaction.user, target)
else:
await interaction.response.send_message("You need to select a target to attack.", ephemeral=True)
@discord.ui.button(label="Heal", style=discord.ButtonStyle.green, custom_id="heal_button")
async def heal_button_callback(self, interaction: discord.Interaction, button: discord.ui.Button):
await self.rpg_cog.actions.heal(interaction, interaction.user)
@discord.ui.button(label="Stats", style=discord.ButtonStyle.blurple, custom_id="stats_button")
async def stats_button_callback(self, interaction: discord.Interaction, button: discord.ui.Button):
await self.rpg_cog.actions.display_stats(interaction, interaction.user)
@discord.ui.button(label="Inventory", style=discord.ButtonStyle.grey, custom_id="inventory_button")
async def inventory_button_callback(self, interaction: discord.Interaction, button: discord.ui.Button):
await self.rpg_cog.inventory.display_inventory(interaction, interaction.user)
class CreateCharacterModal(discord.ui.Modal):
def __init__(self, rpg_cog):
super().__init__(title="Create Character")
self.rpg_cog = rpg_cog
self.character_name = discord.ui.TextInput(
label="Enter your character's name:",
placeholder="e.g., BraveAdventurer",
required=True,
max_length=30
)
self.add_item(self.character_name)
async def on_submit(self, interaction: discord.Interaction):
character_name = self.character_name.value
#author = interaction.user
try:
await self.rpg_cog.actions.create_character(interaction, interaction.user, character_name)
except Exception as e:
await interaction.response.send_message(f"```An error occurred while creating your character: {e}```")
self.rpg_cog.log.error(f"Error in create_character: {e}")