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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user