https://github.com/nota30/eris-threads
A sharding and cluster manager for the eris discord package. Based on eris-sharder (just an updated version)
https://github.com/nota30/eris-threads
Last synced: 11 months ago
JSON representation
A sharding and cluster manager for the eris discord package. Based on eris-sharder (just an updated version)
- Host: GitHub
- URL: https://github.com/nota30/eris-threads
- Owner: Nota30
- License: mit
- Created: 2022-05-13T16:44:14.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-06-13T09:24:29.000Z (about 4 years ago)
- Last Synced: 2025-07-16T22:23:07.988Z (11 months ago)
- Language: JavaScript
- Homepage:
- Size: 152 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# About the package
Eris-threads is a sharding and cluster manager for discord bots based on [eris](https://abal.moe/Eris/). Eris-threads spreads shards evenly among your cores. Eris-threads is based on [eris-sharder](https://github.com/discordware/eris-sharder) (an updated version). **Supports CommonJS and ESM**.
*You can find examples and usage [here](https://github.com/Nota30/eris-threads/tree/main/tests).*
# Requirements
- [Node.js version 16+](https://nodejs.org/en/)
- [Eris version 0.17.0+](https://abal.moe/Eris/)
# Installation
npm:
```
npm install eris-threads eris
```
yarn:
```
yarn add eris-threads eris
```
pnpm:
```
pnpm add eris-threads eris
```
# Example
## Directory Tree
In this example the directory tree will look something like this:
```
Project/
├── node-modules/
│ ├── eris-threads
|
├── main.js
│
├── index.js
```
## Example of index.js
```javascript
const { ShardingManager } = require('eris-threads');
const shardManager = new ShardingManager({
mainFile: '/main.js',
token: 'botToken',
stats: true,
debug: true,
guildsPerShard: 1500,
webhooks: {
shard: {
id: 'webhookID',
token: 'webhookToken',
embed: {} // Custom embed if you wish
},
cluster: {
id: 'webhookID',
token: 'webhookToken',
embed: {}
},
},
clientOptions: {
messageLimit: 150,
defaultImageFormat: 'png',
},
});
shardManager.spawn();
```
## Example of main.js
```javascript
const { Base } = require('eris-threads');
class Bot extends Base {
constructor(bot) {
super(bot);
}
}
module.exports = Bot;
```
> You can start your bot using
```
node index.js
```
## Sharding Manager Options
| Name | Type | Description |
| ------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options.mainFile` | `string` | File path that exports the **Base** class. The class must containt a method called "launch". In the constructor the only paramater you should put is for the bot. |
| `options.token` | `string` | A discord bot token |
| `options.stats` | `boolean` | Enables stats output if `true`. |
| `options.webhooks` | `object` | Webhook options to send to a channel. Example: `{shard: {id: "webhookID", token: "webhookToken"}, cluster:{id: "webhookID", token: "webhookToken"}}` |
| `options.clientOptions` | `object` | Eris client options. You can find them [here](https://abal.moe/Eris/docs/0.16.1/Client) |
| `options.clusters` | `number` | The number of clusters you want to spawn. Defaults to the amount of cores on your system |
| `options.clusterTimeout` | `number` | Number of seconds between starting up clusters. Values lower than 5 may lead to an Invalid Session on first shard. |
| `options.shards` | `number` | The number of shards you want to spwan. Defaults gateway reccommendation, taking into account `options.guildsPerShard` |
| `options.firstShardID` | `number` | ID of the first shard to start on this instance. Defaults to `0` |
| `options.lastShardID` | `number` | ID of the last shard to start on this instance. Defaults to `options.shards - 1` |
| `options.debug` | `boolean` | Boolean to enable debug logging. |
| `options.noConsoleOveride` | `boolean` | Boolean to disable or enable console overide. Default is `false` |
| `options.statsInterval` | `number` | Interval to release the stats event in milliseconds. Defaults to every minute |
| `options.guildsPerShard` | `number` | The number of guilds per shard. Defaults to 1300. Overriden if you only have 1 shard. |
# Base
When you extend the Base class (main.js) you get access to `this.bot`, `this.clusterID`, and `this.ipc`
> `this.bot` is the eris client
> `this.clusterID` will return the cluster id.
## IPC Methods
| Name | Example | Description |
| ------------ | ----------------------------------------- | ------------------------------------------------------------------------------------- |
| register | `this.ipc.register(event, callback);` | Using this you can register to listen for events and a callback that will handle them |
| unregister | `this.ipc.unregister(event);` | Use this to unregister for an event |
| broadcast | `this.ipc.broadcast(name, message);` | Using this you can send a custom message to every cluster |
| sendTo | `this.ipc.sendTo(cluster, name, message)` | Using this you can send a message to a specific cluster |
| fetchUser | `await this.ipc.fetchUser(id)` | Using this you can search for a user by id on all clusters |
| fetchGuild | `await this.ipc.fetchGuild(id)` | Using this you can search for a guild by id on all clusters |
| fetchChannel | `await this.ipc.fetchChannel(id)` | Using this you can search for a channel by id on all clusters |
