This package is a work in progress. So it easily can be changed.
import { Bot, InlineKeyboard } from "gramio";
import { initViewsBuilder } from "@gramio/views";
interface Data {
user: {
id: number;
name: string;
age: number;
};
t: (test: "a" | "b", age: number) => string;
}
const defineView = initViewsBuilder<Data>();
const userView = defineView().render(function (test: "a" | "b") {
return this.response
.text(this.t(test, this.user.age))
.keyboard(new InlineKeyboard().text("test", test));
});
const bot = new Bot(process.env.BOT_TOKEN!)
.derive(["message", "callback_query"], async (context) => {
const user = {
id: context.from.id,
name: context.from.firstName,
age: 18,
};
const t = (test: "a" | "b", age: number) => test + age;
return {
render: defineView.buildRender(context, {
user,
t,
}),
};
})
.on("message", async (context) => {
return context.render(userView, "a");
})
.on("callback_query", async (context) => {
return context.render(userView, context.data === "a" ? "b" : "a");
});
bot.start();