
    sojX0                     P   d dl Z d dlmZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 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 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! 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+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5  G d de          Z6de7de8e7e7e7e7f         fdZ9dede:fdZ;	 d(dede
j<        ded ede=f
d!Z>de
j<        d eddfd"Z?dede
j<        ded#eddf
d$Z@dede
j<        ded%e'ddf
d&ZA	 d(dede
j<        ded%e'd#eddfd'ZBdS ))    N)datetime)StrEnum)UpdateMessage)
BadRequest)ContextTypes)DocQGame)	GroupChat)User)Emoji)
GameStatus)SavedMediaName)Screen)DevilFruitAbilityType)IncomeTaxEventType)CommonChatException)Keyboard)add_or_remove_bounty)get_remaining_duration)get_ability_adjusted_datetime)full_message_sendfull_media_send"full_message_or_media_send_or_editmention_markdown_v2delete_message)get_belly_formattedc                       e Zd ZdZdZdZdZdS )DocQReservedKeysz+
    The reserved keys for this screen
    abcN)__name__
__module____qualname____doc__DOC_Q_IDCHOICE_INDEXCANCEL     1/app/src/chat/common/screens/screen_doc_q_game.pyr   r   $   s)          HLFFFr*   r   current_bountyreturnc                     t          | t          j                                        z            }t          | |z            }|| z
  | |z
  ||fS )z
    Get play amounts
    :param current_bounty: The current bounty
    :param win_odds: The win odds
    :return: list -  [0] - Win amount, [1] - Lose amount, [2] - Final bounty if won,
    [3] - Final bounty if lost
    )intEnvDOC_Q_GAME_WIN_ODD	get_float)r,   win_oddsfinal_bounty_if_winfinal_bounty_if_loses       r+   get_play_amountsr6   .   sZ     ns/E/O/O/Q/QQRR~899n,--	 r*   userc                     |                                  rt          j                                        nt          j                                        S )zH
    Get win odd
    :param user: The user
    :return: The win odd
    )has_bounty_gain_limitationsr0   !DOC_Q_GAME_WIN_ODD_FINAL_LOCATIONr2   r1   )r7   s    r+   get_win_oddr;   C   sC     ++--	0-77999#--//r*   updatecontext
doc_q_gamec                 $  K   |j         t          j                                        k     rt          j                            t          t          j                                                  |	                                          }	 t          ||| d           d{V  n)# t          $ r t          ||| d           d{V  Y nw xY wdS |j        |j        t          j                    k    rwt          j                            t#          |j                            }	 t          ||| d           d{V  n)# t          $ r t          ||| d           d{V  Y nw xY wdS t%          j                                        t$          j        |k    t$          j        t.          j        k    z            }|9|                                t.          j        urt5          t          j                  |D ]}||k    rt9          ||           d{V  dS )z
    Validate play request
    :param update: The update
    :param context: The context
    :param user: The user
    :param doc_q_game: The doc q game
    :return: None
    T)r<   add_delete_buttonNF)bountyr0   DOC_Q_GAME_REQUIRED_BOUNTYr2   phrasesDOC_Q_GAME_NOT_ENOUGH_BOUNTYformatr   get_intget_bounty_formattedr   r   r   doc_q_cooldown_end_dater   nowDOC_Q_GAME_LIMIT_REACHEDr   r	   selectwherer7   statusr   IN_PROGRESS
get_statusr   ITEM_IN_WRONG_STATUSdelete_game)r<   r=   r7   r>   ot_textprevious_gamesprevious_games          r+   validate_playrU   Q   s      {S3==????6== > F F H HII%%''
 
	#GWVW[\\\\\\\\\\\ 	 	 	44           	 u#/D4PS[S_SaSa4a4a299"4#?@@
 
	#GWVW[\\\\\\\\\\\ 	 	 	44           	 u &._%6%6%<%<	$	8?j6L#LM& &N
 *"7"7"9"9AW"W"W!'">???' 6 6J&&g}5555555554s$   B   #CC D: :#E E c                    K   t          | |j        |j        |j        j        nd|j                   d{V  |                                 dS )zm
    Delete game
    :param context: The context
    :param doc_q_game: The doc q game
    :return: None
    N)r=   
