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 🙏

© 2026 – Pkg Stats / Ryan Hefner

snocord

v1.2.12

Published

A Discord.js framework, used by SnoBot.

Readme

SnoCord

A Discord.js framework used by SnoBot.

Usage Docs:

Classes

Functions

Bot

Main class which everything starts from.

Kind: global class

new Bot()

Creates a new Bot instance.

bot.mention

Gets a regular expression that will match a message mention directed at this bot

Kind: instance property of Bot

bot.init(token, [callback]) ⇒ Promise.<void>

Intializes the Bot instance.

Kind: instance method of Bot

| Param | Type | Description | | --- | --- | --- | | token | string | The Discord token to log in with. | | [callback] | Object | An object defining functions to call before or after the bot connects to the discord API |

Example

new Bot(options).init({
    async preInit() {
        // Do stuff before connecting to the API
    },
    async postInit() {
        // Do stuff after connecting to the API
    }
});

bot.setConfig(config)

Set the config object for the bot.

Kind: instance method of Bot

| Param | Type | Description | | --- | --- | --- | | config | object | Config object. |

bot.tryResponses(message) ⇒ Array.<Response>

Loops through each response, attempting to find one that will trigger on the given message.

Kind: instance method of Bot
Returns: Array.<Response> - - Array of all matching responses.

| Param | Type | Description | | --- | --- | --- | | message | Message | The message |

bot.addResponse(trigger, funct, priority)

Adds Response object to the bot's set of responses.

Kind: instance method of Bot

