Go to file
Luna 1d7ea31a11 static/index: fix litecord gitlab url 2018-12-05 20:49:27 -03:00
images all: add guild icon support 2018-11-13 21:12:40 -03:00
litecord static/index: fix litecord gitlab url 2018-12-05 20:49:27 -03:00
manage new invite handling and unconfirmed account support 2018-12-03 21:06:47 +01:00
static static/index: fix litecord gitlab url 2018-12-05 20:49:27 -03:00
tests tests: add test_embeds 2018-12-04 22:54:39 -03:00
.gitignore Ignore macOS .DS_Store files 2018-12-03 22:45:09 -08:00
.gitlab-ci.yml .gitlab-ci.yml: add gifsicle to main apk add command 2018-11-21 20:08:19 -03:00
LICENSE Initial Commit 👌 😂 2018-06-15 21:59:52 -03:00
Pipfile embed.sanitizer: add fetch_metadata function 2018-12-05 02:42:00 -03:00
Pipfile.lock embed.sanitizer: add fetch_metadata function 2018-12-05 02:42:00 -03:00
README.md README: 80-char columns splitting 2018-12-05 20:06:34 -03:00
__init__.py tests: add basic test 2018-11-12 04:10:31 -03:00
config.ci.py config.ci.py: add MAIN_URL and NAME 2018-11-21 23:02:33 -03:00
config.example.py config.example.py: add MEDIA_PROXY config field 2018-12-05 01:41:23 -03:00
discord_endpoints.txt small fixes 2018-12-03 01:46:37 +01:00
manage.py add manage.py 2018-11-06 17:42:27 -03:00
nginx.conf README: add "Checking if it is working" section 2018-11-15 18:08:12 -03:00
requirements.txt Pipfile: add pyflakes 2018-11-12 18:11:04 -03:00
run.py embed.sanitizer: fix double-slash on path 2018-12-05 03:08:54 -03:00
schema.sql new invite handling and unconfirmed account support 2018-12-03 21:06:47 +01:00
setup.py Pipfile: add pyflakes 2018-11-12 18:11:04 -03:00
tox.ini tox.ini: use py3.7 due to pipfile requiring it 2018-12-02 19:49:12 -03:00

README.md

Litecord logo

Litecord is an open source, clean-room design reimplementation of Discord's HTTP API and Gateway in Python 3.

This project is a rewrite of litecord-reference.

Project Goals

  • Being able to unit test bots in an autonomous fashion.
  • Doing research and exploration on the Discord API.

Non-goals

  • Being used as a "self-hostable Discord alternative".

Caveats

  • Unit testing is incomplete.
  • Currently, there are no plans to support voice chat.
  • You must figure out how to connect to a Litecord instance. Litecord will not distribute official client code from Discord nor provide ways to modify the official client.

Liability

We (Litecord and contributors) are not liable for usage of this software, valid or invalid. If you intend to use this software as a "self-hostable Discord alternative", you are soely responsible for any legal action delivered by Discord if you are using their assets, intellectual property, etc.

All referenced material for implementation is based off of official Discord API documentation or third party libraries (such as Eris).

Installation

Requirements:

  • Python 3.7+
  • PostgreSQL (tested using 9.6+)
  • gifsicle for GIF emoji and avatar handling
  • pipenv

Download the code

$ git clone https://gitlab.com/litecord/litecord.git && cd litecord

Setting up the database

It's recommended to create a separate user for the litecord database.

# Create the PostgreSQL database.
$ createdb litecord

# Apply the base schema to the database.
$ psql -f schema.sql litecord

Then, you should run database migrations:

$ pipenv run ./manage.py migrate

Configuring

Copy the config.example.py file and edit it to configure your instance:

$ cp config.example.py config.py
$ $EDITOR config.py

Install packages

$ pipenv install --dev

Running

Hypercorn is used to run Litecord. By default, it will bind to 0.0.0.0:5000. This will expose your Litecord instance to the world. You can use the -b option to change it (e.g. -b 0.0.0.0:45000).

$ pipenv run hypercorn run:app

You can use --access-log - to output access logs to stdout.

It is recommended to run litecord behind NGINX. You can use the nginx.conf file at the root of the repository as a template.

Does it work?

You can check if your instance is running by performing an HTTP GET request on the /api/v6/gateway endpoint. For basic websocket testing, a tool such as ws can be used.

Updating

Update the code and run any new database migrations:

$ git pull
$ pipenv run ./manage.py migrate

Running tests

Running tests involves creating dummy users with known passwords. Because of this, you should never setup a testing environment in production.

# Setup any testing users:
$ pipenv run ./manage.py setup_tests

# Install tox:
$ pip install tox

# Run lints and tests:
$ tox