group_chatchat_id
message_id)r   rW   r7   
tg_user_idrY   delete_instance)r=   r>   s     r+   rQ   rQ      s|       (/9/D/L++RV(	               r*   rW   c           
        K   |t           j        nt           j        }t          | ||           d{V r@t	                      }||_        ||_        |                                 |                                rt          j
                                        }nt          j                                        }t          |          }t          ||z            }g }	t          |          D ]O}
t!          j        d|dz
            }||	v rt!          j        d|dz
            }||	v |	                    |           Pt&          j                            d |	D                       |_        t.          j        |j        i}g }g }t          |          D ]}
|t.          j        |
iz  }t6          j        }t          j                                        r|
|	v rt6          j        }|                    tA          |||                     |
dz   t&          j!        z  dk    r|
dk    r|                    |           g }|                    |           tE          |j#        |          \  }}}}tH          j%        &                    tO          |j(        |j)                  tU          |          tU          |          |+                                tU          |          tU          |                    }|                    tA          tH          j,        t.          j        |j        t.          j-        di|          g           t]          |t^          j0        | ||           d{V }|j1        |_1        |                                 dS dS )z
    User request to play Doc Q Game
    :param update: The update
    :param context: The context
    :param user: The user
    :param group_chat: The group chat
    :return: None
    Nr      c              3   4   K   | ]}t          |          V  d S N)str).0is     r+   	<genexpr>zplay_request.<locals>.<genexpr>   sA       F
 F
CFFF
 F
 F
 F
 F
 F
r*   T)infoscreen)saved_media_namer<   captionkeyboard)2r   GRP_DOC_Q_GAMEPVT_DOC_Q_GAMErU   r	   r7   rW   saver9   r0   'DOC_Q_GAME_OPTIONS_COUNT_FINAL_LOCATIONrF   DOC_Q_GAME_OPTIONS_COUNTr;   r/   rangerandomrandintappendr!   STANDARD_SPLIT_CHARjoincorrect_choices_indexr   r&   idr'   r   DOC_Q_GAME_OPTIONDOC_Q_GAME_SHOW_CORRECT_OPTIONget_boolDOC_Q_GAME_CORRECT_OPTIONr   STANDARD_LIST_KEYBOARD_ROW_SIZEr6   rA   rC   DOC_Q_GAME_STARTrE   r   rZ   tg_first_namer   rG   KEYBOARD_OPTION_CANCELr(   r   r   DOC_QrY   )r<   r=   r7   rW   re   r>   options_countwin_oddpossible_correct_choicesrt   rb   indexkeyboard_data_templateinline_keyboardapples_keyboardkeyboard_dataoption_emoji
win_amountlose_amountr4   r5   rg   messages                          r+   play_requestr      s      '1&<V""&BWF67D11111111 RZZ

 *
++-- 	CGOOQQMM8@@BBMd###&}w'>#?#?  "/00 	0 	0AN1ma&788E000q-!*;<< 000!((//// ,-+@+E+E F
 F
1F
 F
 F
 ,
 ,

(
 )9(A:='Q*,}%% 	% 	%A26F6SUV5WWM 2L 1::<< ?F[A[A[$>""8L-#P#PQQQ A::a??AFF&&777"$///M]KN
 N
J
K!46J *111CDD
++,,%%'' 344 455
 
 	2*3Z]DTD[]ab!  	
 	
 	
 "1+1$"
 "
 "
 
 
 
 
 
 
 !( 2
eR Rr*   rh   c                   K   t          j        t           j        |j        t          j                 k              }|t          t          j                  t          | |||           d{V rt          j
        |j        v r;t          |t          j        | d           d{V  t          ||           d{V  dS t          |          }t          |j        |          \  }}}}	t#          |j                                      t(          j                  }
