Skip to content

/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 $People via resolve_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 $People row after resolve_person()
  • last_facilitated_or_tog_attended is a Reference to $Events — fetch event_date and concat_title from that row for display
  • No writes, no post edits — read-only command
  • Case sensitivity on event type strings: last_taken_TtT uses "train the trainers" (lowercase) and last_taken_katon_class uses "katon fundamentals" (lowercase) in their Grist lookups. These are not in the standard structured_description friendly 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_ToG formula 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_ToG logic in the bot — read the field directly
  • tog_dates_attended_instructed_etc is ordered by -event_date — the first element is the most recent

Open Questions

  1. ToG add default role — when adding ToG credit, should default be attendee or should the bot always ask?
  2. /member tog remove frequency — is this a real use case or just a nice-to-have? Could be deferred to Grist direct access.
  3. /member events for non-Discord members — all current members have Discord, so @mention is fine for now. Revisit at P3.