@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
    },
});

Package Sidebar

Install

npm i @mediv0/rate-limit

Weekly Downloads

14

Version

0.2.9

License

MIT

Unpacked Size

44.7 kB

Total Files

22

Last publish

Collaborators

  • mediv0