Как устроены истории

Это теоретическая статья

Она рассказывает, как всё устроено, что умеет бот и зачем он это умеет. О том, как всё это сделать, рассказано в
следующих статьях.

Тихозвериный бот рассказывает истории. Истории бывают разные — это может быть сказка, игра, приключение, экскурсия,
головоломка или вовсе что-то такое, что и названия-то не имеет.

У каждой истории есть название, которое ей даёт автор. Двух историй с одинаковыми названиями быть не может.

Рассказывание истории — это интерактивный процесс. Бот отправляет человеку тексты, картинки, видео, загадки и прочее, а
человек делает выбор кнопками, сам пишет в ответ текст и так далее.

Всё, что бот отправляет залпом между действиями человека, называется страницей.

страницы

История может состоять из любого количества страниц, даже из одной — правда, в такой истории не будет места интерактиву,
бот просто что-то расскажет и всё.

Стартовая страница всегда одна, а вот финальных страниц может быть несколько.

Как страницы связаны друг с другом

У каждой страницы есть идентификатор. Автор истории может придумать страницам любые идентификаторы за исключением самой
первой страницы, с которой бот начинает рассказ, — она должна иметь идентификатор start.

Страницы связаны друг с другом направлениями, которые задаёт автор. Направление — это просто идентификатор страницы,
которую бот должен прочитать следующей.

Рассмотрим пример — историю «Утро Ивана Николаевича».

Вот страница start, которой автор назначил направление coffee:

img.png

Бот читает человеку эту страницу и ждёт его ответа. Человек отвечает:

img_1.png

Тогда бот находит страницу coffee и читает её:

img_2.png

И так до самого конца истории:

img_3.png

Истории можно (и нужно!) делать нелинейными

В примере выше у каждой страницы есть только одно направление — прочитав страницу start, бот может перейти только на
страницу coffee.

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

img_4.png

Автор сам определяет, какие кнопки надо показать пользователю и на какую страницу истории его приведёт каждая из них.
Например, на скриншоте выше бот показал читателю страницу town. Автор задал для неё два направления: если читатель
нажмёт Идти к площади, он попадёт на страницу square, а если Идти к Носовому Маяку — на страницу lighthouse.

Какие ошибки подстерегают автора нелинейных историй

Проектируя запутанную (то есть интересную!) историю, легко случайно запрограммировать ситуацию, из которой бот и
читатель не могут выбраться.

Важно

Получив новую историю, бот проверяет, нет ли в ней подобных ошибок. Если они есть, он не принимает историю и просит
автора её исправить.

Безвыходный цикл

Нельзя создавать в истории кольцо, из которого нет выхода.

img_5.png

Если герой этой истории, стоя на лужайке, решит влезть в болото, он не сможет из него выбраться и добраться до финальной
страницы. Бот и читатель будут вечно ходить по одним и тем же сообщениям и одним и тем же кнопкам.

Чтобы цикл перестал быть безвыходным, нужно сделать из него выход:

img_6.png

Теперь герой сможет, побарахтавшись, выбраться на тропинку, а не на кочку.

Направления на несуществующие страницы

Когда автор пишет страницу, он может сразу задать все направления — в том числе на страницы, которые ещё не написаны.
Если история большая, очень легко забыть сделать страницу, на которую ссылается одна из уже сделанных страниц.

img_7.png

Страницы, до которых нельзя добраться

В истории не должно быть страниц, заведомо недоступных читателю.

img_8.png

Если сделать, как показано на схеме, герой не сможет попасть на болото. Для героя это хорошо, но болото будет зря
занимать место в базе данных бота.

Разумеется, это не значит, что читатель должен непременно посетить все страницы за одно прочтение.

Как устроена страница

Страница состоит из реплик — то есть отправляемых ботом отдельных сообщений. Например, страницы на самом первом
скриншоте в этой статье состоят одна из четырех, а вторая из трёх реплик.

Виды реплик

Бот умеет отправлять читателю много видов реплик — поддерживается не всё, что есть в Телеграме, но многое.

Страница может состоять из любых реплик в любых комбинациях.

Текст

Самый простой вариант реплики — бот просто отправляет текст. Поддерживаются переносы строк и оформление болдом,
курсивом, зачёркнутым и подчёркнутым.

Случайный текст

Автор придумывает для такой реплики несколько вариантов текста, и бот отправляет случайный вариант.

Картинка

Бот отправляет читателю картинку — обычным способом, со сжатием. Подпись задавать можно, в том числе случайную.
Форматирование в подписи поддерживается.

Оригинал картинки

Это полезно, если вы художник и нарисовали что-то классное и детальное. Помните, что отправленные таким способом
картинки до скачивания выглядят так:
img_9.png

Викторина

Стандартная телеграммовская с правильным ответом. Пока работает не без ограничений: для каждого читателя бот заводит
новую копию викторины и не собирает ответы.

Стикер

Бот может отправить читателю стикер. Так можно, например, награждать эксклюзивным стикерпаком тех, кто нашёл сокровище.

Настройки реплики

Реплику любого типа можно настроить.

Пауза

Компьютеры и сеть работают очень быстро, поэтому бот может отправлять сообщения молниеносно — фактически всю страницу
разом. Это может помешать читателю погрузиться в историю и даже привести к тому, что он пропустит часть реплик.

Поэтому автор может задать паузу для каждой реплики — например, более длинную для длинных и более короткую для коротких.

Не переусердствуйте: если сделать паузы слишком длинными, читатель решит, что бот завис.

Вознаграждение артефактом

Автор может в любой реплике на любой странице вознаградить читателя артефактом. Например, выдать ему артефакт
«монета», артефакт «золотой ключ» или что угодно ещё.

Например, бот отправляет читателю картинку и вместе с ней — артефакт.

Важно

Сама по себе выдача артефакта читателю не видна. Если вы хотите, чтобы он о ней узнал, напишите об этом в тексте
реплики. Например: «Вы получили монету».

Артефакт сохраняется у пользователя, пока он читает историю. Если он получит артефакт, дочитает и начнёт заново,
артефакта у него уже не будет.

Условия показа реплики

Бот может показывать или не показывать конкретную реплику в зависимости от того, есть ли у человека конкретный артефакт.

Например, вы можете написать две реплики:

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

И показывать одну или другую в зависимости от того, есть ли у читателя артефакт «сокровище из сундука».

Совет

Воспринимайте артефакты как метки, которые позволяют вам показывать или не показывать реплики в зависимости от того,
каким путём шёл читатель.

Следующая