X Tutup
Skip to content

Commit 7cc025d

Browse files
committed
Add dialogs,view_closed etc supports
1 parent 4ae430e commit 7cc025d

23 files changed

+2015
-248
lines changed

samples/app.py

Lines changed: 1 addition & 212 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# ------------------------------------------------
22
# instead of slack_bolt in requirements.txt
3-
import re
43
import sys
54

65
sys.path.insert(1, "..")
@@ -12,7 +11,7 @@
1211

1312
from slack_bolt import App
1413

15-
app = App(process_before_response=True)
14+
app = App()
1615

1716

1817
@app.middleware # or app.use(log_request)
@@ -21,222 +20,12 @@ def log_request(logger, payload, next):
2120
return next()
2221

2322

24-
@app.command("/hello-bolt-python")
25-
# or app.command(re.compile(r"/hello-.+"))(test_command)
26-
def test_command(payload, respond, client, ack, logger):
27-
logger.info(payload)
28-
ack("Thanks!")
29-
30-
respond(blocks=[
31-
{
32-
"type": "section",
33-
"block_id": "b",
34-
"text": {
35-
"type": "mrkdwn",
36-
"text": "You can add a button alongside text in your message. "
37-
},
38-
"accessory": {
39-
"type": "button",
40-
"action_id": "a",
41-
"text": {
42-
"type": "plain_text",
43-
"text": "Button"
44-
},
45-
"value": "click_me_123"
46-
}
47-
}
48-
])
49-
50-
res = client.views_open(
51-
trigger_id=payload["trigger_id"],
52-
view={
53-
"type": "modal",
54-
"callback_id": "view-id",
55-
"title": {
56-
"type": "plain_text",
57-
"text": "My App",
58-
},
59-
"submit": {
60-
"type": "plain_text",
61-
"text": "Submit",
62-
},
63-
"close": {
64-
"type": "plain_text",
65-
"text": "Cancel",
66-
},
67-
"blocks": [
68-
{
69-
"type": "input",
70-
"element": {
71-
"type": "plain_text_input"
72-
},
73-
"label": {
74-
"type": "plain_text",
75-
"text": "Label",
76-
}
77-
},
78-
{
79-
"type": "input",
80-
"block_id": "es_b",
81-
"element": {
82-
"type": "external_select",
83-
"action_id": "es_a",
84-
"placeholder": {
85-
"type": "plain_text",
86-
"text": "Select an item"
87-
}
88-
},
89-
"label": {
90-
"type": "plain_text",
91-
"text": "Search"
92-
}
93-
},
94-
{
95-
"type": "input",
96-
"block_id": "mes_b",
97-
"element": {
98-
"type": "multi_external_select",
99-
"action_id": "mes_a",
100-
"placeholder": {
101-
"type": "plain_text",
102-
"text": "Select an item"
103-
}
104-
},
105-
"label": {
106-
"type": "plain_text",
107-
"text": "Search (multi)"
108-
}
109-
}
110-
111-
]
112-
})
113-
logger.info(res)
114-
115-
116-
@app.options("es_a")
117-
def show_options(ack):
118-
ack({
119-
"options": [
120-
{
121-
"text": {
122-
"type": "plain_text",
123-
"text": "Maru"
124-
},
125-
"value": "maru"
126-
}
127-
]
128-
})
129-
130-
131-
@app.options("mes_a")
132-
def show_multi_options(ack):
133-
ack({
134-
"option_groups": [
135-
{
136-
"label": {
137-
"type": "plain_text",
138-
"text": "Group 1"
139-
},
140-
"options": [
141-
{
142-
"text": {
143-
"type": "plain_text",
144-
"text": "Option 1"
145-
},
146-
"value": "1-1"
147-
},
148-
{
149-
"text": {
150-
"type": "plain_text",
151-
"text": "Option 2"
152-
},
153-
"value": "1-2"
154-
}
155-
]
156-
},
157-
{
158-
"label": {
159-
"type": "plain_text",
160-
"text": "Group 2"
161-
},
162-
"options": [
163-
{
164-
"text": {
165-
"type": "plain_text",
166-
"text": "Option 1"
167-
},
168-
"value": "2-1"
169-
},
170-
]
171-
}
172-
]
173-
})
174-
175-
176-
@app.view("view-id")
177-
def view_submission(ack, payload, logger):
178-
logger.info(payload)
179-
return ack()
180-
181-
182-
@app.action("a")
183-
def button_click(logger, payload, ack, respond):
184-
logger.info(payload)
185-
respond("respond!")
186-
# say(text="say!")
187-
ack()
188-
189-
19023
@app.event("app_mention")
19124
def event_test(payload, say, logger):
19225
logger.info(payload)
19326
say("What's up?")
19427

