The epl monorepo, a Litecord compatible/inspired OSS implementation of Discord's backend for fun and profit.
Find a file
2024-10-06 20:32:51 -07:00
docs Basic activities and presence 2024-09-20 19:11:08 -07:00
epl-admin Basic activities and presence 2024-09-20 19:11:08 -07:00
epl-cdn Basic activities and presence 2024-09-20 19:11:08 -07:00
epl-common Basic activities and presence 2024-09-20 19:11:08 -07:00
epl-gateway Prevent sending our own recipient to ourselves to prevent dupes 2024-10-06 20:32:51 -07:00
epl-http Basic activities and presence 2024-09-20 19:11:08 -07:00
epl-worker Basic activities and presence 2024-09-20 19:11:08 -07:00
migration Basic activities and presence 2024-09-20 19:11:08 -07:00
.gitignore Basic activities and presence 2024-09-20 19:11:08 -07:00
.gitlab-ci.yml Build release artifacts 2023-06-15 09:32:49 -04:00
Cargo.lock Basic activities and presence 2024-09-20 19:11:08 -07:00
Cargo.toml Implement basic mediaproxy support 2024-04-01 03:52:57 -07:00
CODE_OF_CONDUCT.md chore: Initial commit 2022-05-03 02:31:41 -04:00
CONTRIBUTING.md chore: Initial commit 2022-05-03 02:31:41 -04:00
LICENSE chore: Initial commit 2022-05-03 02:31:41 -04:00
README.md Basic activities and presence 2024-09-20 19:11:08 -07:00

epl

A Litecord compatible/inspired OSS implementation of Discord's backend for fun and profit.

Screenshot of 3 discord clients connected to an Epl instance


Why?

Like I said, fun and profit!

In all seriousness, this project is intended as a way to understand the Discord API in a more familiar stack to (hopefully) help speed up implementing new features and fixing bugs for Litecord.

As such, the Epl project has the same goals as the original Litecord project.

Being Litecord compatible also means we will be using Litecord's LVSP protocol, mediaproxy, and admin API.

Status

Epl is at a point where basic account and messaging features work, this includes (but is not limited to):

  • Accounts
    • Creation and disabling
    • Email verification (currently stubbed)
    • Ability to turn off registration
    • Session management
  • User profile and account modification
    • Changing your username
    • Modifying the "about me" section
    • Modifying pronouns
    • Modifying the banner colour
    • Uploading a user avatar
  • Relationships
    • Adding other users as friends
    • Blocking users (with related permissions control)
    • Setting personal notes on other users
  • Messages
    • Creating and receiving messages
    • Deleting messages
    • Editing already sent messages
    • Pinning messages
  • DMs and Group DMs
    • Creating and closing DMs
    • Adding and kicking users in Group DMs
    • Editing the name and icon of Group DMs
  • Pomelo (toggled via an environment variable)
    • Also includes the migration step and badge with legacy username
  • Hypesquad houses
  • Badges and flags
  • S3 CDN proxy (with on-the-fly and cached resizing)
    • User avatars
    • Group icons
    • Badges
    • Attachments
  • Media proxy
    • Need to improve URL matching (don't match urls in codeblocks or surrounded by less/greater than signs)
  • April Fools
    • 2024 implemented minus the avatar deco (Enable the Packages experiment to access)
  • Tenor
    • Trending, search, and suggested terms fully supported
    • Giphy soon
  • Attachments
    • Note that video attachments are still a bit iffy, MP4s are properly processed but will be missing a thumbnail, WebMs will not be processed at all yet, this will be fixed soon
    • Clips (which are sent via attachments) are also not supported
    • All the other attachment types work fine in my testing
    • Unused file eviction will be added later
  • Mobile support
    • Turns out its incredibly easy to get the React Native Discord client to change its endpoints
      • It also uses window.GLOBAL_ENV when starting and only requests an uncompressed JSON gateway
  • Reactions
    • No custom emojis until guilds are implemented
  • Protobuf settings sync
    • Note: the protobuf is a somewhat outdated decompiled schema from an older version of the RN Discord app
  • Favourite gifs/emojis/stickers and related frecency
  • Presence
    • Basic activities work
    • Any rich presence does not work since Applications are not implemented

Some stuff in progress:

  • Mutual friends list
  • Admin api
    • Ignoring the guild paths for now

Some things I'm definitely adding Eventually™ are:

  • Guilds
  • Threads

Things that at some point I want to add:

  • Webhooks
  • Account connections
  • Stickers
  • Custom emojis
  • Applications
  • Basic store
  • Nitro
  • Avatar decorations
  • Profile effects
  • v1/v3/v6 api support (Help with getting structs for these older versions would be nice)
  • Voice support
  • Fragmented compression and ETF gateway support

I probably won't implement these without external help:

  • Console support
  • Spotify listen along or other spotify features
  • Federation
  • Interoperability with other messaging platforms
  • Clyde AI or other AI related features (message summaries, "chatting about" notifications)

Things completely out of scope:

  • E2EE (Would require too many client side modifications)
  • Interactions with the real Discord (Don't want to risk upsetting Discord)
  • Some sort of canonical "flagship" instance (Massive abuse risk that I can't take the burden for)
  • Commercial support (I don't have the resources to guarantee support)
  • Running at real Discord scale (That would make this largely inaccessible)
  • Large divergence from the Discord API (This is a Discord reimplementation after all)
  • User tracking (There's no reason for this)
  • Providing an out-of-box modified Discord client (Very legally questionable)

Installation / Running / Configuration

See docs/running.md

Contributing

Please read the contributing guide and the code of conduct.