npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

eris-threads

v1.0.3

Published

Sharding manager for Eris based discord bots.

Downloads

6

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 |