New event script, pages for past events

This commit is contained in:
2025-11-20 17:17:43 -08:00
parent 8df3d41aac
commit cd942b97b0
4 changed files with 215 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
---
title: "Alumni Night"
date: 2025-11-10
tags: [events]
author: LUG Board
---
David Z., the man himself who revived UCLA LUG in 2022, who has worked at Tesla and Apple, is visiting from the Bay Area. You can ask him about UCLA LUG history, what distros he recommends, how Linux is used in industry, how to get internships, or just joke around.
* **Date**: 2025-11-13
* **Time**: 6-8 PM
* **Location**: Boelter Hall 4283

View File

@@ -0,0 +1,13 @@
---
title: "Spooky E-Waste Tour 👻🎃"
date: 2025-10-29
tags: [events]
author: LUG Board
---
It's like trick-or-treating except the goodies aren't edible. Costumes (or painted nails 💅) are highly encouraged. Meet by the compass statue at the fifth floor Boelter entrance.
* **Date**: 2025-10-31
* **Time**: 8-10 PM
* **Location**: Boelter Hall Main Entrance

View File

@@ -0,0 +1,13 @@
---
title: "Surprise Server Room Tour 🎉"
date: 2025-11-20
tags: [events]
author: LUG Board
---
We're inviting members of LUG for an exclusive look at the Boelter Hall server room, where we have our own rack and keep some spare e-waste as well.
* **Date**: 2025-11-20
* **Time**: 6-7 PM
* **Location**: Boelter Hall 3292

176
create_event.sh Executable file
View File

