
    i%              	       d   S r SSKJrJrJr  SSKJrJrJr  SSK	J
r
   " S S\5      r\R                  SS	S
.SSS
.SSS
.SSS
.SSS
.S.5      r " S S\\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      r " S$ S%5      rg&)'z Extractors for Misskey instances   )BaseExtractorMessageDispatch   )textdt	exception)memcachec                   @    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
 rSrg)MisskeyExtractor   z!Base class for Misskey extractorsmisskey)r   z
{instance}z{user[username]}z&{category}_{id}_{file[id]}.{extension}z{id}_{file[id]}c                     [        U 5      U l        U R                  R                  S5      S   U l        U R                  SS5      (       a  SOSU l        U R                  SS5      (       a  SU l        g SU l        g )Nz://r   renotesFTreplies)
MisskeyAPIapiroot
rpartitioninstanceconfigr   r   selfs    I/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/misskey.py_initMisskeyExtractor._init   s_    d#		,,U3A6#{{9e<<t%#{{9d;;t    c              #     #    U R                  5        GH  nSU;   a  US   nUR                  S5      =(       d    / nUR                  S5      =n(       a[  U R                  (       d!  U R                  R                  SUS   5        Ms  UR                  UR                  S5      =(       d    S5        UR                  S5      =n(       a[  U R                  (       d!  U R                  R                  SUS   5        M  UR                  UR                  S5      =(       d    S5        U R                  US	'   US
   S   US'   [        U5      US'   U R                  US   5      US'   [        R                  SU4v   [        US5       HR  u  US'   nU R                  US   5      US'   XQS'   US   n[        R                  U[        R                   " Xa5      4v   MT     GM     g 7f)NnotefilesrenotezSkipping %s (renote)id replyzSkipping %s (reply)r   userhostinstance_remotecount	createdAtdate r   numfileurl)notespopgetr   logdebugextendr   r   lenparse_datetime_isor   	Directory	enumerateUrlr   nameext_from_url)r   r   r    r!   r$   r-   r.   s          r   itemsMisskeyExtractor.items   s    JJLD~F|HHW%+E(++v+||HHNN#94:FVZZ06B7))u)||HHNN#8$t*EUYYw/526#}}D&*6l6&:D"#JDM2243DEDL##R--%.ua%8!UT#66tK7HIV#V5kkk3(=(=c(HHH	 &9- !s   GGc                     g)z7Return an iterable containing all relevant Note objectsr#   r#   r   s    r   r/   MisskeyExtractor.notes8   s    r   c                     UR                  S5      u  pEnU(       a.  [        R                  " U5      R                  S5      =(       d    UnUUUR	                  S5      S   R                  S5      S   USS.4SS	.$ )
N?r.   /r   .    r+   )r"   r.   r)   )r"   r%   r    r)   )	partitionr   parse_queryr1   r   )r   typer%   r.   pathsepquerys          r   
_make_noteMisskeyExtractor._make_note<   s    ==-5""5)--e4<C ~~c*1-77<Q? 
 	
 		
r   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__basecategorydirectory_fmtfilename_fmtarchive_fmtr   r;   r/   rJ   __static_attributes__r#   r   r   r   r      s/    +LAM;L#KGI:
r   r   zhttps://misskey.iozmisskey\.io)r   patternzhttps://misskey.designzmisskey\.designzhttps://misskey.artzmisskey\.artzhttps://lesbian.energyzlesbian\.energyzhttps://sushi.skiz
sushi\.ski)z
misskey.iozmisskey.designzmisskey.artzlesbian.energyz	sushi.skic                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	MisskeyUserExtractorf   z*Extractor for all images of a Misskey userr%   z/@([^/?#]+)/?$zhttps://misskey.io/@USERc                     U R                    SU R                  S    S3nU R                  [        US-   4[        US-   4[
        US-   4[        US-   44S5      $ )	N/@rA   infoavatarbannerr/   )r/   )r   groups_dispatch_extractorsMisskeyInfoExtractorMisskeyAvatarExtractorMisskeyBackgroundExtractorMisskeyNotesExtractor)r   bases     r   r;   MisskeyUserExtractor.itemsl   sn    ))Bt{{2/q1((!7#9'9"8	*

  	r   r#   NrL   rM   rN   rO   rP   subcategoryBASE_PATTERNrV   exampler;   rU   r#   r   r   rX   rX   f   s    4K..G(Gr   rX   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	re   v   z$Extractor for a Misskey user's notesr/   z/@([^/?#]+)/noteszhttps://misskey.io/@USER/notesc                     U R                   R                  U R                   R                  U R                  S   5      5      $ Nr\   )r   users_notesuser_id_by_usernamer`   r   s    r   r/   MisskeyNotesExtractor.notes|   s5    xx##DHH$@$@KKO%  	r   r#   NrL   rM   rN   rO   rP   ri   rj   rV   rk   r/   rU   r#   r   r   re   re   v   s    .K11G.Gr   re   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	rb      z+Extractor for a Misskey user's profile datar]   z/@([^/?#]+)/infozhttps://misskey.io/@USER/infoc                     U R                   R                  U R                  S   5      n[        [        R
                  SU445      $ )Nr\   r+   )r   
users_showr`   iterr   r7   )r   r%   s     r   r;   MisskeyInfoExtractor.items   s9    xx""4;;r?3g''T2455r   r#   Nrh   r#   r   r   rb   rb      s    5K00G-G6r   rb   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	rc      z%Extractor for a Misskey user's avatarr^   z/@([^/?#]+)/avatarzhttps://misskey.io/@USER/avatarc                     U R                   R                  U R                  S   5      nUR                  S5      nU(       a  U R	                  SX5      4$ S$ )Nr\   	avatarUrlr^   r#   r   rw   r`   r1   rJ   r   r%   r.   s      r   r/   MisskeyAvatarExtractor.notes   sG    xx""4;;r?3hh{#:=$46E2Er   r#   Nrs   r#   r   r   rc   rc      s     /K22G/GFr   rc   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	rd      z+Extractor for a Misskey user's banner image
backgroundz/@([^/?#]+)/ba(?:nner|ckground)zhttps://misskey.io/@USER/bannerc                     U R                   R                  U R                  S   5      nUR                  S5      nU(       a  U R	                  SX5      4$ S$ )Nr\   	bannerUrlr   r#   r~   r   s      r   r/    MisskeyBackgroundExtractor.notes   sG    xx""4;;r?3hh{#>Ad8:IrIr   r#   Nrs   r#   r   r   rd   rd      s     5K??G/GJr   rd   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	MisskeyFollowingExtractor   z$Extractor for followed Misskey users	followingz/@([^/?#]+)/followingz"https://misskey.io/@USER/followingc              #   *  #    U R                   R                  U R                  S   5      nU R                   R                  U5       HH  nUS   nU R                   SUS    3nUS   =nb  U SU 3n[
        US'   [        R                  X24v   MJ     g 7f)Nr\   followeer[   usernamer&   @
_extractor)r   rq   r`   users_followingr   rX   r   Queue)r   user_idr%   r.   r&   s        r   r;   MisskeyFollowingExtractor.items   s     ((..t{{2?HH,,W5D
#DYYKr$z"2!34CV$1Qtfo!5D--** 6s   BBr#   Nrh   r#   r   r   r   r      s    .K55G2G+r   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	MisskeyNoteExtractor   z Extractor for images from a Noter   z/notes/(\w+)zhttps://misskey.io/notes/98765c                 T    U R                   R                  U R                  S   5      4$ ro   )r   
notes_showr`   r   s    r   r/   MisskeyNoteExtractor.notes   s"    ##DKKO466r   r#   Nrs   r#   r   r   r   r      s    *K_,G.G7r   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	MisskeyFavoriteExtractor   zExtractor for favorited notesfavoritez/(?:my|api/i)/favoriteszhttps://misskey.io/my/favoritesc                 6    U R                   R                  5       $ )N)r   i_favoritesr   s    r   r/   MisskeyFavoriteExtractor.notes   s    xx##%%r   r#   Nrs   r#   r   r   r   r      s    'K77G/G&r   r   c                   `    \ rS rSrSrS rS rS rS r\	" SS9S	 5       r
S
 rS rS rS rSrg)r      zInterface for Misskey API

https://github.com/misskey-dev/misskey
https://misskey-hub.net/en/docs/api/
https://misskey-hub.net/docs/api/endpoints.html
c                 ^    UR                   U l         Xl        UR                  S5      U l        g )Nzaccess-token)r   	extractorr   access_token)r   r   s     r   __init__MisskeyAPI.__init__   s%    NN	"%,,^<r   c                 *    U R                  U5      S   $ )Nr"   )rw   )r   r   s     r   rq   MisskeyAPI.user_id_by_username   s    x(..r   c                 0    SnSU0nU R                  X#5      $ )Nz/users/followinguserId_paginationr   r   endpointdatas       r   r   MisskeyAPI.users_following   s"    %'"//r   c                 0    SnSU0nU R                  X#5      $ )Nz/users/notesr   r   r   s       r   rp   MisskeyAPI.users_notes   s"    !'"//r   r   )keyargc                 j    SnUR                  S5      u  pnX=(       d    S S.nU R                  X%5      $ )Nz/users/showr   )r   r&   )rD   _call)r   r   r   _r&   r   s         r   rw   MisskeyAPI.users_show   s7     $..s3T$ld;zz())r   c                 0    SnSU0nU R                  X#5      $ )Nz/notes/shownoteId)r   )r   note_idr   r   s       r   r   MisskeyAPI.notes_show   s      '"zz())r   c                     SnU R                   (       d  [        R                  " 5       eSU R                   0nU R                  X5      $ )Nz/i/favoritesi)r   r	   AuthenticationErrorr   )r   r   r   s      r   r   MisskeyAPI.i_favorites   s@    !  //11T&&'//r   c                 Z    U R                    SU 3nU R                  R                  USUS9$ )Nz/apiPOST)methodjson)r   r   request_json)r   r   r   r.   s       r   r   MisskeyAPI._call   s2    4z*~~**3vD*IIr   c              #   2  #    U R                   nSUS'   UR                  US'   UR                  S5      (       a  SOSUS'   UR                  5       u  pEUR                  S5      =n(       a   US	   S
;   a  SnUc  SOUS-  US'   Uc  S OUnOMSnS nUb;  US-  US'   Uc0  [	        [
        R                  R                  5       5      S-   S-  US'   Ub  US-  US'    U R                  X5      n	U	(       d  g Ub  [
        R                  " [
        R                  " U	S   S   5      5      U:  aU  [        U	5       HE  u  p[
        R                  " [
        R                  " US   5      5      U:  d  M8  U	S U
  S h  vN     g    O
U	 S h  vN   U	S   S   X''   M   N N7f)Nd   limitwithRenotesz
text-postsFT	withFileszorder-postsrC   )arsinceIdr   i  	sinceDateuntilId	untilDater\   r)   r"   )r   r   r   _get_date_min_maxintr   timer   to_ts	parse_isor8   )r   r   r   extrdate_mindate_maxorderkey	date_stopr/   idxr   s               r   r   MisskeyAPI._pagination   s    ~~W"ll]%)[[%>%>ED[!335[[//E/aJ&C%-%58d?D ( 0hICI#$,tO[!#),RWW\\^)<t)Ct(KD%#$,tO[!JJx.E&288BLL"Ik*5, ,-/8,9!*5!1ICxxT+-> ?@9L#(#;.. "2
 !  b	$DI  / !s*   E%F+F3F4FFFF)r   r   r   N)rL   rM   rN   rO   rP   r   rq   r   rp   r
   rw   r   r   r   r   rU   r#   r   r   r   r      sI    =
/0
0
 Q* **
0J$(r   r   N)rP   commonr   r   r   r+   r   r   r	   cacher
   r   updaterj   rX   re   rb   rc   rd   r   r   r   r   r#   r   r   <module>r      s    ' 4 4 " " =
} =
@  &&$!
 )%
 &"
 )%
 $ #( 08%5  , 6+ 6	F- 	F	J!1 	J+ 0 +"7+ 7&/ &U( U(r   