
    sojD                        d dl m Z  d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmc mc mZ d dlmc mc 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l0mZ1 d dl2mZ3 d dl4mZ5 d dl6mZ7 d dl8mZ9 d dl:mZ; d dl<mZ= d dl>mZ? d dl@mZA d dlBmZC d dlDmZE d dlFmZG d dlHmZI d dlJmZK d dlLmMZM d dlNmOZO d d	lPmQZQ d d
lRmSZS d dlTmUZUmVZVmWZW d dlXmYZY d dlZm[Z[ d dl\m]Z]m^Z^ d dl_m`Z` d dlambZb d dlcmdZdmeZe d dlfmgZg d dlhmiZi d dljmkZk dede	jl        dej        deQde`deQdemdeOddfdZdede	jl        deQde`dej        deQdeOd emddfd!Zn	 d*dede	jl        deQdemdeOd#emdemfd$Zo	 	 d+dede	jl        deQd%epdeOd&eqd'ereq         demfd(Zsdeememf         fd)ZtdS ),    )datetime)Tuple)UpdateMessageOriginUserMessageOriginChatMessageOriginChannel)ContextTypesN)manage)Group)	GroupChat)User)Feature) DeletedMessageArrestNotificationDeletedMessageMuteNotification"DeletedMessageLocationNotification)Screen)GroupMessageValidationException)GroupChatErrorGroupChatException)Keyboard)release_devil_fruit_to_user)is_main_groupfeature_is_enabled)delete_message)send_notification)user_is_mutedupdatecontextcommanduserkeyboardtarget_useris_callback
group_chatreturnc           
        K   |j         }t          |           \  }	}
|
rd|_        |                                 dS |	r(d|_        |                                 t          j        }n"|j        sd|_        |                                 	 | j        j        r|dS n# t          $ r Y nw xY wt          |          rmt          |t          j                  rt          | ||||           d{V sdS n7t          |t          j                  rt          | ||||d           d{V sdS |t          j        u rdS t!          | |||||||	           d{V  dS )a  
    Main function for the group chat manager
    :param update: Telegram update
    :param context: Telegram context
    :param command: Command to execute
    :param user: User object
    :param keyboard: Keyboard
    :param target_user: The target user in case of a reply
    :param is_callback: True if the message is a callback, False otherwise
    :param group_chat: The group chat
    :return: None
    FNT)check_only_muted)group%get_added_or_removed_from_group_event	is_activesaveCommandGRP_SETTINGS_FEATURESeffective_useris_botAttributeErrorr   r   r   MESSAGE_FILTERvalidateSILENCENDdispatch_screens)r   r   r   r    r!   r"   r#   r$   r(   added_to_groupremoved_from_groups              )/app/src/chat/group/group_chat_manager.pyr
   r
   F   s     . #E *Ov)V)V&N& 

 	

/ _ 

 ' 	DLF    Z   j'*@AA 	!&'4jQQQQQQQQ 
