Skip to content

Commit 6e84841

Browse files
committed
add current event
1 parent 3a8b80d commit 6e84841

File tree

2 files changed

+114
-16
lines changed

2 files changed

+114
-16
lines changed

utils/slack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def approve_event(ack: Callable, body: dict[str, Any], client: WebClient):
3434
@app.event("app_home_opened")
3535
def update_home_tab(client: WebClient, event: dict[str, Any]):
3636
user_id = event["user"]
37-
home_tab = get_home(user_id)
37+
home_tab = get_home(user_id, client)
3838
client.views_publish(user_id=user_id, view=home_tab)
3939

4040

views/app_home.py

Lines changed: 113 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,97 @@
11
from datetime import datetime, timezone
2+
from slack_sdk import WebClient
23

34
from utils.env import env
45
from utils.utils import user_in_safehouse, md_to_mrkdwn
56

67

7-
def get_home(user_id: str):
8+
def get_home(user_id: str, client: WebClient):
89
sad_member = user_in_safehouse(user_id)
9-
admin = True if user_id in env.authorised_users else False
10+
user_info = client.users_info(user=user_id)
11+
ws_admin = True if user_info["user"]["is_admin"] or user_info["user"]["is_owner"] or user_info["user"]["is_primary_owner"] else False
12+
admin = True if user_id in env.authorised_users or ws_admin else False
1013
events = env.airtable.get_all_events(
11-
unapproved=True if admin or sad_member else False
14+
unapproved=True
1215
)
1316
upcoming_events = [
1417
event
1518
for event in events
1619
if datetime.fromisoformat(event["fields"]["Start Time"])
1720
> datetime.now(timezone.utc)
1821
]
22+
current_events = [
23+
event for event in events if datetime.now(timezone.utc) < datetime.fromisoformat(event["fields"]["End Time"]) and datetime.now(timezone.utc) > datetime.fromisoformat(event["fields"]["Start Time"])
24+
]
25+
26+
current_events_blocks = []
27+
for event in current_events:
28+
if not event["fields"].get("Approved", False) or not event["fields"].get("Leader Slack ID", "") == user_id or not sad_member or not admin:
29+
continue
30+
current_events_blocks.append({"type": "divider"})
31+
fallback_time = datetime.fromisoformat(event["fields"]["End Time"]).strftime(
32+
"Ends at %I:%M %p"
33+
)
34+
formatted_time = f"<!date^{int(datetime.fromisoformat(event['fields']['End Time']).timestamp())}^Ends at {{time}}|{fallback_time}>"
35+
mrkdwn = md_to_mrkdwn(event["fields"]["Description"])
36+
current_events_blocks.append(
37+
{
38+
"type": "section",
39+
"text": {
40+
"type": "mrkdwn",
41+
"text": f"{'*[UNAPPROVED]:* ' if not event['fields'].get('Approved', False) else ''}*{event['fields']['Title']}* - <@{event['fields']['Leader Slack ID']}>\n{mrkdwn}\n*{formatted_time}*",
42+
},
43+
"accessory": {
44+
"type": "image",
45+
"image_url": event["fields"]["Avatar"][0]["url"],
46+
"alt_text": f"{event['fields']['Leader']} profile picture",
47+
},
48+
}
49+
)
50+
buttons = []
51+
if admin and not event["fields"].get("Approved", False):
52+
buttons.append(
53+
{
54+
"type": "button",
55+
"text": {"type": "plain_text", "text": "Approve", "emoji": True},
56+
"style": "primary",
57+
"value": event["id"],
58+
"action_id": "approve-event",
59+
}
60+
)
61+
buttons.append(
62+
{
63+
"type": "button",
64+
"text": {"type": "plain_text", "text": "Join!", "emoji": True},
65+
"value": "join",
66+
"style": "primary",
67+
"url": event["fields"].get("Event Link", "https://hackclub.slack.com/archives/C07TNAZGMHS"), # Default to #high-seas-bulletin
68+
}
69+
)
70+
if user_id == event["fields"]["Leader Slack ID"] or admin:
71+
buttons.append(
72+
{
73+
"type": "button",
74+
"text": {"type": "plain_text", "text": "Edit", "emoji": True},
75+
"value": "edit-event",
76+
"action_id": "edit-event",
77+
}
78+
)
79+
if event["fields"].get("Approved", False):
80+
buttons.append(
81+
{
82+
"type": "button",
83+
"text": {"type": "plain_text", "text": "More Info", "emoji": True},
84+
"value": "more-info",
85+
"action_id": "more-info",
86+
}
87+
)
88+
current_events_blocks.append({"type": "actions", "elements": [*buttons]})
89+
90+
1991
upcoming_events_blocks = []
2092
for event in upcoming_events:
93+
if not event["fields"].get("Approved", False) or not event["fields"].get("Leader Slack ID", "") == user_id or not sad_member or not admin:
94+
continue
2195
upcoming_events_blocks.append({"type": "divider"})
2296
fallback_time = datetime.fromisoformat(event["fields"]["Start Time"]).strftime(
2397
"%A, %B %d at %I:%M %p"
@@ -90,18 +164,7 @@ def get_home(user_id: str):
90164
)
91165
upcoming_events_blocks.append({"type": "actions", "elements": [*buttons]})
92166

93-
return {
94-
"type": "home",
95-
"blocks": [
96-
{
97-
"type": "header",
98-
"text": {
99-
"type": "plain_text",
100-
"text": "Upcoming Events",
101-
"emoji": True,
102-
},
103-
},
104-
{
167+
create_event_btn =[ {
105168
"type": "actions",
106169
"elements": [
107170
{
@@ -115,6 +178,41 @@ def get_home(user_id: str):
115178
"action_id": "create-event" if sad_member else "propose-event",
116179
}
117180
],
181+
}]
182+
183+
current_events_combined = [
184+
{
185+
"type": "header",
186+
"text": {
187+
"type": "plain_text",
188+
"text": "Current Events" if len(current_events_blocks) > 1 else "Current Event",
189+
"emoji": True,
190+
},
191+
},
192+
*current_events_blocks,
193+
] if len(current_events_blocks) > 0 else []
194+
195+
return {
196+
"type": "home",
197+
"blocks": [
198+
{
199+
"type": "header",
200+
"text": {
201+
"type": "plain_text",
202+
"text": f":ac-isabelle-cheer: Hi {user_info['user']['profile']['display_name'] or user_info['user']['profile']['real_name']}!",
203+
"emoji": True,
204+
},
205+
},
206+
*current_events_combined,
207+
{"type": "divider"},
208+
*create_event_btn,
209+
{
210+
"type": "header",
211+
"text": {
212+
"type": "plain_text",
213+
"text": "Upcoming Events" if len(upcoming_events_blocks) > 1 else "Upcoming Event" if len(upcoming_events_blocks) == 1 else "No Upcoming Events",
214+
"emoji": True,
215+
},
118216
},
119217
*upcoming_events_blocks,
120218
{"type": "divider"},

0 commit comments

Comments
 (0)