Prisma storage adapter for grammY
Storage adapter that can be used to store your session data with Prisma when using sessions.
Installation
npm install @grammyjs/storage-prisma --save
Usage
You can check the examples folder, or simply use followed code:
Implement the Session model in your Prisma schema:
model Session {
id Int @id @default(autoincrement())
key String @unique
value String
}
The id
field is not needed for this adapter to work.
The only restriction is that key
must be a String
index, either by
adding the @unique
keyword or the @id
keyword, and value
must be a String
.
Generate Prisma client using the terminal:
npx prisma generate
Migrate the schema changes to your database:
npx prisma db push
npx prisma migrate dev
Create bot and pass adapter as storage:
import { Bot, Context, session, SessionFlavor } from "grammy";
import { PrismaAdapter } from "@grammyjs/storage-prisma";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
interface SessionData {
counter: number;
}
type MyContext = Context & SessionFlavor<SessionData>;
async function bootstrap() {
const bot = new Bot<MyContext>("");
bot.use(
session({
initial: () => ({ counter: 0 }),
storage: new PrismaAdapter(prisma.session),
})
);
bot.command("stats", (ctx) =>
ctx.reply(`Already got ${ctx.session.counter} photos!`)
);
bot.on(":photo", (ctx) => ctx.session.counter++);
bot.start();
}