async def rename_tree(self, ctx, input_tree_name, *, new_name): """Rename tree of input_tree_name.""" if len(new_name) > 50: await ctx.send(embed=error_embed( ctx.author, "Tree Name cannot be over 50 characters long.")) return user = find_or_insert_user(ctx.author.id) tree_index = find_tree_index(user, input_tree_name) if tree_index == None: await ctx.send(embed=error_embed( ctx.author, f"You do not have a tree with the name {input_tree_name}.")) return user["trees"][tree_index]["name"] = new_name user_col.update_one({"user_id": ctx.author.id}, {"$set": user}) tree_to_display = find_tree(user, new_name) im_tree = create_tree_image(user, tree_to_display) embed = tree_embed(user, ctx.author, tree_to_display) await ctx.send(file=im_tree, embed=embed)
async def change_color(self, ctx, hex_code, *, input_tree_name): """Replaces the background color with a new color.""" user = find_or_insert_user(ctx.author.id) tree_index = find_tree_index(user, input_tree_name) if tree_index == None: await ctx.send(embed=error_embed( ctx.author, f"You do not have a tree with the name {input_tree_name}.")) return # convert to rgb try: h = hex_code.lstrip("#") user["trees"][tree_index]["background_color"] = tuple( int(h[i:i + 2], 16) for i in (0, 2, 4)) except: await ctx.send( embed=error_embed(ctx.author, f"{hex_code} is not valid.")) return user_col.update_one({"user_id": ctx.author.id}, {"$set": user}) tree_to_display = find_tree(user, input_tree_name) im_tree = create_tree_image(user, tree_to_display) embed = tree_embed(user, ctx.author, tree_to_display) await ctx.send(file=im_tree, embed=embed)
async def reset_tree(self, ctx, *, input_tree_name): """Resets the tree of input_tree_name.""" user = find_or_insert_user(ctx.author.id) tree_index = find_tree_index(user, input_tree_name) if tree_index == None: await ctx.send(embed=error_embed( ctx.author, f"You do not have a tree with the name {input_tree_name}.")) return # Reset tree and update in db tree_for_name = find_tree(user, input_tree_name) user["trees"][tree_index] = default_tree.copy() user["trees"][tree_index]["name"] = tree_for_name["name"] user_col.update_one({"user_id": ctx.author.id}, {"$set": user}) tree_to_display = find_tree(user, input_tree_name) im_tree = create_tree_image(user, tree_to_display) embed = tree_embed(user, ctx.author, tree_to_display) await ctx.send(file=im_tree, embed=embed)
async def replace_part(self, ctx, input_inventory_num: int, *, input_tree_name): """Replaces a part of the tree of input_tree_name with the new input_inventory_num.""" user = find_or_insert_user(ctx.author.id) inventory_num = input_inventory_num - 1 if input_inventory_num <= 0: await ctx.send(embed=error_embed( ctx.author, "Inventory numbers must be over 0.")) return elif len(user["inventory"]) - 1 < inventory_num: await ctx.send(embed=error_embed( ctx.author, f"Your inventory only goes up to {len(user['inventory'])}, but #{input_inventory_num} was entered." )) return tree_index = find_tree_index(user, input_tree_name) if tree_index == None: await ctx.send(embed=error_embed( ctx.author, f"You do not have a tree with the name {input_tree_name}.")) return # get new part from user part = user["inventory"].pop(inventory_num) # set tree part to new part part_type = part.pop("type") # add old part to inventory part_for_inventory = user["trees"][tree_index][part_type] part_for_inventory["type"] = part_type user["inventory"].append(part_for_inventory) # add new part to tree user["trees"][tree_index][part_type] = part user_col.update_one({"user_id": ctx.author.id}, {"$set": user}) tree_to_display = find_tree(user, input_tree_name) im_tree = create_tree_image(user, tree_to_display) embed = tree_embed(user, ctx.author, tree_to_display) await ctx.send(file=im_tree, embed=embed)
async def display_tree(self, ctx, *, input_tree_name): """Displays the tree of input_tree_name.""" user = find_or_insert_user(ctx.author.id) tree_to_display = find_tree(user, input_tree_name) if tree_to_display == None: await ctx.send(embed=error_embed( ctx.author, f"You do not have a tree with the name {input_tree_name}.")) return im_tree = create_tree_image(user, tree_to_display) embed = tree_embed(user, ctx.author, tree_to_display) await ctx.send(file=im_tree, embed=embed)
async def create_tree(self, ctx, *, input_tree_name): """Creates a new tree.""" user = find_or_insert_user(ctx.author.id) if len(input_tree_name) > 50: await ctx.send(embed=error_embed( ctx.author, "Tree Name cannot be over 50 characters long.")) return if len(user["trees"]) >= 3: await ctx.send(embed=error_embed( ctx.author, "You are already at the max number of trees! To reset a tree, use the reset [Tree Name] command. To delete a tree, use the delete [Tree Name] command." )) return if find_tree(user, input_tree_name) != None: await ctx.send(embed=error_embed( ctx.author, f"A tree with the name {input_tree_name} already exists.")) return new_tree = default_tree.copy() new_tree["name"] = input_tree_name user["trees"].append(new_tree) user_col.update_one({"user_id": ctx.author.id}, {"$set": user}) tree_to_display = find_tree(user, input_tree_name) if tree_to_display == None: await ctx.send(embed=error_embed( ctx.author, f"You do not have a tree with the name {input_tree_name}.")) return im_tree = create_tree_image(user, tree_to_display) embed = tree_embed(user, ctx.author, tree_to_display) await ctx.send(file=im_tree, embed=embed)
async def view_other_tree(self, ctx, member: discord.User, *, input_tree_name): """Displays the tree of input_tree_name of a certain member.""" user = find_user(member.id) if user == None: await ctx.send(embed=error_embed( ctx.author, f"{member} does not have any trees.")) return tree_to_display = find_tree(user, input_tree_name) if tree_to_display == None: await ctx.send(embed=error_embed( ctx.author, f"{member} does not have a tree with the name {input_tree_name}." )) return im_tree = create_tree_image(user, tree_to_display) embed = tree_embed(user, member, tree_to_display) await ctx.send(file=im_tree, embed=embed)