eternal-path-bot / cogs /inventory.py
bartendr604's picture
Initial deployment — Eternal Path Discord bot
9bb83f4 verified
import discord
from discord.ext import commands
from discord import app_commands
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from database.models import get_db
class Inventory(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command(name="inventory", description="View your sticker collection")
async def inventory(self, interaction: discord.Interaction):
await interaction.response.defer(ephemeral=True)
conn = get_db()
c = conn.cursor()
c.execute("""
SELECT s.* FROM stickers s
JOIN inventory i ON s.id = i.sticker_id
WHERE i.discord_user_id = ?
ORDER BY s.character, s.name
""", (str(interaction.user.id),))
owned = c.fetchall()
conn.close()
if not owned:
await interaction.followup.send(
"You don't own any stickers yet! Use `/shop` to browse.", ephemeral=True
)
return
embed = discord.Embed(
title=f"🎒 {interaction.user.display_name}'s Collection",
description=f"You own **{len(owned)}** sticker(s)",
color=0x9B59B6
)
by_char = {}
for s in owned:
by_char.setdefault(s["character"], []).append(s["name"])
for char, names in by_char.items():
embed.add_field(name=f"✦ {char}", value="\n".join(f"• {n}" for n in names), inline=True)
await interaction.followup.send(embed=embed, ephemeral=True)
@app_commands.command(name="use", description="Show off a sticker you own")
@app_commands.describe(sticker_id="The sticker ID to display")
async def use(self, interaction: discord.Interaction, sticker_id: str):
await interaction.response.defer()
conn = get_db()
c = conn.cursor()
c.execute("""
SELECT s.* FROM stickers s
JOIN inventory i ON s.id = i.sticker_id
WHERE i.discord_user_id = ? AND s.id = ?
""", (str(interaction.user.id), sticker_id))
s = c.fetchone()
conn.close()
if not s:
await interaction.followup.send(
f"You don't own `{sticker_id}`. Use `/shop` to buy it or `/inventory` to see what you have."
)
return
if not os.path.exists(s["image_path"]):
await interaction.followup.send("Image file not found.")
return
with open(s["image_path"], "rb") as f:
file = discord.File(f, filename="sticker.jpg")
await interaction.followup.send(
content=f"✨ **{interaction.user.display_name}** uses **{s['name']}**!",
file=file
)
async def setup(bot):
await bot.add_cog(Inventory(bot))