Hard fork of Zeppelin discord bot
Find a file
Dragory ba2873a29a Run a loose pre-check before preprocessStaticConfig
This loose pre-check checks the config schema by treating every object
as partial. This means that if a property exists, it's guaranteed to be
the correct type (e.g. object). However, there's no guarantee that all
or any properties exist.

This allows preprocessStaticConfig implementations to be much less
defensive and thus reduce boilerplate.
2019-11-28 02:34:41 +02:00
backend Run a loose pre-check before preprocessStaticConfig 2019-11-28 02:34:41 +02:00
dashboard Change target in tsconfig from esnext to es2018 to support optional chaining/nullish coalescing on Node.js 12 2019-11-27 21:43:54 +02:00
shared Change target in tsconfig from esnext to es2018 to support optional chaining/nullish coalescing on Node.js 12 2019-11-27 21:43:54 +02:00
.editorconfig Initial commit in new repository 2018-07-01 03:35:51 +03:00
.gitignore Ignore .cache everywhere, not just repository root 2019-11-08 00:03:24 +02:00
.nvmrc Use Node.js 12 2019-10-11 02:45:11 +03:00
.prettierrc prettier: enable dangling commas 2019-02-09 13:23:35 +02:00
package-lock.json Update prettier to 1.19.1 for optional chaining/nullish coalescing support 2019-11-27 22:02:37 +02:00
package.json Update prettier to 1.19.1 for optional chaining/nullish coalescing support 2019-11-27 22:02:37 +02:00
process-api.json Reorganize project. Add folder for shared code between backend/dashboard. Switch from jest to ava for tests. 2019-11-02 22:11:26 +02:00
process-bot.json Reorganize project. Add folder for shared code between backend/dashboard. Switch from jest to ava for tests. 2019-11-02 22:11:26 +02:00
README.md Update dashboard instructions in README 2019-11-08 00:22:17 +02:00
tslint.json Reorganize project. Add folder for shared code between backend/dashboard. Switch from jest to ava for tests. 2019-11-02 22:11:26 +02:00
update.sh Load NVM in update script 2019-05-07 22:27:50 +03:00

Development

These instructions are intended for bot development only.

👉 No support is offered for self-hosting the bot! 👈

Running the bot

  1. cd backend
  2. npm ci
  3. Make a copy of bot.env.example called bot.env, fill in the values
  4. Run the desired start script:
    • npm run start-bot-dev to run the bot with ts-node
    • npm run build followed by npm run start-bot-prod to run the bot compiled
    • npm run watch-bot to run the bot with ts-node and restart on changes
  5. When testing, make sure you have your test server in the allowed_guilds table or the guild's config won't be loaded at all

Running the API server

  1. cd backend
  2. npm ci
  3. Make a copy of api.env.example called api.env, fill in the values
  4. Run the desired start script:
    • npm run start-api-dev to run the API server with ts-node
    • npm run build followed by npm run start-api-prod to run the API server compiled
    • npm run watch-api to run the API server with ts-node and restart on changes

Running the dashboard

  1. cd dashboard
  2. npm ci
  3. Make a copy of .env.example called .env, fill in the values
  4. Run the desired start script:
    • npm run build compiles the dashboard's static files to dist/ which can then be served with any web server
    • npm run watch runs webpack's dev server that automatically reloads on changes

Notes

  • Since we now use shared paths in tsconfig.json, the compiled files in backend/dist/ have longer paths, e.g. backend/dist/backend/src/index.js instead of backend/dist/index.js. This is because the compiled shared files are placed in backend/dist/shared.
  • The backend/register-tsconfig-prod-paths.js module takes care of registering shared paths from tsconfig.json for ts-node, ava, and compiled .js files
  • To run the tests for the files in the shared/ directory, you also need to run npm ci there

Config format example

Configuration is stored in the database in the configs table

# role id: level
levels:
  "12345678": 100 # Example admin
  "98765432": 50 # Example mod

plugins:
  mod_plugin:
    config:
      kick_message: 'You have been kicked'
      can_kick: false
    overrides:
      - level: '>=50'
        config:
          can_kick: true
      - level: '>=100'
        config:
          kick_message: 'You have been kicked by an admin'

  other_plugin:
    config:
      categories:
        mycategory:
          opt: "something"
        othercategory:
          enabled: false
          opt: "hello"
    overrides:
      - level: '>=50'
        config:
          categories:
            mycategory:
              enabled: false
      - channel: '1234'
        config:
          categories:
            othercategory:
              enabled: true