plugins

19 first-party plugins. each is a typed composer extension — installing one enriches the context type, and its dependencies are checked at compile time.

menu.ts
import { Bot } from "@yaebal/core";
import { session } from "@yaebal/session";
import { Keyboard } from "@yaebal/keyboard";

const bot = new Bot(token).use(session());

bot.command("menu", (ctx) =>
  ctx.reply("pick one", {
    reply_markup: new Keyboard().text("a", "a").text("b", "b").inline(),
  }),
);

the catalog

packagewhat it does
@yaebal/againauto-retry on 429 / flood-wait / transient 5xx
@yaebal/sessionper-chat session with pluggable storage
@yaebal/keyboardfluent inline & reply keyboard builders
@yaebal/callback-datatyped callback_data pack / unpack
@yaebal/mordadialogs engine + jsx/hooks (react-for-telegram)
@yaebal/i18nper-chat locale, ctx.t / ctx.changeLanguage
@yaebal/scenesstep-by-step wizards over multiple messages
@yaebal/promptask a question, handle the next message
@yaebal/routerfile-based routing from a routes/ directory
@yaebal/throttlerate-limit outgoing api calls
@yaebal/filesresolve and download telegram files
@yaebal/ratelimiterdrop updates from users who spam
@yaebal/broadcastsend a message to many chats
@yaebal/weboperator panel — view chats, reply from the browser
@yaebal/media-groupcollect album updates into one handler
@yaebal/splitbreak long messages into telegram-sized chunks
@yaebal/commandsone registry for handlers + the / command menu
@yaebal/paginationpaginated lists with inline prev/next
@yaebal/media-cachereuse a file_id instead of re-uploading
naming is deliberately english now — again (retry), session, keyboard, callback-data — with morda kept as the dialogs package's name.