История одного бота

Всем привет!


Последние 4 месяца я занят разработкой некоммерческого бота для Telegram. Сейчас в него ежедневно играет от одной до четырех сотен людей и для меня это большой успех. Если вам интересна история разработки, то прошу под кат (:


18b78e8819914b99a4cc3c3c06d2b729.png


Начало


Немного об обстоятельствах, которые толкнули меня на это. Играясь в @godnotbot (кстати, рекомендую) захотелось создать свою текстовую бродилку с подземельями и драконами.


Определившись, что это будет текстовая РПГ в Telegram, я задумался над тем, что будет внутри этой РПГ. А внутри было схожее с годноботом решение — случайные комнаты или ситуации. Нажми на кнопку, получишь новую комнату. Ко всему прочему, были боги, которые давали различные бонусы за молитвы и злились, когда от них уходили в другую веру. А также, магазин, где продаётся всякого рода барахло облегчающее ваш путь к неизбежной смерти.
С концептом разобрались, теперь нужно было делать. Для разработки я выбрал Python. Почему? А почему бы нет — ботов на нем написано уже много, да и язык приятный.


Завязка


В итоге на свет появился простенький бот с чуть более, чем десятком комнат. Самого бота теперь можно всегда найти здесь. Детище было показано всем друзьям и на этом его история чуть не закончилась. Игра была спасена от забвения внезапной мыслью:, а было бы неплохо показать кому-нибудь ещё.
У друга взял покататься VPS, настроил настройки, и запустил бота в бесконечный цикл. После чего на скорую руку сваял группу в ВК и написал пост на Пикабу. Сам того не зная, как мне объяснили позже, я выбрал время для поста настолько хорошо, что поймал всю свою аудиторию и в первый день познакомиться с ботом пришли 3,000 человек. Это было круто. Но тут же возникли проблемы.


Ситуация первая


Telegram не разрешит вам отправлять очень много сообщений. Но «много» у всех разное. Есть ограничения на сообщения в минуту в приватный чат, группу, на общее количество сообщений в день, в секунду во все чаты. Как это работает точно и точные числа неизвестны. Да, на сайте есть про это три абзаца, но на деле все сводится к тому, что есть пределы, вы можете их нарушать, но никто не знает, что тогда произойдет. Поэтому я поставил ограничение на отправку 30 сообщений в секунду и все ошибки ушли. Но в час-пик пользователям иногда приходилось ждать своих сообщений дольше десяти секунд.
Написал в саппорт, что не можем это терпеть. Спустя несколько дней там сказали, что нужно написать в саппорт по ботам. Саппорт по ботам, спустя еще несколько дней вынес вердикт: живи с этим, ничего не поделать. Порекомендовали ещё использовать inline кнопки, но этот вариант меня не устраивал — тогда будет теряться история сообщений. В итоге пришлось остаться на тридцати сообщениях в секунду и на этом остановиться.


Ситуация вторая


Проект был полностью открытым (и остается таким до сих пор! Вот исходный код) и это сыграло важную роль в развитии проекта — люди начали помогать: присылать свои идеи, править код, рисовать для бота. А главное, появилось несколько волонтеров, которые на постоянной основе помогают с ботом до сих пор. Это Андрей, Владислав и Алексей (так же хотелось бы отметить Эрика, он так же всегда помогал мне с ботом, хоть и немного не там, где это делали все остальные (:). А еще чуть позже для всей игры был нарисован свой стикерпак (Спасибо Алексею за этот труд).
Этим абзацем я хочу заметить, что если вы не жадина и не боитесь кражи кода, то можно просить помощи у вашего же комьюнити и, скорее всего, вам помогут. А если вы думаете, что ваш код кому-то нужен — не волнуйтесь, вы наберете большую аудиторию, чем люди, укравшие у вас код (хотя может не повезет и все пойдет наперекосяк, но это значит, что либо вы где-то повернули не туда, либо вор инвестирует в клона большие деньги. Но идею у вас все равно всегда смогут украсть).


Сюжет


Идей уйма, пользователи есть, процесс идет, что дальше? Дальше мы задумываемся о переводе своего продукта на самообеспечение. Не долго думая, я организовал добровольные пожертвования на Яндекс.Деньгах и, собственно, на этих деньгах бот живет до сих пор, и это греет душу.
В ноябре на связь вышла поддержка, напомнив об ограничениях по количеству сообщений и предложила частично их снять, в качестве исключения популярному боту. Теперь мы можем моментально отвечать в обход ограничений (если команда Telegram пожелает, она всегда может вернуть их нам). Мы сняли режим очереди в коде, но позже обнаружили, что ограничения никуда не делись. Поддержка ответила, что моментально можно отвечать только короткими сообщениями, то есть менее 500 символов. Грустно, но правила диктуем не мы.
А прямо сейчас мы вместе с комьюнити переводим бота на английский язык. Там свыше 1,800 фраз, некоторые из которых длинные, а некоторые нельзя просто так перевести. Например: «ЗА ВДВ!». Сейчас игра полностью переведена и находится у редактора на корректировании.


Развязка


Что я хотел? Тектовое РПГ в телеграме.
Что я получил? Бота, в которого каждую неделю играет тысяча человек, в которого убивают время в пробках, и 4 месяца разработки с веселыми людьми, а также интересные знакомства.
А пока готовимся к переводу, выпуску бота в веб и внедрению масштабной мультиплеерной системы (:


Что из этого выйдет? Кто знает…


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

Комментарии (9)

  • 17 декабря 2016 в 20:09

    0

    Не особо много работал с ботами в телеграме, поэтому такой вопрос: бот запоминает состояние? То есть я могу начать игру сейчас, сделать пару ходов и продолжить через месяц?
    • 17 декабря 2016 в 20:12

      +1

      Да, он сохраняет каждого пользователя в отдельный файл (чтобы не нагружать БД и не потерять в случае падения БД)

      • 17 декабря 2016 в 20:32

        +3

        интересное обоснование отказа от БД
        • 17 декабря 2016 в 22:18

          0

          БД есть, но об этом расскажу в следующем посте

      • 17 декабря 2016 в 20:57

        +2

        Что же там за БД такая, что файлы лучше чем БД?
        • 17 декабря 2016 в 22:18

          0

          MongoDB, но почему был такой отказ я расскажу в следующем посте (:

        • 17 декабря 2016 в 22:18

          0

          база к телеграму отношения не имеет — бот это самостоятельная программа, которая рассылает/принимает сообщения через апи, т.е. база, файлы и всё остальное — это на откуп разработчика.
      • 17 декабря 2016 в 22:30

        0

        sqlite: файл-бд
        ну или бд-файл
        не потеряется и можно на флешку project.db скопировать))))


        по боту. немного скучновато. Есть книги-игры, возьмите готовую, помню в детстве играл в «Подземелья Черного Замка». Там порядка 1000 игровых ситуаций в дереве.

  • 17 декабря 2016 в 22:20

    0

    По 30 сообщений/секунду: можно например плодить ботов, а все боты будут общаться с одним приложением на стороне сервера.

© Habrahabr.ru