본문 바로가기
실무/슬랙 봇 만들기

파이썬 슬랙 봇 만들기(3-3): 파일 전송하기 > 모달 드롭다운 만들기

by davi_kr 2023. 4. 18.

목차

    반응형

    이전 포스팅 - 2023.04.18 - [파이썬/파이썬 활용] - 파이썬 슬랙 봇 만들기(3-2): 파일 전송하기 > 드롭다운 메뉴 만들기

     

    파이썬 슬랙 봇 만들기(3-2): 파일 전송하기 > 드롭다운 메뉴 만들기

    이전 포스팅 > 2023.04.18 - [파이썬/파이썬 활용] - 파이썬 슬랙 봇 만들기(3-2): 파일 전송하기 > 드롭다운 메뉴 만들기 이번 포스팅에선 드롭다운을 만들어보겠습니다. [코드 리뷰하기] app.py에 아래

    develop-davi-kr.tistory.com

    이번 포스팅에선 사무실이라는 글자를 눌렀을 때 나오는 모달 드롭다운을 만들어보겠습니다.

    모달 창은 기존의 페이지에서 새로운 창을 보여주고 기존의 화면은 흐려지게 만들어줘서 새로운 창에만 시선을 집중시킵니다.

    그래서 사용자가 바로 아 여기서 뭘 해야 하는구나를 유도하기에 좋습니다.

    [코드 리뷰]

    사용한 코드를 지난 시간에 작성한 코드 아래에 붙여줍니다.

    @app.action("select_2")
    def approve_request(ack, body, client):
        ack()
        selected = body["actions"][0]["selected_option"]["value"]
        if selected == "사무실":
            client.views_open(
                trigger_id=body["trigger_id"],
                view={
                    "type": "modal",
                    # View identifier
                    "callback_id": "view_1",
                    "title": {"type": "plain_text", "text": "사무실 "},
                    "submit": {"type": "plain_text", "text": "Submit"},
                    "blocks": [
                        {
                            "type": "input",
                            "block_id": "input_request_type",
                            "element": {
                                "type": "static_select",
                                "placeholder": {
                                    "type": "plain_text",
                                    "text": "Select an item",
                                },
                                "options": [
                                    {
                                        "text": {
                                            "type": "plain_text",
                                            "text": "테스트 테스트",
                                        },
                                        "value": "테스트 테스트",
                                    },
                                    {
                                        "text": {
                                            "type": "plain_text",
                                            "text": "테스트 테스트",
                                        },
                                        "value": "테스트 테스트",
                                    },
                                    {
                                        "text": {
                                            "type": "plain_text",
                                            "text": "견적서 출력",
                                        },
                                        "value": "견적서 출력",
                                    },
                                ],
                                "action_id": "select_office_request_type",
                            },
                            "label": {"type": "plain_text", "text": "Label"},
                        },
                    ],
                },
            )

     

    앱의 action 중에 id 값이 select_2인게 있으면 approve_request 함수를 실행합니다.

    selected = body["actions"][0]["selected_option"]["value"] 는 지난 2탄의 드롭다운에서 어떤 걸 선택했냐를 의미합니다. selected에 그 값이 담기고 if문을 통해 사무실이라는 단어로 확인이 되면 아래의 코드들이 실행됩니다.

    client.views_open() 매서드를 통해 모달창을 열게 만듭니다. 이 매서드는 어떤 걸 기준으로 열리는지를 알아야 해서 trigger_id를 값으로 넣어줘야 합니다. 그리고 view 부분에서는 기존에 했던 것처럼 블락을 만들어주면 되는데 type이 모달인 것을 설정해주셔야 합니다.

    "callback_id": "view_1"는 제출을 했을 때, 그 값을 받아서 다음 액션을 할 수 있도록 해주는 값이라 꼭 기재해주셔야 합니다.

    여기까지 기재해주고 나면 2탄과 마찬가지로 그냥 드롭다운을 구성하는 것으로 보시면 됩니다.

     

    text에 submit이라고 되어 있는 걸 제출하기로 바꾸면 모달창에서도 값이 바뀝니다.

    닫는 것도 수정하고 싶다면 위에는 없는데

    "close": {
    "type": "plain_text",
    "text": "Cancel"
    },

    를 추가하고 여기서 text를 다른 걸로 바꿔주시면 됩니다.

    마찬가지로 Label이라고 써있는 것도 다른 단어를 넣어주면 바뀝니다.

    그러면 화면을 이렇게 구성할 수 있습니다.

    예시는 실제 슬랙이 아니고 2탄에서 공유했던 Block Kit Builder에서 만든 걸 캡처했습니다.

    여기서 눈치가 빠른 분들은 아시겠지만.. 이전 드롭다운에서 여러가지 항목이 있기 때문에 거기서 다른 값을 선택했을 때, 이번 코드에서 elif를 주고 selected == "test" 이런 식으로 짜주게 되면 각각에 부합하는 경우에 다른 액션을 하도록 만들 수도 있습니다.

    이번 포스팅은 여기까지 하겠습니다.

    이 다음에는 견적서 출력을 위한 필수 정보를 받는 모달을 만들어보겠습니다.

    반응형

    댓글