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
on
Pass as first param in 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();