import random from db_utils import get_or_create_user, add_pull, get_db_connection from add_character import add_character def get_character(): ''' Gets a random character from the database''' conn = get_db_connection() cur = conn.cursor() cur.execute('SELECT * FROM characters') characters = cur.fetchall() conn.close() if not characters: return None, None, None, None weights = [c['weight'] for c in characters] chosen = random.choices(characters, weights=weights, k=1)[0] return chosen['id'], chosen['name'], chosen['file_id'], chosen['rarity'] def is_float(val): try: float(val) return True except ValueError: return False def generate_response(parsed_command): '''Given a command with arguments, processes the game state and returns a response''' command, full_user, arguments, note_obj = parsed_command if command == "roll": user_id = get_or_create_user(full_user) character_id, character_name, file_id, rarity = get_character() if not character_id: #TODO: Can't have tuples of a single element # Return these as a dict or object instead. return(f"@{full_user} Uwaaa... something went wrong! No characters found. 😿") add_pull(user_id,character_id) stars = '⭐️' * rarity return([f"@{full_user} 🎲 Congrats! You rolled {stars} **{character_name}**\nShe's all yours now~ 💖✨",[file_id]]) if command == "create": # Example call from bot logic image_url = note_obj.get("files", [{}])[0].get("url") if note_obj.get("files") else None if not image_url: return "You need an image to create a character, dumbass." if len(arguments) != 3: return "Please specify the following attributes in order: name, rarity, drop weighting" if not (arguments[1].isnumeric() and 1 <= int(arguments[1]) <= 5): return f"Invalid rarity: '{arguments[1]}' must be a number between 1 and 5" if not (is_float(arguments[2]) and 0.0 < float(arguments[2]) <= 1.0): return f"Invalid drop weight: '{arguments[2]}' must be a decimal value between 0.0 and 1.0" character_id, file_id = add_character( name=arguments[0], rarity=int(arguments[1]), weight=float(arguments[2]), image_url=image_url ) return([f"Added {arguments[0]}, ID {character_id}.",[file_id]]) return None