0.0.4 • Published 4 years ago

@botol/tg-bot v0.0.4

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

Botol Telegram Bot

Simple Examples

import { BotolTg } from '@botol/tg-bot';

let bot = new BotolTg('<token>');
bot.on('text', (ctx, next) => {
    ctx.reply('Hello ' + ctx.text);
});
bot.use((ctx, next) => {
    ctx.reply('Enter name');
});
bot.startPolling();

Middlewares

NameDescription
SessionAdding session to Context
ThreadsMake bot multithreaded

Events

Pass as first param in on

NameDescription
'message'Call when update has param message
'callback_query'Call when update has param callback_query
'text'Call when update has param message.text
'callback_data'Call when update has param callback_query.data

Context

PropertyDescription
telegramTgClient instance with methods
updateReceived update
message(Optional) Message from update
callback_query(Optional) CallbackQuery from update
chat(Optional) Chat from update
text(Optional) Extracted from message
callbackData(Optional) Extracted from callback_query
chat(Optional) Extracted from one of several params
from(Optional) Extracted from one of several params
MethodArgumentsTypeDescription
replyThrow error if the chat property don't exists
textstringText to send
markupMarkup or ExtraMarkup(Optional) Extra markup like keyboard or disable preview
answerCbQueryThrow error if the callback_query property don't exists
textstring(Optional) Text to send
showAlertboolean(Optional) Show alert

Markup

  • keyboard
        Markup.keyboard(['Option 1', 'Option 2'])
  • inline keyboard
        Markup.inlineKeyboard([
            { text: 'Option 1', callback_data: 'Option1' },
            { text: 'Option 2', callback_data: 'Option2' }
        ])

Examples

Create Middleware

type ContextSystem = {
    getPoints: () => number;
    addPoint: (sum: number) => void;
};
function BotSystem(): Handler<Partial<ContextSystem> & ContextTG> {
    let points = 0;
    return (ctx, next) => {
        ctx.addPoint = (sum) => {
            points += sum;
        };
        ctx.getPoints = () => points;

        return next();
    };
}

Use Middleware

let bot = new BotolTg('<token>');
let botSystem = bot.middleware(BotSystem());

botSystem.on('callback_data', (ctx, next) => {
    switch (ctx.callbackData) {
        case 'show':
            ctx.answerCbQuery(ctx.getPoints().toString());
            return;
        case 'add':
            ctx.addPoint(1);
            ctx.answerCbQuery();
            return;
        case 'sub':
            ctx.addPoint(-1);
            ctx.answerCbQuery();
            return;
    }
    ctx.answerCbQuery();
    return next();
});
botSystem.use((ctx) => {
    ctx.reply(
        `current points: ${ctx.getPoints()}`,
        Markup.inlineKeyboard([
            [
                { text: 'add', callback_data: 'add' },
                { text: 'sub', callback_data: 'sub' },
            ],
            [{ text: 'show', callback_data: 'show' }],
        ]),
    );
});
bot.startPolling();