eris-threads
v1.0.3
Published
Sharding manager for Eris based discord bots.
Downloads
7
Readme
About the package
Eris-threads is a sharding and cluster manager for discord bots based on eris. Eris-threads spreads shards evenly among your cores. Eris-threads is based on eris-sharder (an updated version). Supports CommonJS and ESM.
You can find examples and usage here.
Requirements
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
const { ShardingManager } = require('eris-threads');
const shardManager = new ShardingManager('/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
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 |
| ------------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| pathToMainFile
| 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 |
| 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 |