1.1.1 • Published 2 years ago
callback-data v1.1.1
Introduction
Lightweight and simple library that helps manage callback data when using inline keyboards.
Installation
Node
$ npm install callback-dataDeno
import { createCallbackData } from "https://deno.land/x/callback_data/mod.ts";Example
import { Bot, InlineKeyboard } from "grammy";
import { createCallbackData } from "callback-data";
const bot = new Bot(process.env.BOT_TOKEN);
const greetingData = createCallbackData("greeting", {
  type: String,
});
const greetingKeyboard = new InlineKeyboard()
  .text(
    "oldschool",
    greetingData.pack({
      type: "oldschool",
    }), // callback data is equal to "greeting:oldschool"
  )
  .text(
    "modern",
    greetingData.pack({
      type: "modern",
    }), // callback data is equal to "greeting:modern"
  );
bot.command("start", (ctx) =>
  ctx.reply("How to greet?", {
    reply_markup: greetingKeyboard,
  }));
bot.callbackQuery(
  greetingData.filter({
    type: "oldschool",
  }),
  (ctx) => ctx.answerCallbackQuery("Hello"),
);
bot.callbackQuery(
  greetingData.filter({
    type: "modern",
  }),
  (ctx) => ctx.answerCallbackQuery("Yo"),
);
bot.start();There's more complex example counter-bot.
Usage
Create callback data builder
const callbackData = createCallbackData(
  // unique prefix for callback data
  "data",
  // callback data fields
  {
    id: Number,
    name: String,
    isAdmin: Boolean,
    // only Number, String, Boolean data types are supported
  },
);Pack callback data
const packedData = callbackData.pack({
  id: 1337,
  name: "John",
  isAdmin: true,
});
console.log(packedData); // data:1337:John:1Unpack callback data
const unpackedData = callbackData.unpack(packedData);
console.log(unpackedData);
// {
//   id: 1337,
//   name: "John",
//   isAdmin: true,
// }Filter by callback data
const regex = callbackData.filter({
  id: 1337,
});
console.log(regex); // /^data:1337:(.+)?:(.+)?$/