
    /i:B              	          d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m	Z	m
Z
mZ d dlZd dlZd dlZd dlZej                   j#                  ej                   j%                  ej                   j'                  ej                   j)                  e      d                   d dlmZ d d	lmZ d d
l d d
l d dlmZ dZdZdZ dZ! e ee       ee      Z"d Z#d Z$d Z%d Z&d Z'ddZ(ddZ)e*dk(  rd dl+Z+ e+jX                   e)d             yy)    N)TelegramClient)StringSession)GetHistoryRequest)MessageEntityTextUrl)datetime	timedeltatimezonez..)JupAPI)PumpAPI)*)ClickHouseManageriw 27ae6b4c3d2d3f66d31c0e1022dbbec7aa  1BJWap1wBuxlI-5OXiBKpzh30xDfIzFniBzgEi0_VElmK0Ajw1mTMQe5qIQXWSDUZBhrhvc9ClxGBcNbOMx44HcKRpMTMlQ2fGeb3k3ByjvX4YqU_Q1M5fwxdqtLSBImne8F-AOLaIuPn-egKgSfRysxsv5GbqSsJ0nN9v0ueRTNIKzeSHAwfkZq1QPAQZrv3Md7qNpyb78XR4SX0pZ-9UQwNadVGN_bFyERU3Mk1Zc3pQHCfLU1i6rMHjfXg1Svkkrr-yw8XwZBpb98G9szTrgCubZr5Tp3OVA2zEpJBXQq8ZA6TtyyiUOUFbww5kilS07-MfXcdWzedmU0PpCqUrnuu8BieXn8=pumpfun_letsbonk_migrationsc                     g }| j                   r=| j                   D ].  }t        |t              s|j                  |j                         0 |S )N)entities
isinstancer   appendurl)msgurlsentitys      </home/ubuntu/SOL_API/sol_API/src/v3/utils/pump_migrations.pyextract_urlsr      sC    D
||ll 	(F&"67FJJ'	( K    c                 h    | D ]-  }t        j                  d|      }|s|j                  d      c S  y )Nz.https://solscan\.io/account/([A-Za-z0-9]{32,})   )researchgroup)r   r   matchs      r   extract_solscan_accountr!   '   s8     "		KSQ;;q>!" r   c                    | j                   }|rd|d d vry |j                         }d }d }|D ]U  }t        j                  d|      }|r|j	                  d      }t        j                  d|      }|sE|j	                  d      }W t        |       }|s2|D ]-  }	t        j                  d|	      }
|
s|
j	                  d      } n | j                  }t        |d      r|j                  d       }|r|||d	S y )
NzPUMPFUN MIGRATED2   z#Mint:\s*([1-9A-HJ-NP-Za-km-z]{32,})r   z,Dev:.*?profile/([1-9A-HJ-NP-Za-km-z]{32,})\)z2cielo\.finance/profile/([1-9A-HJ-NP-Za-km-z]{32,})replacetzinfo
token_hashmigration_startedcreator_hash)	message
splitlinesr   r   r   r   datehasattrr$   )r   textlinesr(   r*   line
mint_match	dev_matchr   r   profile_matchr)   s               r   parse_messager5   .   s   ;;D %T#2Y6OOE JL 	.YYEtL
#))!,J IIMtT	$??1-L	. D 	CII&[]`aM,2215	  ),-55T5B$!2(
 	

 r   c                 >  K   g }t        j                         t        |       z
  j                  dddd      }t        j                         j                  dddd      }t        j                          d {    t        j                  t               d {   }d}d}d}|st	        t        ||d d|ddd             d {   }|j                  }	|	s	 |S |	D ]  }
|
j                  }t        |d      r|j                  d       }n&t        |t              rt        j                  |d      }||k  rd	} n4||k\  rct        |
      }|sq|j!                  |d
   |d   |d   d        |	d   j"                  }t%        j&                  d       |s|S 7 7 7 ׭w)Nr   )hourminutesecondmicrosecondd   F)peer	offset_idoffset_date
add_offsetlimitmax_idmin_idhashr$   r%   z%Y-%m-%d %H:%M:%STr(   r)   r*   r'   r   )r   nowr   r$   clientstart
get_entitychannel_usernamer   messagesr-   r.   r   strstrptimer5   r   idtimesleep)daysmigrated
start_dateend_dater   r=   r@   stop_parsinghistoryrJ   r   msg_timeparseds                r   fetch_messagesrX   ]   s    H,,.9T?2;;1UVde;fJ||~%%1Qqa%PH
,,.$$%566FIEL0	 
 	 	 ##4 O1  	CxxHx+#++4+8Hc*#,,X7JK*$#8#"3'F"("6)/0C)D$*>$:! 	* RLOO	

