REPOSITORY / ScuroNeko/Laniakea

Wiki

KNOWLEDGE REPOSITORY
3
Drafts RU
ScuroNeko edited this page 2026-05-20 13:19:27 +03:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Drafts RU

English version: Drafts

Это краткая русскоязычная версия страницы про черновики. Полная и наиболее актуальная страница: Drafts.

Когда нужны черновики

Drafts полезны, когда ответ:

  • собирается постепенно;
  • должен быть отредактирован до финальной отправки;
  • выгодно держать как временное состояние, а не отправлять куски сразу.

Для обычного one-shot ответа чаще проще использовать Answer(...) или AnswerLong(...).

Главные части модели

Есть две основные сущности:

  • Draft
  • DraftProvider

Внутри handler'а самый удобный вход:

  • ctx.NewDraft()
  • ctx.NewDraftMarkdown()

Базовый пример

draft := ctx.NewDraft()
draft.Text("Line 1")
draft.Text("Line 2")
draft.Flush()

Такой подход удобен, когда текст строится несколькими шагами.

Lifecycle draft'а

Типичный поток такой:

  1. создать draft;
  2. добавлять текст и настройки;
  3. при необходимости делать Push(...) как промежуточную отправку;
  4. завершить через Flush();
  5. при необходимости удалить через Delete().

Push(...) и Flush()

Push(...) полезен, когда нужно отправить промежуточное состояние, но draft остается рабочим.

Flush():

  • отправляет финальное состояние;
  • очищает pending state у draft.

FlushAll()

У provider есть FlushAll().

Это best-effort операция:

  • провайдер пытается отправить все ожидающие черновики;
  • ошибки одного draft не отменяют попытки для остальных.

IDs и стратегии генерации

У draft provider есть стратегия ID generation.

Обычно по умолчанию используется random-подход.

Если нужны более предсказуемые или внешне совместимые ID, можно поставить свой provider.

Markdown-вариант

NewDraftMarkdown() включает MarkdownV2.

Как и в остальных Markdown-вспомогательных методах, пользовательский ввод надо экранировать отдельно.

Что читать дальше