
    i4              
          d dl mZ d dl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ZmZmZmZmZmZmZmZmZmZmZ defdZdefd	Zdefd
ZdefdZde	defdZdefdZdefdZdedefdZ defdZ!deeef         defdZ"defdZ#defdZ$defdZ%defdZ&defdZ'dedeedf         defdZ(dZ)deeeef                  de*fd Z+d!ed"efd#Z,deedf         defd$Z-d%edefd&Z.defd'Z/d(edefd)Z0d*eeef         d+e1defd,Z2defd-Z3d.edefd/Z4d%edefd0Z5d%edefd1Z6dedefd2Z7d3e1ded4e1defd5Z8d%ed3e1ded6e9def
d7Z:dS )8    )PatternN)UnionDictAnyOptional)SlackResponse)BoltRequest)	is_actionis_eventis_function
is_optionsis_shortcutis_slash_commandis_view_submissionis_view_closedis_workflow_step_editis_workflow_step_saveis_workflow_step_executereturnc                      dS )Nz*`client` must be a slack_sdk.web.WebClient r       U/root/projects/butler/venv/lib/python3.11/site-packages/slack_bolt/logger/messages.pyerror_client_invalid_typer      s    77r   c                      dS )Nz<`client` must be a slack_sdk.web.async_client.AsyncWebClientr   r   r   r   error_client_invalid_type_asyncr      s    IIr   c                      dS )NzG`oauth_flow` must be a slack_bolt.oauth.async_oauth_flow.AsyncOAuthFlowr   r   r   r   #error_oauth_flow_invalid_type_asyncr   #   s    TTr   c                      dS )NzS`oauth_settings` must be a slack_bolt.oauth.async_oauth_settings.AsyncOAuthSettingsr   r   r   r   'error_oauth_settings_invalid_type_asyncr    '   s    ``r   error_responsec                     d|  dS )Nz&`token` is invalid (auth.test result: )r   )r!   s    r   error_auth_test_failurer$   +   s    ENEEEEr   c                      dS )Nz\Either an env variable `SLACK_BOT_TOKEN` or `token` argument in the constructor is required.r   r   r   r   error_token_requiredr&   /   s    llr   c                     d|  S )Nz,Unexpected value for a listener middleware: r   )middleware_types    r   $error_unexpected_listener_middlewarer)   3   s    K/KKKr   	func_namec                     d|  dS )NzThe listener function (z) is not a coroutine function.r   r*   s    r   )error_listener_function_must_be_coro_funcr-   7   s    NYNNNNr   c                      dS )Nzk`authorize` in the top-level arguments is not allowed when you pass either `oauth_settings` or `oauth_flow`r   r   r   r   error_authorize_conflictsr/   ;   s    xxr   
event_typec                     d|  dS )Nz Although the document mentions "z", it is not a valid event type. Use "message" instead. If you want to filter message events, you can use `event.channel_type` for it.r   )r0   s    r   error_message_event_typer2   ?   s!    	Y: 	Y 	Y 	Yr   c                      	 dS )NzTo use the event listeners for token revocation handling, setting a valid `installation_store` to `App`/`AsyncApp` is required.r   r   r   r   7error_installation_store_required_for_builtin_listenersr4   G   s    	P r   c                      dS )NzA`oauth_flow` or `authorize` must be configured to make a Bolt appr   r   r   r   &error_oauth_flow_or_authorize_requiredr6   N   s    NNr   c                      dS )Nz5As you gave `client` as well, `token` will be unused.r   r   r   r   ,warning_client_prioritized_and_token_skippedr8   W   s    BBr   c                      	 dS )NzpAs `installation_store` or `authorize` has been used, `token` (or SLACK_BOT_TOKEN env variable) will be ignored.r   r   r   r   warning_token_skippedr:   [   s    } r   c                      dS )NzdAs you gave both `installation_store` and `oauth_settings`/`auth_flow`, the top level one is unused.r   r   r   r   $warning_installation_store_conflictsr<   a   s    qqr   namereqAsyncBoltRequestc                     d|  d|j          dS )NzA global middleware (z]) skipped calling either `next()` or `next_()` without providing a response for the request (r#   )body)r=   r>   s     r   &warning_unhandled_by_global_middlewarerB   e   s2    	E 	E 	E9<	E 	E 	Er   zZ
---
[Suggestion] You can handle this type of event with the following listener function:
rA   c                    | i S |                      d          }d|i}d| v r6| d         }|                     d          |                     d          d|d<   |dk    rm|                      dg           }t          |          dk    rD|d         <|d                              d          |d<   |d                              d	          |d	<   |d
k    rH|                      d          |d<   |                      d	          |d	<   |                      d          |d<   |dk    rXd| v rT|                      di           }d|                     d          i}d| d         v r|                     d          |d<   ||d<   d| v r|                      d          |d<   |dv r|                      d          |d<   |dk    r0|                      d          |d<   |                      d          |d<   |dk    r0|                      d          |d<   |                      d          |d<   |dk    r0|                      d          |d<   |                      d          |d<   |dk    r|                      d          |d<   |S )Ntypeviewcallback_id)rD   rF   block_actionsactionsr   block_id	action_idblock_suggestionvalueevent_callbackeventsubtypecommand)workflow_step_editshortcutmessage_actioninteractive_messagedialog_suggestiondialog_submission
submissiondialog_cancellation)getlen)rA   payload_typefiltered_bodyrE   rH   event_payloadfiltered_events          r   _build_filtered_bodyr_   t   s   |	88F##L\*M~~F| HHV$$88M22!
 !