@@ -0,0 +1,176 @@
#!/bin/bash
# Function to prompt for input with a default value
prompt() {
local prompt_text="$1"
local default_val="$2"
local var_name="$3"
if [ -n "$default_val" ]; then
read -p "$prompt_text [$default_val]: " input
eval $var_name="\${input:-$default_val}"
else
read -p "$prompt_text: " input
eval $var_name="\$input"
fi
}
# --- 1. Gather Event Details ---
echo "--- New Event Wizard ---"
prompt "Event Name" "" EVENT_NAME
prompt "Date (YYYY-MM-DD)" "$(date +%Y-%m-%d)" EVENT_DATE
prompt "Time (e.g. 6-9 PM)" "6-9 PM" EVENT_TIME
prompt "Location" "Engineering IV, Maxwell Room (57-124)" EVENT_LOCATION
prompt "Ping Preference (1: @everyone, 2: @UCLA, 3: None)" "3" PING_CHOICE
case $PING_CHOICE in
1) PING_TEXT="@everyone" ;;
2) PING_TEXT="<@&1000205372327481444>" ;; # Assuming @UCLA role ID, replace if known or use generic
*) PING_TEXT="" ;;
esac
echo "Enter Description (Markdown supported). Press Ctrl+D on a new line to finish:"
EVENT_DESCRIPTION=$(cat)
echo "" # Add newline after input
# Slugify event name for filename
SLUG=$(echo "$EVENT_NAME" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z)
FILENAME="content/events/${SLUG}.md"
# --- 2. Generate Hugo Content ---
echo "Generating $FILENAME..."
cat <<EOF > "$FILENAME"
---
title: "$EVENT_NAME"
date: $(date +%Y-%m-%d)
tags: [events]
author: LUG Board
---
$EVENT_DESCRIPTION
* **Date**: $EVENT_DATE
* **Time**: $EVENT_TIME
* **Location**: $EVENT_LOCATION
EOF
echo "Hugo page created."
# --- 3. Discord Notification (Webhook) ---
# Check for env var or prompt
if [ -z "$DISCORD_WEBHOOK_URL" ]; then
prompt "Enter Discord Webhook URL (leave empty to skip)" "" DISCORD_WEBHOOK_URL
fi
if [ -n "$DISCORD_WEBHOOK_URL" ]; then
echo "Sending Discord announcement..."
# Construct JSON payload
# Note: Using jq would be safer, but manual construction avoids dependencies if simple
# Escaping quotes in description for JSON
SAFE_DESC=$(echo "$EVENT_DESCRIPTION" | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g')
JSON_PAYLOAD=$(cat <<EOF
{
"content": "$PING_TEXT **New Event: $EVENT_NAME**",
"embeds": [
{
"title": "$EVENT_NAME",
"description": "$SAFE_DESC",
"color": 5814783,
"fields": [
{
"name": "When",
"value": "$EVENT_DATE @ $EVENT_TIME",
"inline": true
},
{
"name": "Where",
"value": "$EVENT_LOCATION",
"inline": true
}
]
}
]
}
EOF
)
curl -H "Content-Type: application/json" -d "$JSON_PAYLOAD" "$DISCORD_WEBHOOK_URL"
echo -e "\nAnnouncement sent."
else
echo "Skipping Discord announcement."
fi
# --- 4. Discord Calendar Event ---
# Requires Bot Token and Guild ID
if [ -z "$DISCORD_BOT_TOKEN" ]; then
prompt "Enter Discord Bot Token (leave empty to skip calendar)" "" DISCORD_BOT_TOKEN
fi
if [ -z "$DISCORD_GUILD_ID" ] && [ -n "$DISCORD_BOT_TOKEN" ]; then
prompt "Enter Discord Guild ID" "" DISCORD_GUILD_ID
fi
if [ -n "$DISCORD_BOT_TOKEN" ] && [ -n "$DISCORD_GUILD_ID" ]; then
echo "Creating Discord Calendar Event..."
# Need ISO8601 timestamp for start_time.
# Attempt to parse date and time. This is tricky in bash without strict format.
# Assuming user input follows YYYY-MM-DD and roughly HH:MM format or we just use the date at a default time if parsing fails?
# Let's try to be smart: Date + Start time.
# Extract start time from "6-9 PM" -> "18:00"
# This is a simplification. For robust parsing, might need python or date utils.
# Extract start hour and minute
START_HOUR=$(echo "$EVENT_TIME" | grep -oE '^[0-9]+' | head -1)
START_MINUTE=$(echo "$EVENT_TIME" | grep -oE ':[0-9]+' | sed 's/://' | head -1)
START_MINUTE=${START_MINUTE:-00}
if [[ "$EVENT_TIME" == *"PM"* ]] && [ "$START_HOUR" -lt 12 ]; then
START_HOUR=$((START_HOUR + 12))
fi
# Construct ISO string with timezone using date command
START_DATE_STR="$EVENT_DATE $START_HOUR:$START_MINUTE"
START_ISO=$(date -d "$START_DATE_STR" --iso-8601=seconds)
# End time: Start + 2 hours
# Use START_ISO as base to ensure correct calculation
END_ISO=$(date -d "$START_ISO + 2 hours" --iso-8601=seconds)
# Location Type 3 is "External"
CAL_PAYLOAD=$(cat <<EOF
{
"name": "$EVENT_NAME",
"description": "$SAFE_DESC",
"scheduled_start_time": "$START_ISO",
"scheduled_end_time": "$END_ISO",
"privacy_level": 2,
"entity_type": 3,
"entity_metadata": {
"location": "$EVENT_LOCATION"
}
}
EOF
)
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "https://discord.com/api/v10/guilds/$DISCORD_GUILD_ID/scheduled-events" \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d "$CAL_PAYLOAD")
HTTP_BODY=$(echo "$RESPONSE" | head -n -1)
HTTP_STATUS=$(echo "$RESPONSE" | tail -n 1)
if [[ "$HTTP_STATUS" =~ ^2 ]]; then
echo -e "\nCalendar event created."
else
echo -e "\nFailed to create calendar event. HTTP $HTTP_STATUS"
echo "Response: $HTTP_BODY"
echo "Payload: $CAL_PAYLOAD"
fi
else
echo "Skipping Calendar event."
fi
echo "Done!"