19528

196-
@app.message("test")
197-
def test_message(logger, payload):
198-
logger.info(payload)
199-
200-
201-
@app.message(re.compile("seratch\d"))
202-
def seratch_message(logger, payload):
203-
logger.info(payload)
204-
205-
206-
# @app.event("message")
207-
# def new_message(logger, payload):
208-
# message = payload.get("event", {}).get("text", None)
209-
# logger.info(f"A new message was posted (text: {message})")
210-
211-
212-
message_deleted_constraints = {"type": "message", "subtype": "message_deleted"}
213-
214-
215-
@app.event(
216-
event=message_deleted_constraints,
217-
matchers=[lambda payload: payload["event"]["previous_message"].get("bot_id", None) is None]
218-
)
219-
def deleted(payload, say):
220-
message = payload["event"]["previous_message"]["text"]
221-
say(f"I've noticed you deleted: {message}")
222-
223-
224-
def print_bot(req, resp, next):
225-
bot_id = req.payload["event"]["previous_message"]["bot_id"]
226-
logger = logging.getLogger(__name__)
227-
logger.info(f"bot_id surely exists here: {bot_id}")
228-
return next()
229-
230-
231-
@app.event(
232-
event=message_deleted_constraints,
233-
matchers=[lambda payload: payload["event"]["previous_message"].get("bot_id", None)],
234-
middleware=[print_bot]
235-
)
236-
def bot_message_deleted(logger):
237-
logger.info("A bot message has been deleted")
238-
239-
24029
if __name__ == "__main__":
24130
app.start(3000)
24231

samples/dialogs_app.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# ------------------------------------------------
2+
# instead of slack_bolt in requirements.txt
3+
import sys
4+
5+
sys.path.insert(1, "..")
6+
# ------------------------------------------------
7+
8+
import logging
9+
10+
logging.basicConfig(level=logging.DEBUG)
11+
12+
from slack_bolt import App
13+
14+
app = App()
15+
16+
17+
@app.middleware # or app.use(log_request)
18+
def log_request(logger, payload, next):
19+
logger.debug(payload)
20+
return next()
21+
22+
23+
@app.command("/hello-bolt-python")
24+
def test_command(payload, client, ack, logger):
25+
logger.info(payload)
26+
ack("I got it!")
27+
res = client.dialog_open(
28+
trigger_id=payload["trigger_id"],
29+
dialog={
30+
"callback_id": "dialog-callback-id",
31+
"title": "Request a Ride",
32+
"submit_label": "Request",
33+
"notify_on_cancel": True,
34+
"state": "Limo",
35+
"elements": [
36+
{
37+
"type": "text",
38+
"label": "Pickup Location",
39+
"name": "loc_origin"
40+
},
41+
{
42+
"type": "text",
43+
"label": "Dropoff Location",
44+
"name": "loc_destination"
45+
},
46+
{
47+
"label": "Type",
48+
"name": "types",
49+
"type": "select",
50+
"data_source": "external"
51+
}
52+
53+
]
54+
}
55+
)
56+
logger.info(res)
57+
58+
59+
@app.action({"type": "dialog_submission", "callback_id": "dialog-callback-id"})
60+
def dialog_submission(ack):
61+
ack()
62+
63+
64+
@app.options({"type": "dialog_suggestion", "callback_id": "dialog-callback-id"})
65+
def dialog_suggestion(ack):
66+
ack({
67+
"options": [
68+
{
69+
"label": "[UXD-342] The button color should be artichoke green, not jalapeño",
70+
"value": "UXD-342"
71+
},
72+
{
73+
"label": "[FE-459] Remove the marquee tag",
74+
"value": "FE-459"
75+
},
76+
{
77+
"label": "[FE-238] Too many shades of gray in master CSS",
78+
"value": "FE-238"
79+
}
80+
]
81+
})
82+
83+
84+
@app.action({"type": "dialog_cancellation", "callback_id": "dialog-callback-id"})
85+
def dialog_cancellation(ack):
86+
ack()
87+
88+
89+
if __name__ == "__main__":
90+
app.start(3000)
91+
92+
# pip install -i https://test.pypi.org/simple/ slack_bolt
93+
# export SLACK_SIGNING_SECRET=***
94+
# export SLACK_BOT_TOKEN=xoxb-***
95+
# python dialogs_app.py

0 commit comments

Comments
 (0)
X Tutup