Media group plugin
This plugin collects mediaGroup from messages (1 attachment = 1 message) using a delay if mediaGroupId is in the MessageContext, pass only first message further down the middleware chain with the mediaGroup key, which contains an array of messages of this mediaGroup (it also contains the first message).
ts
import { Bot } from "gramio";
import { mediaGroup } from "@gramio/media-group";
const bot = new Bot(process.env.BOT_TOKEN as string)
.extend(mediaGroup())
.on("message", async (context) => {
if (!context.mediaGroup) return;
return context.send(
`Caption from the first message - ${context.caption}. MediaGroup contains ${context.mediaGroup.length} attachments`
);
})
.onStart(({ info }) => console.log(`✨ Bot ${info.username} was started!`));
bot.start();Installation
bash
npm install @gramio/media-groupbash
yarn add @gramio/media-groupbash
pnpm add @gramio/media-groupbash
bun install @gramio/media-groupSetup
You can change the duration of the delay in milliseconds by simply passing it like this:
typescript
const bot = new Bot(process.env.BOT_TOKEN as string)
.extend(mediaGroup(1000)) // wait 1 second for message with mediaGroupId (refreshed after new message with it)
.on("message", async (context) => {
if (!context.mediaGroup) return;
return context.send(
`Caption from the first message - ${context.caption}. MediaGroup contains ${context.mediaGroup.length} attachments`
);
})
.onStart(({ info }) => console.log(`✨ Bot ${info.username} was started!`));
bot.start();By default it 150 ms.