X Tutup
# ------------------------------------------------ # instead of slack_bolt in requirements.txt import sys sys.path.insert(1, "..") # ------------------------------------------------ import logging logging.basicConfig(level=logging.DEBUG) from slack_bolt import App app = App() @app.middleware # or app.use(log_request) def log_request(logger, body, next): logger.debug(body) return next() @app.command("/hello-bolt-python") def handle_command(body, ack, respond, client, logger): logger.info(body) ack( text="Accepted!", blocks=[ { "type": "section", "block_id": "b", "text": { "type": "mrkdwn", "text": ":white_check_mark: Accepted!", }, } ], ) respond( blocks=[ { "type": "section", "block_id": "b", "text": { "type": "mrkdwn", "text": "You can add a button alongside text in your message. ", }, "accessory": { "type": "button", "action_id": "a", "text": {"type": "plain_text", "text": "Button"}, "value": "click_me_123", }, } ] ) res = client.views_open( trigger_id=body["trigger_id"], view={ "type": "modal", "callback_id": "view-id", "title": { "type": "plain_text", "text": "My App", }, "submit": { "type": "plain_text", "text": "Submit", }, "close": { "type": "plain_text", "text": "Cancel", }, "blocks": [ { "type": "input", "element": {"type": "plain_text_input"}, "label": { "type": "plain_text", "text": "Label", }, }, { "type": "input", "block_id": "es_b", "element": { "type": "external_select", "action_id": "es_a", "placeholder": {"type": "plain_text", "text": "Select an item"}, "min_query_length": 0, }, "label": {"type": "plain_text", "text": "Search"}, }, { "type": "input", "block_id": "mes_b", "element": { "type": "multi_external_select", "action_id": "mes_a", "placeholder": {"type": "plain_text", "text": "Select an item"}, "min_query_length": 0, }, "label": {"type": "plain_text", "text": "Search (multi)"}, }, ], }, ) logger.info(res) @app.options("es_a") def show_options(ack): ack( {"options": [{"text": {"type": "plain_text", "text": "Maru"}, "value": "maru"}]} ) @app.options("mes_a") def show_multi_options(ack): ack( { "option_groups": [ { "label": {"type": "plain_text", "text": "Group 1"}, "options": [ { "text": {"type": "plain_text", "text": "Option 1"}, "value": "1-1", }, { "text": {"type": "plain_text", "text": "Option 2"}, "value": "1-2", }, ], }, { "label": {"type": "plain_text", "text": "Group 2"}, "options": [ { "text": {"type": "plain_text", "text": "Option 1"}, "value": "2-1", }, ], }, ] } ) @app.view("view-id") def view_submission(ack, body, logger): ack() logger.info(body["view"]["state"]["values"]) @app.action("a") def button_click(ack, body, respond): ack() user_id = body["user"]["id"] # in_channel / dict respond( { "response_type": "in_channel", "replace_original": False, "text": f"<@{user_id}> clicked a button! (in_channel)", } ) # ephemeral / kwargs respond( replace_original=False, text=":white_check_mark: Done!", ) if __name__ == "__main__": app.start(3000) # pip install slack_bolt # export SLACK_SIGNING_SECRET=*** # export SLACK_BOT_TOKEN=xoxb-*** # python modals_app.py
X Tutup