GO<< 	!{JQU          '*
x+z>          s   B 
B&%B&inbound_keyboardr6   c           	      
  K   |j         xt          j        k    r t          | |||||           d{V  nxt          j        k    r t          | ||||           d{V  nxt          j        k    r t          | ||||           d{V  n^xt          j        k    r t          | ||||           d{V  n2xt          j
        k    r t          | ||||           d{V  nxt          j        k    r t          | |||           d{V  nxt          j        k    r t          | |||           d{V  nxt          j        k    r t#          | |||           d{V  nxt          j        k    r t'          | |||           d{V  nVxt          j        k    r t+          | ||||           d{V  n*xt          j        k    r t/          | ||||           d{V  nxt          j        k    r t3          | |||           d{V  nxt          j        k    r t7          | ||||           d{V  nxt          j        k    r t;          | ||||           d{V  n{xt          j        k    r t?          | ||           d{V  nQxt          j         k    r tC          | ||           d{V  n'xt          j"        k    r tG          | |||           d{V  nxt          j$        k    r tK          | ||||||           d{V  nxt          j&        k    r tO          | ||||           d{V  nxt          j(        k    r tS          | ||||||           d{V  ntxt          j*        k    r tW          | ||||||           d{V  nFxt          j,        k    r t[          | ||||           d{V  nxt          j.        k    r t_          | |||           d{V  nxt          j0        k    r tc          | ||           d{V  nxt          j2        k    r tg          | |||||           d{V  nxt          j4        k    r tk          | |           d{V  nsxt          j6        k    r to          | |||           d{V  nIt          j8        k    rts          | |||           d{V  n!	 | j:        tw          tx          j=                  |Zt}          j?                    |_@        |jA        }t          |t          jD                  r#|jE        t          | |||           d{V  dS dS dS dS )a  
    Dispatches the different screens

    :param update: Telegram update
    :param context: Telegram context
    :param user: User object
    :param inbound_keyboard: Keyboard to send
    :param command: Command to execute
    :param target_user: The target user in case of a reply
    :param group_chat: The group chat
    :param added_to_group: If the Bot was just added to the group chat
    :return: None
    )r$   r"   N)r!   r   )r9   )Gscreenr   GRP_USER_STATUSmanage_screen_show_statusGRP_DOC_Q_GAMEmanage_screen_doc_q_gameGRP_CHANGE_REGIONmanage_screen_change_region	GRP_FIGHTmanage_screen_fightGRP_GAMEmanage_screen_gameGRP_GAME_SELECTIONmanage_screen_game_selectionGRP_GAME_OPPONENT_CONFIRMATION(manage_screen_game_opponent_confirmationGRP_ROCK_PAPER_SCISSORS_GAMEmanage_screen_game_rpsGRP_RUSSIAN_ROULETTE_GAMEmanage_screen_game_rrGRP_PREDICTION_BETmanage_screen_prediction_betGRP_PREDICTION_BET_REMOVE#manage_screen_prediction_bet_removeGRP_PREDICTION_BET_STATUS#manage_screen_prediction_bet_statusGRP_CREW_JOINmanage_screen_crew_joinGRP_CREW_INVITEmanage_screen_crew_inviteGRP_SILENCEmanage_screen_silenceGRP_SILENCE_ENDmanage_screen_silence_end	GRP_SPEAKmanage_screen_speakGRP_BOUNTY_GIFTmanage_screen_bounty_giftr-   manage_screen_featuresGRP_DEVIL_FRUIT_SELLmanage_screen_devil_fruit_sellGRP_BOUNTY_LOANmanage_screen_bounty_loanGRP_PLUNDERmanage_screen_plunderGRP_DAILY_REWARDmanage_screen_daily_rewardGRP_DAILY_REWARD_PRIZE manage_screen_daily_reward_prizeGRP_OWNER_BOUNTYmanage_screen_owner_bountyGRP_SETTINGSmanage_screen_settingsGRP_SETTINGS_AUTO_DELETE"manage_screen_settings_auto_deleteGRP_SETTINGS_LANGUAGEmanage_screen_settings_languagecallback_queryr   r   UNRECOGNIZED_SCREENr   nowlast_system_interaction_dater(   r   r   DEVIL_FRUIT_APPEARANCEtg_group_usernamer   )	r   r   r    r9   r   r"   r$   r6   r(   s	            r8   r5   r5      s!     0 .#V####+$:S^           #V""""*67DBRT^__________%V%%%%-0@'           V%fgt=MzZZZZZZZZZZV____$VWdGZPPPPPPPPPP&V&&&&.8H           3V2222:8H           1V0000($Qabbbbbbbbbbb-V----'P`aaaaaaaaaaa&V&&&&.vwgzZZZZZZZZZZ-V----5fgtWV`aaaaaaaaaa-V----5fgtZXXXXXXXXXX!V!!!!)&'4AQS^__________#V####+FGTCSU`aaaaaaaaaaV'DDDDDDDDDD#V####+FGZHHHHHHHHHHV%fg{JOOOOOOOOOO#V####+'7gz          *V))))(!1:~          )V((((0'7gz          $V####+'7gz           V'?OQ[\\\\\\\\\\$V$$$$,VWdJOOOOOOOOOO*V****267DTUUUUUUUUUU$V$$$$,$0@+          !V    (9999999999,V,,,,4VWFVXbcccccccccc)))1&'CSU_``````````$0()KLLL#,4LNN)!'z7+IJJ	Q'3-fgtZPPPPPPPPPPP $#
	Q 	Q33    Fr'   c           
        K   |s.t          | ||t          j        j        |           d{V sdS |rdS 	 | j        j        7t          | ||t          j                                        |           d{V sdS n# t          $ r Y nw xY w	 | j        j
        7t          | ||t          j                                        |           d{V sdS n# t          $ r Y nw xY w	 d}t          | j        j        t                    r| j        j        j        j        }nkt          | j        j        t"                    r| j        j        j        j        }n5t          | j        j        t&                    r| j        j        j        j        }t          | ||t          j                                        ||t          j                                                   d{V sdS n# t          $ r Y nw xY w	 | j        j        7t          | ||t          j                                        |           d{V sdS n# t          $ r Y nw xY w	 | j        j        rt          | ||t          j                                        |t9          | j        j        j                  t          j                                                   d{V sdS n# t          $ r Y nw xY wdS )a  
    Validates the message, deleting it if it's not valid
    :param update: Telegram update
    :param context: Telegram context
    :param user: User object
    :param is_callback: True if the message is a callback, False otherwise
    :param group_chat: The group chat
    :param check_only_muted: True if it should validate only if the user is muted, False otherwise
    :return: True if valid, False otherwise
    NFT)self_chat_user_idallowed_chat_user_ids)validate_location_levelLocationr4   levelmessagestickerEnv$REQUIRED_LOCATION_LEVEL_SEND_STICKERget_intr0   	animation&REQUIRED_LOCATION_LEVEL_SEND_ANIMATION
isinstanceforward_originr   sender_useridr   sender_chatr   chat'REQUIRED_LOCATION_LEVEL_FORWARD_MESSAGEWHITELIST_FORWARD_MESSAGEget_listdice'REQUIRED_LOCATION_LEVEL_SEND_DICE_EMOJIvia_bot'REQUIRED_LOCATION_LEVEL_USE_INLINE_BOTSstrWHITELIST_INLINE_BOTS)r   r   r    r#   r$   r'   
identifiers          r8   r2   r2     s     &  ,VWdHKDUWabbbbbbbb 	5 	4>!-<SGT3#K#S#S#U#UWa=
 =
 7
 7
 7
 7
 7
 7
- 5   >#/>UGT3#M#U#U#W#WYc?
 ?
 9
 9
 9
 9
 9
 9
/ 5   
fn35FGG 	?6BEJJ57HII 	?6BEJJ57KLL 	?6;>J,7??AA("%"?"H"H"J"J
 
 
 
 
 
 
 
 
 		 5		    
>*9P7??AA:
 :
 4
 4
 4
 4
 4
 4
* 5   >!-<S7??AA!&."8";<<"%";"D"D"F"F=
 =
 =
 7
 7
 7
 7
 7
 7
- 5    4s^   AA8 8
BB	AC 
CCC7G 
G%$G%)AH- -
H:9H:>A<J= =
K
	K
location_levelr{   r|   c                   K   ||t          d          	 |t          |          |v rdS |                                r"|dk    rt          t	                                t          ||          rt          t                                |j        |k     rt          t          ||                    nL# t          $ r?}t          |||j
        d|            d{V  t          |            d{V  Y d}~dS d}~ww xY wdS )a  
    Validates the location level of the user
    :param update: Telegram update
    :param context: Telegram context
    :param user: User object
    :param location_level: Location level to validate
    :param group_chat: The group chat
    :param self_chat_user_id: Chat or user id object of control. If not None, check if is in the list of allowed ids
    :param allowed_chat_user_ids: Chat or user ids to allow
    :return: True if valid, False otherwise
    Nz>allowed_identifiers must be not None if identifier is not NoneT   )notification)should_forward_messager   F)
ValueErrorr   is_arrestedr   r   r   r   r   r   r   r   r   )r   r   r    r   r$   r{   r|   es           r8   r}   r}   }  sy     * $)>)FYZZZ(S1B-C-CG\-\-\4 	c.1"4"41?_?a?abbbbz** 	a1?]?_?_````//1?nUU    0
 +   T1>$v
 
 
 	
 	
 	
 	
 	
 	
 	
 V$$$$$$$$$uuuuu 4s   B8 BB8 8
D4C<<Dc                 @   d}d}	 | j         j        j        t          j                                        k    rd}n# t          $ r Y nw xY w	 | j         j        d         j        t          j                                        k    rd}n# t          t          f$ r Y nw xY w||fS )z
    Gets the added or removed from group_chat event

    :param update: Telegram update
    :return: Tuple of added and removed
    FTr   )	r   left_chat_memberr   r   BOT_IDr   r0   new_chat_members
IndexError)r   added_to_chatremoved_from_chats      r8   r)   r)     s     M>*-1C1C1E1EEE $   >*1-0CJ4F4F4H4HHH MJ'    +++s!   3: 
AA9B BB)F)NN)ur   typingr   src.tg_compatr   r   r   r   src.tg_compat.extr	   resources.EnvironmentEnvironmentr   src.model.enums.Commandmodelenumsr,   src.model.enums.Locationr~   $src.chat.common.screen_change_regionr
   rA   +src.chat.common.screens.screen_daily_rewardrh   1src.chat.common.screens.screen_daily_reward_prizerj   )src.chat.common.screens.screen_doc_q_gamer?   #src.chat.common.screens.screen_gamerE   'src.chat.common.screens.screen_game_rpsrK   &src.chat.common.screens.screen_game_rrrM   -src.chat.common.screens.screen_game_selectionrG   +src.chat.common.screens.screen_owner_bountyrl   %src.chat.common.screens.screen_statusr=   )src.chat.group.screens.screen_bounty_giftr_   )src.chat.group.screens.screen_bounty_loanrd   )src.chat.group.screens.screen_crew_inviterW   'src.chat.group.screens.screen_crew_joinrU   .src.chat.group.screens.screen_devil_fruit_sellrb   #src.chat.group.screens.screen_fightrC   8src.chat.group.screens.screen_game_opponent_confirmationrI   %src.chat.group.screens.screen_plunderrf   ,src.chat.group.screens.screen_prediction_betrO   3src.chat.group.screens.screen_prediction_bet_removerQ   3src.chat.group.screens.screen_prediction_bet_statusrS   &src.chat.group.screens.screen_settingsrn   2src.chat.group.screens.screen_settings_auto_deleterp   /src.chat.group.screens.screen_settings_languagerr   /src.chat.group.screens.screen_settings_featuresr`   %src.chat.group.screens.screen_silencerY   )src.chat.group.screens.screen_silence_endr[   #src.chat.group.screens.screen_speakr]   src.model.Groupr   src.model.GroupChatr   src.model.Userr   src.model.enums.Featurer   src.model.enums.Notificationr   r   r   src.model.enums.Screenr   src.model.error.CustomExceptionr   src.model.error.GroupChatErrorr   r   src.model.pojo.Keyboardr   src.service.devil_fruit_servicer   src.service.group_servicer   r   src.service.message_servicer    src.service.notification_servicer   src.service.user_servicer   DEFAULT_TYPEboolr5   r2   intr   listr}   r)    ry   r8   <module>r      sI               \ \ \ \ \ \ \ \ \ \ \ \ * * * * * * # # # # # # ) ) ) ) ) ) ) ) ) ) ) ) + + + + + + + + + + + + V V V V V V \ \ \ \ \ \      Y X X X X X L L L L L L T T T T T T R R R R R R ` ` ` ` ` ` \ \ \ \ \ \ U U U U U U Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U U U U U U c c c c c c M M M M M M      R Q Q Q Q Q _ _ _ _ _ _           T S S S S S           ] \ \ \ \ \ Q Q Q Q Q Q Y Y Y Y Y Y M M M M M M ! ! ! ! ! ! ) ) ) ) ) )       + + + + + +         
 * ) ) ) ) ) K K K K K K M M M M M M M M , , , , , , G G G G G G G G G G G G G G 6 6 6 6 6 6 > > > > > > 2 2 2 2 2 2CC&C _C 	C
 C C C C 
C C C CLLQLQ&LQ LQ 	LQ
 _LQ LQ LQ LQ 
LQ LQ LQ LQj #_ __&_ _ 	_
 _ _ 
_ _ _ _P "'+. ..&. . 	.
 . .  9. 
. . . .b,U4:5F , , , , , ,ry   