/member — Slash Command Spec¶
Not yet implemented. This page is a spec for a planned feature.
Commands¶
/member events [optional:role] [@member]
/member tog [add|remove|info] [@member]
/member events [optional:role] [@member]¶
Signature¶
/member events [@member]
/member events [attendee|instructor|TA] [@member]
Access¶
Organizer+
Parameters¶
@member— native Discord mention, resolved to$Peopleviaresolve_person(snowflake)role(optional) — autocomplete:attendee,instructor,TA. If omitted, returns all three where data exists.
Grist Fields Used¶
All pre-computed on $People — no bot-side logic needed:
| Display | Grist field | Notes |
|---|---|---|
| Last P1 attended | last_taken_p1 |
Date |
| Last P2 attended | last_taken_p2 |
Date |
| Last D1 attended | last_taken_0_5 |
Date |
| Last D2 attended | last_taken_0_75 |
Date |
| Last R1 attended | last_taken_r1 |
Date |
| Last R2 attended | last_taken_r2 |
Date |
| Last TtT attended | last_taken_TtT |
Date |
| Last katon attended | last_taken_katon_class |
Date |
| Times taken P1 | times_taken_p1 |
Numeric |
| Times taken P2 | times_taken_p2 |
Numeric |
| Classes attended | classes_attended |
List of event type strings |
| Classes facilitated | classes_facilitated |
List of event type strings |
| Times taught P1 | times_taught_p1 |
Numeric |
| Times taught P2 | times_taught_p2 |
Numeric |
| Last ToG event | last_facilitated_or_tog_attended |
Reference → Event |
| Most frequent region | most_frequent_region_attended |
Text |
| Regions breakdown | regions_attended |
Text, pre-formatted |
Response Format¶
Ephemeral embed. Example for /member events @alice:
📋 Event history — @alice
ATTENDED
P1: Mar 2 2024 (3×)
P2: Jan 15 2024 (2×)
D1: Nov 4 2023
R1: —
R2: —
TtT: —
INSTRUCTED
P1: Jun 14 2024 (4×)
P2: —
FACILITATED / HELPED
Last ToG event: Jun 14 2024 South P1
Most frequent region: South
Regions: South: 8, North: 3, East: 1
Omit rows where value is null and role filter is not specified. If role filter is specified, only show that section.
Dev Notes¶
- All fields are readable directly from
$Peoplerow afterresolve_person() last_facilitated_or_tog_attendedis a Reference to$Events— fetchevent_dateandconcat_titlefrom that row for display- No writes, no post edits — read-only command
- Case sensitivity on event type strings:
last_taken_TtTuses"train the trainers"(lowercase) andlast_taken_katon_classuses"katon fundamentals"(lowercase) in their Grist lookups. These are not in the standardstructured_descriptionfriendly name map and are ad-hoc event types. Display them as-is rather than attempting a friendly name lookup.
/member tog [add|remove|info] [@member]¶
Signature¶
/member tog [@member] — defaults to info
/member tog info [@member]
/member tog add [@member]
/member tog remove [@member]
Access¶
Representative+
What is ToG¶
"Toucher of Grass" — a member who has attended at least one counts_for_ToG event in the past 18 months (~547 days). Tracked via $People.tog_dates_attended_instructed_etc and $People.is_ToG.
info action¶
Read-only. Returns ephemeral:
🌿 ToG status — @alice
Current: ✅ Yes
Last ToG event: Jun 14 2024 — South P1
ToG events (18mo window): 4
Officer role (exempt from ToG req): No
Fields:
- is_ToG — bool, pre-computed on $People
- last_facilitated_or_tog_attended → event date and title
- tog_dates_attended_instructed_etc — count those within 547 days of today
- discord_id_Officer_roles_role — if non-empty and not only ["Vetting Team"], note exemption
add action¶
Adds the member to a past event's attendees or helpers_* ReferenceList to establish ToG credit.
Flow:
1. Bot returns the last 5 counts_for_ToG=True events as a numbered list for the operator to select from
2. Operator selects event number
3. Bot confirms: Add @alice to [event] attendees for ToG credit? [Yes] [Cancel]
4. On confirm: PATCH $Events.attendees to include member (merge, deduplicate)
5. Ephemeral confirmation with updated ToG status
Note: Adding to attendees is the right field for ToG credit unless the member's role at that event was instructor/TA/helper, in which case those fields should be used. Add an optional as [attendee|instructor|TA|helper] param to cover this.
remove action¶
Removes the member from a specific event's people lists. Rare — data correction only.
Flow: 1. Bot lists events the member currently appears in (any role field) within the 18mo window 2. Operator selects event and role field to remove from 3. Confirm + PATCH
Dev Notes¶
is_ToGformula in$People: if member has an officer role other than Vetting Team, returns True regardless of attendance. Bot should reflect this exemption in display.- Do not attempt to replicate
is_ToGlogic in the bot — read the field directly tog_dates_attended_instructed_etcis ordered by-event_date— the first element is the most recent
Open Questions¶
- ToG
adddefault role — when adding ToG credit, should default beattendeeor should the bot always ask? /member tog removefrequency — is this a real use case or just a nice-to-have? Could be deferred to Grist direct access./member eventsfor non-Discord members — all current members have Discord, so@mentionis fine for now. Revisit at P3.