Discord Worker Framework
A fast, light-weight framework for consuming incoming messages from Discord in a multi-service fashion.
This package consumes from a message broker such as ActiveMQ or RabbitMQ, parses and validates incoming data and emits it to be processed by the bot-specific code.
This package also incorporates a RestClient
, which can be used for sending
information to the Discord API directly or through a rate-limiting proxy.
Ratelimits aren't currently managed by the RestClient
.
NOTE: THIS PACKAGE MAY BREAK AT ANY TIME
This package follows semver, and the major version is 0
. This means that
breaking changes can be introduced in any update. Do not use this in production
unless you know what you are doing.
Features
- Fast
- Low-level
- Customizable
- Connects to any message broker (adapters are included for MQTT and AMQP)
- Allows for caching (included adapter available for Redis)
- Allows for collecting statistics via EventEmitter3
TODO
- Move documentation to some webviewer
- Move usage to
examples/
directory and write more examples - Remove the note above when the package major version hits
1
- Write tests
Installing
npm install discord-worker-framework --no-optional
If you would like to use the included Redis, MQTT or AMQP adapters, make sure
that redis
, mqtt
and/or amqp.node
are installed:
npm install redis mqtt amqp.node
Usage
'use strict'; const DiscordWorkerFramework = ;const raven = ; // optional, for RavenWorker only // Create a MessageBrokerConsumer, check documentation for specificsconst consumer = ; // Create a new Workerconst worker = messageBrokerConsumer: consumer; // Create a new RestClientconst RestClient = endpoint: 'http://localhost:8000' // authorization: 'value of Authorization header for the endpoint'; // ...or a RavenWorker (RavenWorker allows for reporting errors/warnings to// Sentry)/*const worker = new DiscordWorkerFramework.RavenWorker({ messageBrokerConsumer: consumer, ravenClient: raven});*/ // Listen for new messages and respond to pingsworker; // Listen for deleted messages and log them... for reasonsworker; // Start consumingworker;
Incoming Event Structure
All received events from the MessageBrokerConsumer must follow a standard JSON structure or they will cause the Worker to fail to process incoming events:
"type": "" // Discord event type, e.g. MESSAGE_CREATE, GUILD_CREATE "shard_id": 0 // shard ID which the event was received from "data": {} // event data, should match the structure from the Discord gateway
Events
The Worker currently emits the following events:
discord:*
: Discord events, see example aboveevent:recv
: emitted when any event is received, with the dataevent:tested
: emitted when any event has been verified to match the event structure schema (with result)event:dispatch
: emitted when any event is broadcasted to listener (discord:*
), with the data
Contributing
- Discuss major changes you wish to propose by creating an issue first
- Fork, clone, checkout
develop
, make changes (semistandard codestyle), push - PR to the
develop
branch
Testing
Tests are handled with mocha
. You can run tests by using the npm test
command, assuming you've cloned this repository directly and installed
devDependencies.
License
A copy of the MIT license can be found in LICENSE
.