Skip to content

Commit 9dbd59d

Browse files
committed
add event rejection reasons
1 parent a8dc80b commit 9dbd59d

File tree

4 files changed

+137
-34
lines changed

4 files changed

+137
-34
lines changed

events/buttons/reject_event.py

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from slack_sdk import WebClient
22

33
from utils.env import env
4-
from views.app_home import get_home
4+
from views.reject_event import get_reject_event_modal
55

66
from typing import Any, Callable
77

@@ -18,37 +18,6 @@ def handle_reject_event_btn(ack: Callable, body: dict[str, Any], client: WebClie
1818
)
1919
return
2020

21-
value = body["actions"][0]["value"]
21+
event_id = body["actions"][0]["value"]
2222

23-
event = env.airtable.get_event(value)
24-
25-
if not event:
26-
client.chat_postEphemeral(
27-
user=body["user"]["id"],
28-
channel=body["user"]["id"],
29-
text=f"Event with id `{value}` not found.",
30-
)
31-
return
32-
33-
if event["fields"].get("Canceled", False):
34-
client.chat_postEphemeral(
35-
user=body["user"]["id"],
36-
channel=body["user"]["id"],
37-
text=f"Event with id `{value}` has already been rejected.",
38-
)
39-
return
40-
41-
event = env.airtable.update_event(value, **{"Canceled": True})
42-
43-
client.chat_postMessage(
44-
user=body["user"]["id"],
45-
channel=env.slack_approval_channel,
46-
text=f"<@{user_id}> rejected {event['fields']['Title']} for <@{event['fields']['Leader Slack ID']}>.",
47-
)
48-
49-
client.chat_postMessage(
50-
channel=event["fields"]["Leader Slack ID"],
51-
text=f"Your event {event['fields']['Title']} has been rejected by <@{user_id}>. They should have sent you a message about this, please reach out to them if they've not.",
52-
)
53-
54-
client.views_publish(user_id=user_id, view=get_home(user_id, client))
23+
client.views_open(user_id=user_id, view=get_reject_event_modal(event_id), trigger_id=body["trigger_id"])

events/views/reject_event.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from typing import Any, Callable
2+
from slack_sdk import WebClient
3+
4+
from utils.env import env
5+
6+
7+
def handle_reject_event_view(ack: Callable, body: dict[str, Any], client: WebClient):
8+
ack()
9+
view = body["view"]
10+
message = view["state"]["values"]["message"]["message"]["rich_text_value"]
11+
event_id = view["private_metadata"]
12+
13+
event = env.airtable.get_event(event_id)
14+
15+
if not event:
16+
client.chat_postEphemeral(
17+
user=body["user"]["id"],
18+
channel=body["user"]["id"],
19+
text=f"Event with id `{event_id}` not found.",
20+
)
21+
return
22+
23+
if event["fields"].get("Canceled", False):
24+
client.chat_postEphemeral(
25+
user=body["user"]["id"],
26+
channel=body["user"]["id"],
27+
text=f"Event with id `{event_id}` has already been rejected.",
28+
)
29+
return
30+
31+
event = env.airtable.update_event(event_id, **{"Canceled": True})
32+
33+
client.chat_postMessage(
34+
channel=env.slack_approval_channel,
35+
text=f"<@{body['user']['id']}> rejected {event['fields']['Title']} for <@{event['fields']['Leader Slack ID']}> with the following reason.",
36+
blocks=[
37+
{
38+
"type": "section",
39+
"text": {
40+
"type": "mrkdwn",
41+
"text": f"<@{body['user']['id']}> rejected {event['fields']['Title']} for <@{event['fields']['Leader Slack ID']}> with the following reason."
42+
}
43+
}, {
44+
"type": "divider",
45+
},
46+
message
47+
]
48+
)
49+
50+
client.chat_postMessage(
51+
channel=event["fields"]["Leader Slack ID"],
52+
text=f"Your event {event['fields']['Title']} has been rejected by <@{body['user']['id']}> with the following reason. Please reach out to them if you have any questions or need help.",
53+
blocks=[
54+
{
55+
"type": "section",
56+
"text": {
57+
"type": "mrkdwn",
58+
"text": f"Your event {event['fields']['Title']} has been rejected by <@{body['user']['id']}> :(\nPlease reach out to them if you have any questions or need help."
59+
}
60+
}, {
61+
"type": "divider",
62+
},
63+
message
64+
]
65+
)
66+

utils/slack.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from events.buttons.edit_event import handle_edit_event_btn
77
from events.commands.create_event import handle_create_event_cmd
88
from events.views.create_event import handle_create_event_view
9+
from events.views.reject_event import handle_reject_event_view
910
from events.views.edit_event import handle_edit_event_view
1011
from events.buttons.propose_event import handle_propose_event_btn
1112
from events.buttons.approve_event import handle_approve_event_btn
@@ -35,6 +36,11 @@ def edit_event_view(ack: Callable, body: dict[str, Any], client: WebClient):
3536
handle_edit_event_view(ack, body, client)
3637

3738

39+
@app.view("reject_event")
40+
def reject_event_view(ack: Callable, body: dict[str, Any], client: WebClient):
41+
handle_reject_event_view(ack, body, client)
42+
43+
3844
@app.action("approve-event")
3945
def approve_event(ack: Callable, body: dict[str, Any], client: WebClient):
4046
handle_approve_event_btn(ack, body, client)

views/reject_event.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from utils.env import env
2+
3+
def get_reject_event_modal(event_id: str):
4+
event = env.airtable.get_event(event_id)
5+
if not event:
6+
return {
7+
"type": "modal",
8+
"title": {
9+
"type": "plain_text",
10+
"text": "Error",
11+
"emoji": True
12+
},
13+
"close": {
14+
"type": "plain_text",
15+
"text": "Close",
16+
"emoji": True
17+
},
18+
"blocks": [
19+
{
20+
"type": "section",
21+
"text": {
22+
"type": "mrkdwn",
23+
"text": f"Event with id `{event_id}` not found."
24+
}
25+
}
26+
]
27+
}
28+
return {
29+
"type": "modal",
30+
"callback_id": "reject_event",
31+
"title": {
32+
"type": "plain_text",
33+
"text": "Reject Event",
34+
"emoji": True
35+
},
36+
"submit": {
37+
"type": "plain_text",
38+
"text": "Reject",
39+
"emoji": True
40+
},
41+
"close": {
42+
"type": "plain_text",
43+
"text": "Cancel",
44+
"emoji": True
45+
},
46+
"blocks": [
47+
{
48+
"type": "input",
49+
"block_id": "message",
50+
"element": {
51+
"type": "rich_text_input",
52+
"action_id": "message"
53+
},
54+
"label": {
55+
"type": "plain_text",
56+
"text": f"Why are you rejecting \"{event['fields']['Title']}\"?",
57+
"emoji": True
58+
}
59+
}
60+
],
61+
"private_metadata": event_id
62+
}

0 commit comments

Comments
 (0)