@mediv0/rate-limit
TypeScript icon, indicating that this package has built-in type declarations

0.2.9 • Public • Published

Telegram Rate Limiter

dead simple rate limiter for telegram bots with typescript support.

can be used to limit the number of messages sent by a user, using a token bucket algorithm. works fine with both telegraf and Telegram-Bot-API packages.

Supported Drivers:

  • Memory ( development only )
  • Redis ( Production )

adding other drivers is not supported yet. ( will be soon )

Install

yarn add @mediv0/rate-limit

or

npm install @mediv0/rate-limit

usage example

import { Limiter } from "@mediv0/rate-limit";

// init
const limiter = new Limiter("memory", {
    interval: 10,
    max: 5,
    driverOptions: {},
});

// Telegram-Bot-API example
bot.on("message", async (msg) => {
    try {
        const userId = msg.chat.id;
        await limiter.limit(userId);
        bot.sendMessage(chatId, "Hello World!");
    } catch (e) {
        // catch rate limit errors
    }
});

Options

Limiter<K extends keyof driver>

class Limiter (driver: K, options: ILimiterOptions<driver[K]>)

driver -> memory | redis

ILimiterOptions ->

{
    max: number;   // maximum number of messages allowed in the interval
    interval: number; // interval in minutes e.g -> 2
    driverOptions: T; // driver specific options
}

for example, in snipet below, a user can send maximum 100 messages in interval of 5 minutes. if the user sends more than 100 messages, the limiter will throw an error.

const limiter = new Limiter("memory", {
    interval: 5,
    max: 100,
    driverOptions: {},
});

Redis Driver

driver used in this packages is from npm redis

you can pass options used in redis package to rate limiter.

list of redis options

limiter = new Limiter("redis", {
    interval: 10,
    max: 5,
    driverOptions: {
        url: "redis://localhost:6379",
        name: "test",
        password: "test",
        legacyMode: false,
        // other options
    },
});

/@mediv0/rate-limit/

    Package Sidebar

    Install

    npm i @mediv0/rate-limit

    Weekly Downloads

    7

    Version

    0.2.9

    License

    MIT

    Unpacked Size

    44.7 kB

    Total Files

    22

    Last publish

    Collaborators

    • mediv0