
    [aj                     V   d dl Z d dlmZ d dlmZmZ d dlZd dlZd dlmZ  e       Z	 ej                  e j                  j                  d            ZdZdZd	Zd
Z ej$                   eeeeeddd            Zd ZdedefdZddedefdZe	j3                  d      defd       Zy)    N)datetime)FastAPIRequest)SpotifyOAuthANTHROPIC_API_KEY)api_key 73162ec026ad4d1ea8493c1bce0900d3 43dca155cb4b4bc0ba51ba8eeec94b5ezhttp://127.0.0.1:8080/callbackz3user-modify-playback-state user-read-playback-stateFTzspotify_token.txt)	client_idclient_secretredirect_uriscopeopen_browsershow_dialog
cache_path)auth_managerc                    	 t         j                  | dd      }|d   d   }|sy|d   d   }|d   d	   }|d   d
   d   d	   }t         j                  |g       d| d| dS # t        $ r}t	        d|        Y d }~yd }~ww xY w)N   track)qlimittypetracksitemsu'   Não encontrei essa música no Spotify.r   urinameartists)uriszTocando z de z no Spotify.zErro no Spotify: u]   Não consegui tocar. Verifique se o Spotify está aberto e ativo em algum dos seus aparelhos.)spsearchstart_playback	Exceptionprint)nome_musica
resultadosr   	track_urinome_encontradoartistaes          !/home/ubuntu/main_claude_alexa.pytocar_musica_no_spotifyr+       s    oYYAGYD
H%g.<1Ie$	 )F+)I&q)&1 		{+/*$wi|DD o!!%&nos   "A# =A# #	B,A??Btextreturnc                     	 t         j                  j                  dddd| dg      }d}|j                  D ]  }t	        |d      s|j
                  } |S # t        $ r}t        d	|        Y d
}~yd
}~ww xY w)z?Envia o texto para a API da Anthropic e retorna a resposta purazclaude-sonnet-5i   u%  Você é um corretor ortográfico cirúrgico para comandos musicais do Spotify. REGRA 1: Corrija os erros fonéticos da Alexa ('M4 ia', 'M4 mia' ou 'M4' viram sempre 'M4IA'). REGRA 2: É ESTRITAMENTE PROIBIDO adicionar nomes de artistas ou feats que não foram ditos na entrada. REGRA 3: Remova preposições ('de', 'do', 'da'). REGRA 4: PREFERÊNCIA DE VERSÃO: Para músicas do universo Eurodance, Flash House, Freestyle e Eletrônica, inclua os termos 'Club Mix', '12 Inch' ou 'Extended' nas palavras-chave para priorizar as versões longas de pista. REGRA 5: BUGS DO SPOTIFY: Mapeie músicas com erros de cadastro conhecidos para a grafia quebrada exata da plataforma (ex: 'I'm Alone' deve ser mapeado como 'I&apos;m alone'). CONTEXTO DE DESEMPATE: Se a transcrição for ambígua, cruze com o gosto do usuário, focado em Eurodance, Flash House, Freestyle (Ice MC, Information Society, SNAP!, 2 Unlimited, Cappella, Club House), eletrônica e clássicos (Armin van Buuren, Michael Jackson, Gaviões da Fiel). EXEMPLOS DO SEU COMPORTAMENTO OBRIGATÓRIO:
Entrada: 'M4 mia'
Saída: [PLAY: M4IA]
Entrada: 'im alone club house'
Saída: [PLAY: I&apos;m alone Club House 12 Inch]
Entrada: 'rhythm is a dancer snap'
Saída: [PLAY: Rhythm Is A Dancer SNAP Club Mix]
Entrada: 'toca gavioes'
Saída: [PLAY: Gavioes da Fiel]user)rolecontent)model
max_tokenssystemmessages r,   zErro na API do Claude: Nu?   Desculpe, o assistente inteligente está fora do ar no momento.)clientr5   creater1   hasattrr,   r"   r#   )r,   messagerespostablocor)   s        r*   process_with_clauder=   4   s    %Q//((#., -3 ) 
: __ 	&Euf% ::	&  Q's+,PQs   AA A 	A8 A33A8end_sessionc                     dd| d|ddS )u=   Constrói o payload JSON exatamente como a Amazon Alexa exige1.0	PlainText)r   r,   )outputSpeechshouldEndSessionversionresponse )r,   r>   s     r*   build_alexa_responserH   ]   s(      $ !,
	 	    z/alexarequestc                   K   | j                          d {   }|j                  di       j                  d      }|dk(  rt        dd      S |dk(  rb	 |j                  di       j                  di       j                  d	i       }|j                  d
i       j                  dd      }t        j                         j                  d      }t        d| d| d       |st        d      S t        |      }t        j                         j                  d      }t        d| d| d       d|v rv|j                  d      d   j                  d      d   j                         }t        j                         j                  d      }t        d| d| d       t        |      }n|}t        |d      S |dk(  rdi dS y 7 # t        $ r#}	t        d|	        t        d      cY d }	~	S d }	~	ww xY ww)NrJ   r   LaunchRequestu3   Estou ouvindo. O que você quer tocar ou perguntar?F)r>   IntentRequestintentslotsCatchAllSlotvaluer6   z%d/%m/%Y %H:%M:%S[z] ==> 1. ALEXA OUVIU: T)flushu&   Não consegui ouvir o comando direito.z] ==> 2. CLAUDE RESPONDEU: z[PLAY:r   ]r   z] ==> 3. BUSCA NO SPOTIFY: zErro: u.   Houve um erro de comunicação com o servidor.SessionEndedRequestr@   rD   )jsongetrH   r   nowstrftimer#   r=   splitstripr+   r"   )
rJ   payloadreq_typerO   spoken_textagoraclaude_replyr$   texto_para_alexar)   s
             r*   alexa_webhookrb   l   s    LLN"G {{9b)--f5H ?"#$Yglmm ?"	ZKK	2.228R@DDWbQE))NB7;;GRHKLLN++,?@EAeW2;-@M+,TUU /{;LLLN++,?@EAeW7~FdS <'*00:1=CCCHKQQS //0CD% ;K=IQUV#:;#G #/ '(8dKK (( b11 )W #L  	ZF1#,'(XYY	ZsM   G3G=G3BG +G3,C	G 5G3	G0G+%G0&G3+G00G3)T)osr   fastapir   r   	anthropicspotipyspotipy.oauth2r   app	AnthropicenvironrW   r7   SPOTIPY_CLIENT_IDSPOTIPY_CLIENT_SECRETSPOTIPY_REDIRECT_URIr   Spotifyr   r+   strr=   boolrH   postrb   rG   rI   r*   <module>rr      s    	  $   ' i			RZZ^^4G%H	I 7 : 7  	>W__,'%
"# o('Qc 'Qc 'QRs   (-2 -2 -2rI   