A Discord bot for UCI's ICS courses that bridges course platforms like Ed Discussion, Piazza, Gradescope, and Discord — designed to keep students informed without switching tabs.
ICSYAK is a multi-purpose Discord bot designed for UCI students in Computer Science and Informatics classes. Originally built for ICS 6B and 6D, it has since expanded to support over a dozen courses across five quarters. The bot solves a key pain point: many courses use Ed Discussion or Piazza as their official course forums, but students form large yet unofficial Discord communities. ICSYAK brings critical information into to Discord, with a full suite of features that automate, track, and notify.
-
Ed Discussion Support:
- Auto-post new threads by category.
- Reacting to posts opens Discord threads with embedded replies (answers & comments).
- Slash command
/link_thread [id]embeds a specific Ed thread via number. - Replaces Ed URLs in user messages with rich embeds and reply threads.
-
Piazza Support (new!):
- Automatically mirrors new posts from Piazza into Discord.
- Built-in handling for follow-ups and responses.
- Uses the
gradescope-toolPython package (contributed to by the developer). - Supports fetching assignment templates (e.g., PDFs for CS161/162).
- Automatically structures the templates and sends reminder messages in Discord before deadlines.
- Custom
/checkincommand with persistent buttons (survive bot restarts). - Tracks participant check-ins using a SQLite database.
- Designed for weekly CS161 check-ins — includes ranking and statistics output.
- Stores and restores interaction IDs on restart for seamless use.
- Adds aesthetic role selection via buttons.
- Fully customizable with dynamic color role sets.
- Useful for branding student servers or for fun.
- Bot usage spans:
- 13 courses
- 8 professors
- 5 academic quarters
- 1000+ students
| Dept | # | Prof | Quarters |
|---|---|---|---|
| ICS | 6B | Gassko | F23, S24, F24 |
| ICS | 6D | Gassko | W24, W25 |
| ICS | 45C | Klefstad | S24 |
| ICS | 46 | Shindler | F24 |
| ICS | 51 | Dutt | W24 |
| ICS | 53 | Wong-ma | W25 |
| STATS | 67 | Dogucu | F24 |
| INF | 43 | Ziv | W24 |
| INF | 133 | Jaganath | F24 |
| CS | 122A | Wong-ma | F24 |
| CS | 161 | Shindler | S25 |
| CS | 162 | Shindler | S25 |
| CS | 178 | Ahmed | S25 |
- Hosted on UCI ICS servers using
SLURMfor job scheduling. - Uses Flask for web pinging (
keep_alive.py). - Compatible with
uptimerobotor production cron systems.
discord.pyfor the bot framework.edapi,gradescope-tool,piazza-apifor API access.sqlite3for persistent state (check-ins, roles, interaction tracking).Flaskfor web server + uptime pings.asyncio,tasks.loopfor periodic updates.
Note: You must provide a
.envfile with proper credentials and token setup.
pip install -r requirements.txt
python main.py├── checkin.db # SQLite DB for persistent check-ins
├── checkin.py # Check-in system logic
├── ed.py # Ed Discussion utilities
├── piazza.py # Piazza integration
├── gradescope_helper.py # Gradescope assignment and reminder handler
├── color_palette.py # Color role system
├── eventhandlers.py # Central event/router logic
├── keep_alive.py # Flask uptime pings
├── main.py # Bot entry point
├── threadgrabber.py # Ed reply fetcher + embedder
├── owner.py, view.py, admin.py # Admin utilities
Contributions welcome! Submit an issue or open a PR.
MIT License © 2025 Yousef Khan