f
 &&((9b))w<<!
 6(/
z(B(BM*%)0)D)DM+&)))$(HHZ$8$8j!%)XXk%:%:k"!%'!2!2g'''GtOO"-- -"3"3F";";<W%%(5(9(9)(D(DN9%!/gD#'88I#6#6i KKK'+xx'>'>m$,,,'+xx'>'>m$#'88I#6#6i ***'+xx'>'>m$!%'!2!2g***'+xx'>'>m$&*hh|&<&<l#,,,'+xx'>'>m$r   default_messagecode_snippetc                     |  t            | S )N)$_unhandled_request_suggestion_prefix)r`   ra   s     r   #_build_unhandled_request_suggestionrd      s    W!EW|WWWr   c                    t          | j                  }d| d}t          | t                     }t	          | j                  s(t          | j                  st          | j                  ri|                    d          p*|                    di                               d          pd}t          |d|rdnd d	|rd
nd d|rd
nd d| d	          S t          | j                  r| j                            d          }| j                            d          dk    r&| j        d         d                             d          }t          |d| d|rdnd d|rdnd d          S t          | j                  rd}| j                            d          d| j        d         z   dz   }n<| j                            d          dk    rd| j                            d           d}t          |d| d|rdnd d |rdnd d!          S t          | j                  rV| j                            d          p| j                            d          }t          |d"| d|rdnd d#|rdnd d          S t          | j                  rOt          |d$| j                            di                               dd%           d|rdnd d&|rdnd d          S t          | j                  rOt          |d'| j                            di                               dd%           d|rdnd d(|rdnd d          S t          | j                  r| j                            d)i           }|                    d          }	t          | j                  rZ|                    d*i                               dd+          }t          |d,| d|rdnd d-|rdnd d.|rdnd d/|rdnd d0          S t          |d1|	 d|rdnd d2|	 d3          S t!          | j                  r=| j                            d4d5          }
t          |d6|
 d|rdnd d7|rdnd d          S |S )8NzUnhandled request (r#   rF   rE   zyour-callback-idz
from slack_bolt.workflows.stepz.async_step z import AsynczWorkflowStep
ws = zWorkflowStep(
    callback_id="ze",
    edit=edit,
    save=save,
    execute=execute,
)
# Pass Step to set up listeners
app.step(ws)
rD   rG   rH   r   rJ   z
@app.action("z")
zasync z/def handle_some_action(ack, body, logger):
    zawait zack()
    logger.info(body)
z"action-id""rU   z.{"type": "dialog_suggestion", "callback_id": "z"}z
@app.options(z)
z"def handle_some_options(ack):
    zack(options=[ ... ])
z
@app.shortcut("z-def handle_shortcuts(ack, body, logger):
    z
@app.view("zmodal-view-idz:def handle_view_submission_events(ack, body, logger):
    z
@app.view_closed("z6def handle_view_closed_events(ack, body, logger):
    rN   functionfunction_idz
@app.function("zAdef handle_some_function(ack, body, complete, fail, logger):
    zdack()
    logger.info(body)
    try:
        # TODO: do something here
        outputs = {}
        zcomplete(outputs=outputs)
    except Exception as e:
        error = f"Failed to handle a function request (error: {e})"
        zfail(error=error)
z
@app.event("zdef handle_z-_events(body, logger):
    logger.info(body)
rP   z/your-commandz
@app.command("z0def handle_some_command(ack, body, logger):
    )r_   rA   
isinstancer	   r   r   r   rY   rd   r
   r   r   r   r   r   r   r   )r>   r\   r`   is_asyncrF   action_id_or_callback_idconstraintsidrN   r0   rP   s              r   warning_unhandled_requestrp      s:    )22M<M<<<Oc;///HSX&& 
*?*I*I 
MefifnMoMo 
 m,,v0A0A&"0M0M0Q0QR_0`0`vdv 	 3
08@}}b
 
U]Je''ce
 
!ggr
 
 
 
 

 
 	
  
#&8<<#>#> 8<<?22'*x	':1'='A'A+'N'N$2& 2  !XXr  
 
 	
 #( 
#8<<$$0 55;KKX\\&!!%888pchll[hNiNipppK2 2  !XXr  
 
 	
 38 
X\\+&&E#(,,}*E*E2 2  !XXr  
 
 	
 #(## 

2HLL$$((HH 2  !XXr  
 
 	
 ch 

28<<++//OO 2  !XXr  
 
 	
  
Wb))YYv&&
sx   	))J3377}UUK6 2  !XXr  	%2  	%2      3 2 *4  
 
 	
 !! 
(,,y/::2 2  !XXr  
 
 	
 r   listener_namec                     |  dS )Nz didn't call ack()r   rq   s    r   warning_did_not_call_ackrt   =  s    ////r   c                      	 dS )Nzqinstallation_store_bot_only exists in both App and OAuthFlow.settings. The one passed in App constructor is used.r   r   r   r   warning_bot_only_conflictsrv   A  s    	5 r   arg_namec                     d|  dS )Nz<Bolt skips injecting a value to the first keyword argument (zF). If it is self/cls of a method, we recommend using the common names.r   )rw   s    r   warning_skip_uncommon_arg_namery   H  s!    	Nx 	N 	N 	Nr   
identifierack_timeoutc                 V    t          | t                    rd|  dnd|  d}d| d| dS )Nz@app.function("z")z@app.function(r#   zOn z0, as `auto_acknowledge` is `True`, `ack_timeout=z` you gave will be unused)rk   str)rz   r{   handler_examples      r   !warning_ack_timeout_has_no_effectr   O  sO    :DZQT:U:Uy6
6666[ylv[y[y[yO|||Va||||r   c                      	 dS )Na  As you've set SLACK_CLIENT_ID and SLACK_CLIENT_SECRET env variables, Bolt has enabled the file-based InstallationStore/OAuthStateStore for you. Note that these file-based stores are for local development. If you'd like to use a different data store, set the oauth_settings argument in the App constructor. Please refer to https://docs.slack.dev/tools/bolt-python/concepts/authenticating-oauth for more details.r   r   r   r   "info_default_oauth_settings_loadedr   Y  s    	s r   middleware_namec                     d|  S )Nz	Applying r   )r   s    r   debug_applying_middlewarer   h  s    ((((r   c                     d|  dS )NzChecking listener:  ...r   rs   s    r   debug_checking_listenerr   l  s    44444r   c                     d|  dS )NzRunning listener: r   r   rs   s    r   debug_running_listenerr   p  s    33333r   c                     d|  dS )NzRunning lazy listener: r   r   r,   s    r   debug_running_lazy_listenerr   t  s    4Y4444r   statusmillisc                     d|  d| d| dS )NzResponding with status: z body: "z" ( millis)r   )r   rA   r   s      r   debug_respondingr   x  s#    OfOOdOOvOOOOr   starting_timec           	      l    t          t          j                    |z
  dz            }d|  d| d| d| d	S )Ni  z;Responding with listener middleware's response - listener: z
, status: z, body: z (r   )inttime)rq   r   rA   r   r   s        r   )debug_return_listener_middleware_responser   |  sl    $)++-566F	W"	W 	W.4	W 	W>B	W 	WFL	W 	W 	Wr   );rer   r   typingr   r   r   r   slack_sdk.webr   slack_bolt.requestr	    slack_bolt.request.payload_utilsr
   r   r   r   r   r   r   r   r   r   r   r}   r   r   r   r    r$   r&   r)   r-   r/   r2   r4   r6   r8   r:   r<   rB   rc   dictr_   rd   rp   rt   rv   ry   r   r   r   r   r   r   r   r   floatr   r   r   r   <module>r      s\          - - - - - - - - - - - - ' ' ' ' ' ' * * * * * *                         &83 8 8 8 8J J J J JUS U U U Ua a a a aFM Fc F F F Fmc m m m mLS L L L LO O O O O Oy3 y y y ysG|)<         O O O O OCc C C C Cs    rc r r r r
+'99:   ( $<xS#X7 <D < < < <~X XC X X X XC	{..	/CC C C CL0C 0C 0 0 0 0C    S S    }%W2E }TW }\_ } } } }C    )s )s ) ) ) )53 53 5 5 5 54# 4# 4 4 4 453 53 5 5 5 5PS P PS PS P P P PS # UX in sv      r   