This package can split messages which reach the Telegram limit into multiple parts (messages). This package also split entities so you don't need to do it manually.
import { splitMessage } from "@gramio/split";
const bot = new Bot(process.env.BOT_TOKEN!).command(
"start",
async (context) => {
const messages = await splitMessage(
format`${bold("a".repeat(4096 * 2))}`,
(str) => context.send(str)
// be worry. if u wants provide an context.send without function wrapper
// you should use context.send.bind(context) it is required because otherwise it will lose context data
);
console.log(messages); // messages is array of second argument results
}
);
await bot.start();
You can also use it in other frameworks.
import { splitMessage } from "@gramio/split";
const messages = await splitMessage(
format`${bold("a".repeat(4096 * 2))}`,
({ text, entities }) => {
return someOtherFramework.sendMessage(text, { entities });
}
);
You can also configure maximum text length. By default it's 4096
symbols, but sendPhoto
caption has limit 1024
symbols.
const messages = await splitMessage(
format`${bold("a".repeat(4096))}`,
({ text, entities }) => {
return context.sendPhoto(PHOTO, {
caption: text,
caption_entities: entities,
});
},
1024
);
[!NOTE] This package mostly in the WIP stage.
- [ ] More tests
- [ ] Plugin with auto-split
- [ ] Split mode by entities
- [ ] Auto split action strategies (like
sendPhoto
caption next splits tosendMessage
text)