feat: add /trip slash commands + add trips & itinerary system

New /trips router with full CRUD, attendee management, and nested
events. Events validate date is within parent trip range and inherit
trip location when not explicitly set. Leaving a trip cascades
removal from all its events.

New TripCommands cog with /trip create, list, view, delete, join,
leave and /trip event add, remove, join, leave. Event autocomplete
is scoped to the selected trip. Enforces must-be-on-trip rule for
event joins with a clear error message.
This commit is contained in:
Logan
2026-06-20 23:25:08 -04:00
parent a4962d7b0e
commit fb096d582d
6 changed files with 730 additions and 1 deletions
+26
View File
@@ -134,3 +134,29 @@ class AlertEvent(BaseModel):
transcript_snippet: Optional[str] = None
triggered_at: Optional[datetime] = None
acknowledged: bool = False
# ---------------------------------------------------------------------------
# Trips
# ---------------------------------------------------------------------------
class TripCreate(BaseModel):
name: str
location: str
maps_link: Optional[str] = None
start_date: str # YYYY-MM-DD
end_date: str # YYYY-MM-DD
class TripEventCreate(BaseModel):
title: str
date: str # YYYY-MM-DD, must fall within parent trip range
time: Optional[str] = None # HH:MM (24h)
location: Optional[str] = None # inherits trip location if None
maps_link: Optional[str] = None
notes: Optional[str] = None
class AttendeeAction(BaseModel):
discord_user_id: str
discord_username: Optional[str] = None