1M P O_ 6	sD   A4F6F7 FF+FFBFAFFFFc           
         g }t        |       D ]  \  }}|dkD  rt        j                  d       t        |t              r|j                  d      }n|}d|i}|sLt        j                  |      }|sut        j                  d|        |j                  d      rI|d   }t        |t              r	 t        j                  |d      }n)t        |t              st        j                  d|        d	}d	}|j                  d
      }	t        j                  d| d       t               j                  |      }
|
rP|
j                  d      }|
j                  d      }|	xs |
j                  d
      }	t        j                  d|        nt        j                  d|        |j!                  |||	||d	d       t        j                  d|dz    dt#        |        d|        |j                  d      xs |}|j                  d      xs |j                  d
      }	|j                  d      rW|d   }t        |t              r	 t        j                  |d      }nDt        |t              s4t        j                  d|        zt        j                  d|        |j                  d      }|j                  d      }|j                  d      }|r|r|	s|st        j                  d| d       |st        j                  d| d       |	st        j                  d| d       t               j                  |      }
|
rX|xs |
j                  d      }|xs |
j                  d      }|	xs |
j                  d
      }	t        j                  d|        nt        j                  d |        |j!                  |||	|||d       t        j                  d|dz    dt#        |        d!|xs |xs |         |S #  t        j                  d|        Y xY w#  t        j                  d|        Y 5xY w)"u   
    Получает время миграций и создателей токенов.
    Комбинирует данные из Telegram сообщений и PumpAPI().get_pump_token_info()
    r   g?r(   zNo PumpAPI info for token r)   z%m/%d/%Y %H:%M:%Sz#Could not parse migration date for z#Invalid migration_started type for Nr*   zTrying JupAPI for token z (PumpAPI failed)...symboliconzGot data from JupAPI for zJupAPI also failed for )r(   r)   r*   rZ   r[   namezProcessed token r   /z from Telegram+JupAPI: mintcreatorzNo migration_started for token 	image_urir\   zSymbol missing for z, trying JupAPI...zIcon missing for zcreator_hash missing for zEnhanced data from JupAPI for z!JupAPI also returned no data for : )	enumeraterN   rO   r   dictgetr   get_pump_token_infopump_loggerwarningrK   r   rL   infor
   get_token_pool_infor   len)
