How manasbir/open-class-discord works
Open Class Discord is a Waterloo classroom-availability bot. Students invoke Discord slash commands; the worker verifies and dispatches interactions, and the find-class command queries D1 for rooms available at the requested time and formats an embed response. Separately, scheduled worker events refresh classroom data from the Waterloo Open Data API into D1. The sampled code establishes the lookup and initialization paths; the refresh implementation and init command handler were not sampled, so their internal wiring is not expanded.
Main entry points: init.rs Class Data Initializer · src/lib.rs Command Router · find_class.rs Find Class · src/lib.rs Scheduled Refresh
Components 17
Worker Runtime
- HTTP Handler
workers/src/lib.rs - Scheduled Refresh
workers/src/lib.rs
Discord Commands
- Interaction Parser
crates/discord/src/lib.rs - Command Router
crates/discord/src/lib.rs - Find Class
crates/discord/src/commands/find_class.rs - Init Command
crates/discord/src/commands/init.rs - Embed Builder
crates/discord/src/embed/builder.rs - Command Definitions
crates/discord/src/commands/mod.rs
Classroom Data
- Class Data Initializer
crates/d1/src/init.rs - Data Inserters
crates/d1/src/insert.rs - Refresh Logic
crates/d1/src/refresh.rs - Availability Query
crates/d1/src/lib.rs - Portal Client
crates/portal/src/lib.rs
External Services
- D1 Database
- Discord API
- UW Open Data
Other components
- Student
Connections 18
- Student → Discord API: invokes commands
- Discord API → HTTP Handler: posts interactions
- HTTP Handler → Interaction Parser: dispatches request
- Interaction Parser → Command Router: routes commands
- Command Router → Find Class: dispatches find
- Command Router → Init Command: dispatches init
- Find Class → Availability Query: queries availability
- Availability Query → D1 Database: reads rooms
- Find Class → Embed Builder: builds response
- Embed Builder → Discord API: returns embed
- Scheduled Refresh → Refresh Logic: runs refresh
- Scheduled Refresh → D1 Database: provides database
- Class Data Initializer → Portal Client: fetches classes
- Portal Client → UW Open Data: requests data
- Class Data Initializer → Data Inserters: prepares records
- Class Data Initializer → D1 Database: batches writes
- Data Inserters → D1 Database: prepares statements
- Command Definitions → Discord API: defines commands