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
Name |
Description |
Session |
Adding session to Context |
Threads |
Make bot multithreaded |
Events
Pass as first param in on
Name |
Description |
'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
Property |
Description |
telegram |
TgClient instance with methods |
update |
Received 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 |
Method |
Arguments |
Type |
Description |
reply |
Throw error if the chat property don't exists |
|
|
text |
string |
Text to send |
|
markup |
Markup or ExtraMarkup |
(Optional) Extra markup like keyboard or disable preview |
|
answerCbQuery |
Throw error if the callback_query property don't exists |
|
|
text |
string |
(Optional) Text to send |
|
showAlert |
boolean |
(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();