| Param | Type | Default | Description | | --- | --- | --- | --- | | trigger | RegExp | function | | The RegExp pattern to match to trigger this response OR Custom checking function which takes the message object and returns boolean. | | funct | function | | Code to run when triggered. Will pass an object containing message (Discord#Message), respond function, messageOptions. | | priority | integer | 0 | (Optional) The priority value for the response. When two or more responses match, only those with the highest priority value will run. Defaults to 0. |

Example

bot.addResponse(() => {return true;}, (r) => {
     r.respond("I like responding.")
  }, -1);

 bot.addResponse(/^(hello bot)/i, (r) => r.respond("hi human"));

bot.addCommand(commandWord, aliases, info, funct, priority)

Kind: instance method of Bot

| Param | Type | Description | | --- | --- | --- | | commandWord | string | The word which will execute the command. | | aliases | Array.<string> | Array of all command aliases. | | info | object | Info metadata object for command. | | funct | function | Code to run when triggered. Will pass an object containing message (Discord#Message), respond function, messageOptions. | | priority | integer | (Optional) The priority value for the response. When two or more responses match, only those with the highest priority value will run. Defaults to 0. |

Example

bot.addCommand("help",(r)=>{r.respond(`I won't help you, ${r.message.author}`)})

bot.addCommandClass(commandClass)

Add a command using a command class, similar to what the command handler does.

Kind: instance method of Bot

| Param | Type | Description | | --- | --- | --- | | commandClass | Command | Class for this command |

Example

bot.addCommandClass(require('./commands/SomeCommand.js'));
bot.addCommandClass(SomeCommandClass);

bot.addCommandHandler(path)

Add a command handler to a specified directory.

Kind: instance method of Bot

| Param | Type | Description | | --- | --- | --- | | path | string | The local path to the directory containing only command class files. |

Example

bot.addCommandHandler('./commands/');

bot.addCustomResponse(response)

Add a custom response object to the list. (Not recommended for standard response types)

Kind: instance method of Bot

| Param | Type | Description | | --- | --- | --- | | response | Response | Object of Response or class which extends response. |

bot.getAllCommands() ⇒

Get all added commands.

Kind: instance method of Bot
Returns: array of Command instances.

bot.addHelpCommand()

Adds the core help command to the commands.

Kind: instance method of Bot

bot.addPrefixCommands()

Adds the core 'prefix' and 'resetprefix' commands to the commands.

Kind: instance method of Bot

bot.addCoreCommands()

Enables all of the built-in core commands.

Kind: instance method of Bot

bot.setCustomGuildPrefix(guildId, prefix) ⇒ Promise

Set custom prefix for a specific guild.

Kind: instance method of Bot
Returns: Promise - if the setting is successful.

| Param | Type | Description | | --- | --- | --- | | guildId | string | ID of Discord guild. | | prefix | string | custom prefix for this guild or false for no custom prefix. |

bot.getPrefix(guildId) ⇒ Promise

Get the custom prefix if the guild has one, else return default prefix.

Kind: instance method of Bot
Returns: Promise - promise resolving to the guild's prefix.

| Param | Type | Description | | --- | --- | --- | | guildId | string | ID of the guild in which the command is run. |

bot.setPresence(presence)

Set the bot's presence (status). Refereshed every hour.

Kind: instance method of Bot

| Param | Type | Description | | --- | --- | --- | | presence | Discord#PresenceData | Data for presence |

Bot.defaultConfigOptions

Default options to fall back on if the config object exists but doesn't have a given option.

Kind: static property of Bot

defaultConfigOptions.commandCooldown

Prefixing the message with a ping to the bot will work the same as using the bot's prefix.

Kind: static property of defaultConfigOptions

Command

Child class of Response - Provides additional functionality for commands. Default priority: 5

Kind: global class

command.run(message)

Run the response code to a message.

Kind: instance method of Command

| Param | Type | Description | | --- | --- | --- | | message | Discord#Message | Message object to respond to. |

command.isRunnableBy(member)

Check if the member has the required permissions to run this command.

Kind: instance method of Command

| Param | Type | Description | | --- | --- | --- | | member | Discord#GuildMember | Guild member to check. |

command.runCooldown(message, bot, cooldownStamp)

Send message if user on cooldown

Kind: instance method of Command

| Param | Type | Description | | --- | --- | --- | | message | Discord#message | message | | bot | Bot | bot | | cooldownStamp | number | stamp of time after cooldown is over |

Response

Generic class which handles responses to user messages.

Kind: global class

new Response(trigger, funct)

Creates Response object.

| Param | Type | Description | | --- | --- | --- | | trigger | RegExp | function | The RegExp pattern to match to trigger this response OR Custom checking function which takes the message object and returns boolean. | | funct | function | Code to run when triggered. Will pass response object. |

response._respond(message, response, messageOptions)

Kind: instance method of Response

| Param | Type | Description | | --- | --- | --- | | message | Discord#Message | Message object to respond to. | | response | string | String text to send in response. | | messageOptions | Discord#MessageOptions | Options provided when sending or editing a message. |

response.run(message)

Run the response code to a message.

Kind: instance method of Response

| Param | Type | Description | | --- | --- | --- | | message | Discord#Message | Message object to respond to. |

response.isTriggered(message)

Checks whether the trigger pattern matches the message.

Kind: instance method of Response

| Param | Type | Description | | --- | --- | --- | | message | Discord#Message | The message object to check. |

response.runCooldown(message, bot, cooldownStamp)

Do nothing if user on cooldown

Kind: instance method of Response

| Param | Type | Description | | --- | --- | --- | | message | Discord#message | message | | bot | Bot | bot | | cooldownStamp | number | stamp of time after cooldown is over |

parseCommand(bot, message, prefixOverride)

Parses a message object into command objects.

Kind: global function

| Param | Type | Description | | --- | --- | --- | | bot | Bot | The bot instance. | | message | Discord#Message | The message object to parse.message | | prefixOverride | string | Optional custom prefix. |

isCommandSyntax(bot, message, prefixOverride)

Checks if the message is syntaxically a command. Does not check if it is an existing command.

Kind: global function

| Param | Type | Description | | --- | --- | --- | | bot | Bot | The bot instance. | | message | Discord#Message | The message object to parse.message | | prefixOverride | string | Optional custom prefix. |

isCommand(bot, message, prefixOverride, commandName)

Checks if the message is a given command.

Kind: global function

| Param | Type | Description | | --- | --- | --- | | bot | Bot | The bot instance. | | message | Discord#Message | The message object to parse.message | | prefixOverride | string | Optional custom prefix. | | commandName | string | Name of command. |

capitaliseFirstLetter(string)

Capitalise first letter of text.

Kind: global function

| Param | Type | Description | | --- | --- | --- | | string | String | text |

sortJson(obj) ⇒

Sorts keys of object alphabetically

Kind: global function
Returns: sorted object

| Param | Type | Description | | --- | --- | --- | | obj | object | object to sort |

msToTime(duration) ⇒ string

convert ms to time string

Kind: global function
Returns: string - time

| Param | Type | Description | | --- | --- | --- | | duration | number | time in ms |

Examples

Sample command using the command handler:

class ExampleCommand
{
    constructor()
    {
        this.metadata = {
            commandWord: 'sample',
            aliases: [],
            description: 'Adds num1 and num2 and pings you in return that many times. Requires ban permission for no reason!',
            usage: 'num1 num2',
            permissions: ['BAN_MEMBERS'],
            ownerOnly: false
        };
    }

    run(sno)
    {
        //sno contains { bot, message, command, args, argsText, respond }
        let num1 = sno.args[0] * 1;
        let num2 = sno.args[1] * 1;
        let sum = Math.floor(num1 + num2);
        if(sum > 0){
            if (sum > 1000){sum = 1000;}
            let message = "";
            for(let i = 0; i < sum; i++){
                message += sno.message.author + " "; 
            }
            sno.respond(message);
        }else{
            sno.respond("I can't ping you less than 0 times!");
        }

    }
}
module.exports = ExampleCommand;

Sample config file:

{
    "name": "Some Bot",
    "owner": "Some User",
    "ownerID": "000000000000000000",
    "description": "A SnoCord bot",
    "token": "",
    "prefix": "!",
    "mentionAsPrefix": true,
    "commandCooldown": 2000
}