Retrieves the latest threads from Ed Discussion on Discord
  • TypeScript 96.5%
  • Dockerfile 3.5%
Find a file
dependabot[bot] 30ab6c04f2
Bump axios from 1.13.5 to 1.15.2 (#6)
Bumps [axios](https://github.com/axios/axios) from 1.13.5 to 1.15.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.5...v1.15.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.15.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-05 21:46:08 +12:00
.github/workflows redo this again 2026-03-14 19:44:55 +13:00
src fix: fixed ephmeral flags warning 2026-03-14 16:20:54 +13:00
.gitignore fully implemented TOML for bot loading 2026-03-14 15:53:34 +13:00
bun.lock bump versions for dependency update 2026-03-14 17:06:32 +13:00
config.toml.example add example TOML config 2026-02-21 20:24:31 +13:00
docker-compose.dev.yml remove ports from being exposed 2026-03-14 17:27:19 +13:00
docker-compose.prod.yml remove ports from being exposed 2026-03-14 17:27:19 +13:00
docker-compose.yml remove ports from being exposed 2026-03-14 17:27:19 +13:00
Dockerfile Remove bun (#7) 2026-05-05 21:43:27 +12:00
env.d.ts Initial Copilot Typescript conversion 2025-12-20 22:17:50 +13:00
LICENSE.txt added LICENSE.txt, updated package.json 2024-06-25 19:43:35 +12:00
package-lock.json Bump axios from 1.13.5 to 1.15.2 (#6) 2026-05-05 21:46:08 +12:00
package.json Bump axios from 1.13.5 to 1.15.2 (#6) 2026-05-05 21:46:08 +12:00
README.md Remove bun (#7) 2026-05-05 21:43:27 +12:00
tsconfig.json Initial Copilot Typescript conversion 2025-12-20 22:17:50 +13:00

Duologue

Duologue sends posts and questions posted on Ed Discussion as a Discord message when they are posted. It can also retrieve them when requested by the user.

Installation

Create a new Discord application and bot and obtain its bot token and client ID.

Copy config.toml.example to config.toml, then fill in the required fields.

To run in development (build locally):

docker compose -f docker-compose.dev.yml up --build

To run in production (pull from GitHub Container Registry):

docker compose -f docker-compose.prod.yml up -d

Usage

/ping

Returns the ping of the bot.

/bind [course_id] [thread_type]

Note

This command requires the Administrator permission.

Binds the course with the given course ID to the channel which the command is run in.

[course_id]: The course ID of the course to be bound. For example, in the URL "https://edstem.org/au/courses/12345/discussion/", the course ID is 12345.

[thread_type]: The type of thread that the channel should be subscribed to: announcements (threads created by instructors) or normal (all other threads). Channels can be subscribed to both (you will have to run the command twice but change this parameter)

/unbind [course_id]

Note

This command requires the Administrator permission.

Unbinds the course with the given course ID from the channel which the command is run in. Note that for channels subscribed to both thread types, this will unsubscribe from both types.

[course_id]: The course ID of the course to be bound. For example, in the URL "https://edstem.org/au/courses/12345/discussion/", the course ID is 12345.

Motivation

Whilst Ed Discussion is somewhat promoted within the university (dependent on lecturer), students do not check it often, prefering to use Discord instead for discussion related to their courses.

Additionally, Ed Discussion notifications are very slow to send out via email and not everyone wants to enable push notifications.

This bot intends to serve both of these use cases.