Skip to content

Плагин Split

npmnpm downloadsJSRJSR Score

Этот пакет может разделять сообщения, превышающие лимиты Telegram, на несколько частей. Также автоматически разделяет entities, избавляя от необходимости делать это вручную.

Использование

ts
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)
            // Внимание: при использовании context.send без обёртки
            // используйте context.send.bind(context) для сохранения контекста
        );

        console.log(messages); // messages - массив результатов отправки
    }
);

await bot.start();

Можно использовать с другими фреймворками:

ts
import { splitMessage } from "@gramio/split";

const messages = await splitMessage(
    format`${bold("a".repeat(4096 * 2))}`,
    ({ text, entities }) => {
        return someOtherFramework.sendMessage(text, { entities });
    }
);

Настройка

Максимальная длина текста настраивается. По умолчанию 4096 символов, но для подписей к фото (sendPhoto) - 1024:

ts
const messages = await splitMessage(
    format`${bold("a".repeat(4096))}`,
    ({ text, entities }) => {
        return context.sendPhoto(PHOTO, {
            caption: text,
            caption_entities: entities,
        });
    },
    1024
);

NOTE

Пакет находится в активной разработке.

Планы:

  • [ ] Дополнительные тесты
  • [ ] Плагин с авто-разделением
  • [ ] Режим разделения по entities
  • [ ] Стратегии для разных типов контента (например, фото → текст)