""" MusicSkill - Gêneros, Letras e OSTs com fallbacks """ from modules.skills.base_skill import BaseSkill from modules.api_integrations.music_providers import MusicProviders class MusicSkill(BaseSkill): """ Skill de música que pode: 1. Gerar gêneros aleatórios (Genrenator) 2. Buscar letras (Genius - TODO) 3. Buscar OST de animes (Jikan) 4. Dar recomendações personalizadas 5. Fallback com recomendação local """ def __init__(self): super().__init__( name="get_music", description="Gera gêneros, recomendações ou busca informações musicais com fallbacks" ) def get_primary_provider(self): """Tipo de música depende do parâmetro 'tipo'""" return self.music_primary def get_fallback_chain(self): """Fallbacks para entretenimento musical""" return [ self.music_fallback, ] def music_primary(self, tipo: str = "genre", **kwargs) -> dict: """ Provider primário dependendo do tipo: - genre: Gera gênero aleatório - recommendation: Recomendação contextual - anime_ost: Busca trilha sonora de anime - lyrics: Busca letra (não implementado) """ tipo = tipo.lower().strip() if tipo == "genre": mood = kwargs.get("mood") result = MusicProviders.generate_genre_with_details(mood) if result and result.get("sucesso"): return result return {"sucesso": False, "erro": "Geração de gênero falhou"} elif tipo == "recommendation": mood = kwargs.get("mood") result = MusicProviders.generate_genre_with_details(mood) if result and result.get("sucesso"): return result return {"sucesso": False, "erro": "Recomendação falhou"} elif tipo == "anime_ost": anime_name = kwargs.get("anime") if not anime_name: return {"sucesso": False, "erro": "Parâmetro 'anime' obrigatório"} result = MusicProviders.search_anime_ost_jikan(anime_name) if result and result.get("sucesso"): return result return {"sucesso": False, "erro": f"Anime '{anime_name}' não encontrado"} elif tipo == "lyrics": song = kwargs.get("song") artist = kwargs.get("artist") if not song: return {"sucesso": False, "erro": "Parâmetro 'song' obrigatório"} result = MusicProviders.search_lyrics_genius(song, artist) if result and result.get("sucesso"): return result return {"sucesso": False, "erro": "Genius API não disponível (requer chave)"} else: return {"sucesso": False, "erro": f"Tipo '{tipo}' desconhecido"} def music_fallback(self, tipo: str = "genre", **kwargs) -> dict: """ Fallback: Recomendação musical local Sempre retorna algo interessante """ return MusicProviders.get_fallback_recommendation() def _get_error_suggestion(self) -> str: return "Tenta pedir um gênero aleatório com 'tipo=genre' ou uma recomendação com 'tipo=recommendation'"