diff options
Diffstat (limited to 'commands/inventory.py')
-rw-r--r-- | commands/inventory.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/commands/inventory.py b/commands/inventory.py new file mode 100644 index 0000000..1f81d71 --- /dev/null +++ b/commands/inventory.py @@ -0,0 +1,101 @@ +from discord.ext.commands import Bot, Cog +from discord_slash import cog_ext, SlashContext +from discord_slash.utils.manage_commands import create_option, create_choice +from base import config +from models.user import User +from models.level import Level +from models.item import Item +from models.inventory import Inventory +from peewee import DoesNotExist +import random +import yaml + + +class InventoryCmd(Cog): + def __init__(self, bot: Bot): + self.bot = bot + with open("config.yaml", "r") as yamlfile: + config = yaml.load(yamlfile, Loader=yaml.CLoader) + print("Read config successful") + self.config = config + print(config["discord_server_id"]) + + @cog_ext.cog_slash( + name="inventory", + description="See your inventory", + guild_ids=[config["discord_server_id"]], + ) + async def inventory(self, ctx: SlashContext): + user = User.get(User.discord_id == ctx.author_id) + inventory = Inventory.select().join(Item).limit(100).where(Inventory.user == user.id) + print(inventory) + shop_text = "" + for inventory_item in inventory: + shop_text += ( + f"#{inventory_item.item.id}: {inventory_item.item.name} x{inventory_item.stock} \n" + ) + await ctx.send(content=shop_text) + + @cog_ext.cog_slash( + name="use", + description="Use an item", + guild_ids=[config["discord_server_id"]], + options=[ + create_option( + name="item", + description="Item to use", + option_type=3, + required=True, + ), + create_option( + name="target", + description="User to use the item on", + option_type=6, + required=False, + ), + ], + ) + async def use(self, ctx: SlashContext, item: str, target=None): + user = User.get(User.discord_id == ctx.author_id) + + try: + if is_number(item): + using_item = Item.get(Item.id == item) + else: + using_item = Item.get(Item.name == item) + except DoesNotExist: + await ctx.send(content=f"Item {item} not found. Try using the item number") + + try: + print(f"user: {user}, item: {using_item}") + inventory_item = Inventory.get(user=user, item=using_item) + except DoesNotExist: + await ctx.send(content=f"You don't own any {item}!") + if inventory_item.stock > 0: + inventory_item.stock -= 1 + inventory_item.save() + use_text = using_item.text + use_text = use_text.replace("{u}", ctx.author.mention) + if target is not None: + use_text = use_text.replace("{t}", target.mention) + message = await ctx.send(content=f"Solarus used *{using_item.name}*!") + await ctx.send(content=f"*{use_text}*") + if using_item.reward_rank is not None: + print(using_item.reward_rank) + role = ctx.author.guild.get_role(int(using_item.reward_rank)) + await ctx.author.add_roles(role) + else: + await ctx.send(content=f"You don't own any more {using_item.name}!") + + +def is_number(s): + try: + int(s) + return True + except ValueError: + return False + + +def setup(bot): + bot.add_cog(InventoryCmd(bot)) + print("Loaded Inventory") |