token_listrQ   i
token_data
token_mint	pump_infor)   rZ   r[   r*   jup_infor(   r\   s                r   get_tokens_inforq      sK   
 H":. qe:q5JJsO j$'#5J $J&
3J //
;	"<ZL IJ~~12$./B$C!/5!,4,=,=>OQd,e) $$5x@''*Mj\(Z[ )~~n=  #;J<G[!\]!877
C%\\(3F#<</D#/#O8<<3OL$$'@%MN''*A*(NO",):$0$  !    #3AaC5#j/9JJablam!no ]]6*8j
 }}Y/Q:>>.3Q >>-. *+> ?+S1(0(9(9:KM`(a%   18<##&I*$VW"A* NO x(}}[)}}V$ T  #6zlBT!UV  #4ZL@R!ST  #<ZLHZ![\x33J?H98<<#93x||F3+Kx||N/K  #A*!NO##&G
|$TU$!2(
 	 	+AaC5#j/1B"TEaVEaWaDbcdcqef Oq!#++.QR\Q],^_ T''*Mj\(Z[s   2PP&P#&Qc                    | st         j                  d       y	 t               }| D cg c]  }|j                  dd       }}t	               }|rd}	 t        dt        |      |      D ]i  }||||z    }dj                  |D 	cg c]  }	d|	 d
 c}	      }
d	|
 d
}|j                  |      }|sH|j                  |D ch c]  }|d   	 c}       k t         j                  dt        |       d       g }t        t        j                               }d}| D ]  }|j                  dd      }||v rt         j                  d|        |dz  }7|j                  dd      }|j                  d      }t        |t              rt        |j!                               }n|}|}d}d}|j                  dd      }|j                  dd      }|j#                  |||||||||f	        |st         j                  d| d       yg d}d}d}d}t        dt        |      |      D ]y  }||||z    }|j%                  d||      }|r:|t        |      z  }t         j'                  d||z  dz    dt        |       d       Zt         j)                  d||z  dz           d}{ |r"|dkD  rt         j                  d| d | d!       y|dkD  r)t         j                  d"| d#t        |       d$| d!       yt         j)                  d%       yc c}w c c}	w c c}w # t        $ r#}t         j                  d|        Y d}~Ed}~ww xY w# t        $ r"}t         j)                  d&|        Y d}~yd}~ww xY w)'zB
    Insert migrated tokens to the ClickHouse tokens database
    z!No tokens to insert into databaseFr(    r;   r   ,'zESELECT token_address FROM tokens_info.tokens WHERE token_address IN ()zFound z existing tokens in databasez%Could not check for existing tokens: NzSkipping existing token: r   r*   r)   unsortedrZ   r[   z!No new tokens to insert. Skipped z existing tokensT)	token_addressr_   poolrQ   processed_date	processedquality	shortNameimageztokens_info.tokenszInserted batch ra   z tokenszFailed to insert batch u   ✅ Successfully inserted z, new migrated tokens into database (skipped z
 existing)u   ⚠️ Partially inserted r]   z tokens (skipped u)   ❌ Failed to insert tokens into databaseu(   ❌ Error inserting tokens to database: )rf   rg   r   rd   setrangerj   joinexecute_queryupdaterh   	ExceptionintrN   r   r   	timestampr   execute_insertdebugerror)migrated_tokensry   
db_managertokentoken_addressesexisting_tokens
batch_sizerl   batchaddrplaceholderscheck_queryresultrowedata_to_insertcurrent_timeskipped_countrx   r_   migration_timerQ   rz   r{   r|   r}   r~   columnstotal_successinserted_countsuccesss                                  r   insert_tokens_to_databaser     s    ?@o&(
 ETT5599\26TT%JQq#o"6
C KA+Aa*n=E#&88U,KTqa[,K#LL$ijviwwx"yK'55kBF'..&/I3A/IJK   6#o*>)??[!\]
 499;'$ "	E!IIlB7M /  #<]O!LM"ii3G #YY':;N.(3~779:')NI G		(B/IIIfb)E!!
# 
1"	H @O_`a

 
q#n-z: 		&A"1Q^4E //0DguUG#e*,!!OAzMA4E3FbUT["\]!!$;AzMA<M;N"OP %		& ^a/9.9IIu  wD  vE  EO  P  Qa"<^<LAcR`NaMbbs  uB  tC  CM  !N  OIJM U -L
 0J  Q##&KA3$OPPQn  DQCHIs   M LM 0L L

 L 0L ?L
+L 6D
M B?M -M /M M 

L 	M L;5M ;M  M 	M.M))M.c                   K   t         4 d{    t        |        d{   }t        j                  dt	        |       d       ddd      d{    t              }t        j                  dt	        |       d       t        j                  dt	        |       d       t        |      }|rt        j                  d       |S t        j                  d	       |S 7 7 7 # 1 d{  7  sw Y   xY ww)
u   
    Получает pump токены из Telegram канала, проверяет время миграции и создателя, 
    получает дополнительную информацию из pump.fun API
    NzPumpTokens z tokens from TelegramzSuccessfully processed z tokens with migration dataz
Inserting z tokens into database...u6   ✅ All migrated tokens successfully added to databaseu0   ❌ Failed to add some or all tokens to database)rF   rX   rf   rh   rj   rq   r   r   )rP   pump_tokensr   r   s       r   pump_migratedr     s     
  P P*400;s;'7&88MNOP P
 &k2O.s?/C.DD_`a z#o"6!77OPQ'8GQR  	LM#P0P P P PsU   C<C!C<C'C#&C'C<C%BC<#C'%C<'C9-C0.C95C<__main__   )rP   )PUMP)   )-pymysqltelethon.syncr   telethon.sessionsr   telethon.tl.functions.messagesr   telethon.tl.typesr   r   r   r	   r   rN   sysospathr   abspathr   dirname__file__
API.jupAPIr
   API.pumpAPIr   utils.loggerutils.configutils.ClickHouseManagerr   api_idapi_hashstring_sessionrI   rF   r   r!   r5   rX   rq   r   r   __name__asynciorun r   r   <module>r      s     ( + < 2 2 2 	  
 	 RWW__X-F MN O     5 
- u0  
n5vx	H-^5nzxwr0 zGKK1%& r   