0.2.6 • Published 2 years ago
telegraf-callback-data v0.2.6
Introduction
Lightweight and simple library that helps manage callback data when using inline buttons in messages
Installation
$ npm install telegraf-callback-data
or using yarn
:
$ yarn add telegraf-callback-data
Example
import { Telegraf, Markup, Context } from 'telegraf';
import { CallbackData } from 'telegraf-callback-data';
const bot = new Telegraf(process.env.BOT_TOKEN);
const greetingData = new CallbackData<{ type: string; }>(
'greeting', // namespace identifier
['type'] // data properties
);
bot.start((ctx: Context) =>
ctx.reply('How to greet?', {
...Markup.inlineKeyboard([
Markup.button.callback(
'oldschool',
greetingData.create({
type: 'oldschool',
})
), // callback data is equal to `greeting:oldschool`
Markup.button.callback(
'modern',
greetingData.create({
type: 'modern',
})
), // callback data is equal to `greeting:modern`
]),
})
);
bot.action(
greetingData.filter({
type: 'modern',
}),
(ctx) => ctx.answerCbQuery('Yo')
);
bot.action(
greetingData.filter({
type: 'oldschool',
}),
(ctx) => ctx.answerCbQuery('Hello')
);
bot.launch();
There's some more complex examples: counter and menu.
API Usage Example
exampleCallbackData = new CallbackData(
'namespace-prefix',
['id', 'action' /* many as you want */]
/* separator = ':' */
);
const callbackData = exampleCallbackData.create({
id: '1337',
action: 'show',
});
console.log(callbackData); // namespace-prefix:1337:show
const parsedCallbackData = exampleCallbackData.parse(callbackData);
console.log(parsedCallbackData); // { id: "1337", action: "show" }
const regexpCallbackDataFilter = exampleCallbackData.filter({
action: 'show',
});
console.log(regexpCallbackDataFilter); // /namespace-prefix:\w+:show/
Credits
Thanks to @JrooTJunior, author of AIOGram! This library highly inspired by alternative feature in aiogram framework.