t#          |j        t          j                           |
v rt/          ||| t0          j        |j        d           d{V  t4          j        |_        ||_        t          j                            tA          |j!        |j"                  tF          j        tI          |          |%                                          }nt/          ||d| d           d{V  t4          j&        |_        ||_        |'                                }t          j(                            tA          |j!        |j"                  |tF          j(        tI          |          |%                                          }tS          || |dd           d{V  tU          |tV          j,        tZ          j.        /                                          |_0        |1                                 dS dS )z
    Keyboard interaction
    :param update: The update
    :param context: The context
    :param user: The user
    :param keyboard: The keyboard
    :return: None
    NT)answer_callback)r<   tax_event_typeevent_idshould_saveF)addr<   r   )r<   rg   edit_only_caption_and_keyboardr@   )2r	   get_or_noneru   rd   r   r&   r   rC   DOC_Q_GAME_NOT_FOUNDrU   r(   r   DOC_Q_GAME_CANCELrQ   r;   r6   rA   r`   rt   splitr!   rr   r'   r   r   
DOC_Q_GAMEr   WONrM   bellyDOC_Q_GAME_WINrE   r   rZ   r|   r   r   rG   LOSTget_correct_apple_numberDOC_Q_GAME_LOSEr   r   r   DOC_Q_COOLDOWN_DURATIONr0   DOC_Q_GAME_COOLDOWN_DURATIONrF   rH   rk   )r<   r=   r7   rh   r>   r   r   r   r4   r5   rt   rR   correct_apples                r+   keyboard_interactionr      sY      $/x}%5%>?? J !'">???67D*======== G"hm33#2FD          gz222222222Fd##M]KN
 N
J
K!46J !$J$D E E K KALa b bx}-:;<<@UUU&1<#           !+J)J,33#DOT5GHH$#J//))++	 GG 'kuV         
 !+J*J&??AAM-44#DOT5GHH%#K00))++ G +/"
 
 
 	
 	
 	
 	
 	
 	
 	
 (E!9,4466(
 (
$
 	OG Gr*   c                 r   K   |t          | |||           d{V  dS t          | |||           d{V  dS )z
    Manage Doc Q Game screen
    :param update: The update
    :param context: The context
    :param user: The user
    :param keyboard: The keyboard
    :param group_chat: The group chat
    :return: None
    N)r   r   )r<   r=   r7   rh   rW   s        r+   manager   Y  se      " 67D*=========
vwh
?
??????????r*   r_   )Cro   r   enumr   src.tg_compatr   r   src.tg_compat.errorr   src.tg_compat.extr   	constantsr!   resources.EnvironmentEnvironmentr0   resources.phrasesrC   src.model.DocQGamer	   src.model.GroupChatr
   src.model.Userr   src.model.enums.Emojir   src.model.enums.GameStatusr   src.model.enums.SavedMediaNamer   src.model.enums.Screenr   1src.model.enums.devil_fruit.DevilFruitAbilityTyper   -src.model.enums.income_tax.IncomeTaxEventTyper   src.model.error.CommonChatErrorr   src.model.pojo.Keyboardr   src.service.bounty_servicer   src.service.date_servicer   src.service.devil_fruit_servicer   src.service.message_servicer   r   r   r   r   src.utils.string_utilsr   r   r/   tupler6   floatr;   DEFAULT_TYPEboolrU   rQ   r   r   r   r)   r*   r+   <module>r      s                ) ) ) ) ) ) ) ) * * * * * * * * * * * *     # # # # # # # # # # # # ' ' ' ' ' ' ) ) ) ) ) )       ' ' ' ' ' ' 1 1 1 1 1 1 9 9 9 9 9 9 ) ) ) ) ) ) S S S S S S L L L L L L ? ? ? ? ? ? , , , , , , ; ; ; ; ; ; ; ; ; ; ; ; I I I I I I              7 6 6 6 6 6    w   S uS#sC=O7P    *d u     \`3 33)63>B3PX3	3 3 3 3l!|8 !h !SW ! ! ! !&__)6_>B_PY_	_ _ _ _DZZ)6Z>BZNVZ	Z Z Z ZD !@ @@&@ @ 	@
 @ 
@ @ @ @ @ @r*   