Как создать игру в телеграмме

от admin

Игровая платформа

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

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

Чтобы посмотреть на способности игровой платформы, попробуйте поиграть через ботов @gamebot и @gamee.

Создание игры

Чтобы создать игру, вам необходимо отправить команду /newgame боту @BotFather. В процессе создание вы должны будете ввести название игры, описание, фото и необязательную анимацию геймплея. Игры с анимированной картинкой выглядят более привлекательно в списке (примеры: Lumberjack и Corsairs).

Запуск игры

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

Добавление кнопок

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

Первая кнопка в сообщении всегда должна выполнять функцию открытия игры.

Таблица рекордов

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

Таблица рекордов в игре Lumberjack Новый рекорд в чате

Отправка результатов в чат

В интерфейсе игры в правом верхнем углу всегда будет находиться стандартная системная кнопка «Поделиться»:

Кнопка поделиться в iOS Кнопка поделиться в Android

Также вы можете создавать дополнительные кнопки в HTML-странице. Нажатие на такую кнопку приведёт к открытию желаемого чата и отправкой в него сообщения с количеством набранных очков в игре.

Интерактивная таблица Таблица результатов в сообщении

Чтобы добавить такую кнопку на страницу, добавьте этот скрипт перед закрытием тэга <body> :

Эта библиотека будет работать только в играх, открытых в приложении Telegram. Пожалуйста, не применяйте её за пределами игр.

По нажатию на кнопку должен вызываться метод TelegramGameProxy.shareScore() .

Пример вызова

Запрещается вызывать этот метод без участия пользователя. Он должен вызываться только при прямом намерении пользователя нажать на кнопку.

Использование параметров URL

Если в вашем URL используется хэш, то имейте в виду, что Telegram может к нему что-нибудь добавить. Названия добавленных параметров будет начинаться с tg (вот пример кода, который их добавляет: games.js#L54). Чтобы достать свои собственные параметры из адреса, вы можете воспользоваться объектом TelegramGameProxy.initParams .

Позаботьтесь об UX

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

Сайт про Telegram на русском (неофициальный).

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

Как создавать игры в Telegram

Игры в телеграм

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

Ребята не стали изобретать велосипед в виде отдельного игрового движка или чего то в этом роде. Игры в Telegram можно создавать, используя знакомую всем связку HTML5 + JavaScript. На платформе уже доступно небольшое количество игр, включая полюбившуюся мне игрушку под названием Lumberjack, где задачей является срубить как можно больше веток у дерева.

Функционал доступен на iPhone >= 4 и Android >= 4.4, а также Telegram версии от 3.13. Для того, чтобы выбрать существующую игру, добавьте бота @gamee.

Как создать Telegram игру

Для того, чтобы создать игру в Telegram вам необходимо обратиться всё к тому же BotFather боту, который мы использовали при создании Telegram бота. Выполните команду: /newgame

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

  • Запрещается размещать рекламу и внешние ссылки на сторонние ресурсы
  • Запрещается взимать оплату с пользователей игры
  • Запрещается использовать данные, полученные в ходе игры, для последующих спам-рассылок среди пользователей Telegram
  • Запрещается делиться данными, полученными во время игры, со сторонними приложениями и сервисами
  • Запрещается устанавливать «куки» на страницах игры

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

HTML5, JavaScript и CSS

Я уже достаточно давно убеждён в том, что в самом ближайшем будущем единственным приложением, которым мы будем чаще всего пользоваться, станет браузер. Это и сейчас правда: на замену настольному Office пришел Office 365, Google Apps, почта, игры, общение и органайзеры всё это уже доступно в браузере. Если каких-то 5-10 лет назад веб-страницы были жалким подобием настольных приложений, то сейчас мы уже пользуемся навороченными интерактивными веб-приложениями. Всё это стало доступно благодаря стремительному развитию браузерных движков, с каждым новым релизом появляются новые фишки в API. Интернет стирает цифровые границы: получайте доступ к данным из любой точки мира, всё что вам будет нужно — браузер 🙂

Мои шаги, успехи и ошибки в мире геймдева на примере игрового бота в Telegram

Telegram – очень нестандартная платформа для создания онлайн игр. Тем более, когда речь заходит о ММОРПГ. Мне стало интересно, возможно ли вообще создать качественный продукт на этой платформе, а если да – будет ли вообще востребованность в нем. Так, в июне 2017-го года я начал разработку Wasteland Wars.

Виральность

В первые дни разработки было решено собрать фокус-группу из своих знакомых для теста игры. Как-никак, имея дело с ММО, тестировать в одиночку было проблематично. Так я запустил закрытый бета-тест игры, сделав доступ к боту по одноразовым ключам. Сгенерировав таких 10 штук, я разослал их своим знакомым в ТГ. Реферальная система уже была добавлена к этому моменту, хоть и не работала по факту в виду закрытости тестирования. Ее суть в том, что за каждого зарегистрированного в игре человека по твоей реф. Ссылке, игрок получает +1 к максимальному запасу выносливости и немного крышек (местная валюта) на карманные расходы. Это привело к тому, что спустя 2 недели с начала ЗБТ, в нем принимало участие уже 50 человек, а мои личные сообщения были забиты просьбами людей дать им еще 1-2-10 ключей для своих друзей. Вместо того, чтобы постоянно генерировать новые ключи, я принял решение сосредоточиться на исправлении найденных в тестировании багов и запустить открытый бета-тест, отменив регистрацию по ключам. За первый день ОБТ в игре зарегистрировалось 120 человек. Спустя месяц суточный онлайн составлял 200-250 человек в день, а общее количество зарегистрированных игроков приближалось к 800. И все это без каких-либо движений с моей стороны по пиару игры, игра становилась известной исключительно благодаря сарафанному радио и реферальной системе.

Особенности проекта, понравившиеся игрокам

Игроки во время тестирования отмечали крайне необычный для такого формата жанр игры, полноценные ПВП сражения и систему прокачки игрока без классических очков навыков и системы level-up’ов. Но, что стало для меня неожиданностью – больше всего люди хвалили игровые тексты, особенно отмечая качество юмора, отсылки к массовой культуре и атмосферные ситуации, контрастирующие с черным юмором своей драматичностью.

Технические нюансы

Первые сложности, связанные с платформой Bot API, возникли в первые же дни разработки. У Telegram есть 2 основные системы для связи их ботов с вашим сервером: так называемые Long Polling и Webhooks. Первая подразумевает, что ваш сервер будет с определенным интервалом постоянно опрашивать Telegram на предмет наличия новых запросов, и при наличии таких — обрабатывать, возвращая ответ Bot API. Второй же чуть более сложен в реализации – он заключается в том, что ваш сервер как-бы говорит Telegram «если у тебя появятся какие-то запросы – кидай их вот на этот адрес». Соответственно, для реализации бота на технологии Webhooks необходим постоянный IP адрес и обязательно SSL сертификат, хотя бы самоподписанный. Начав разработку на основе Long Polling, я в начале не заметил никаких проблем, связанных с этим методом. Однако спустя сутки беспрерывной работы, бот неожиданно упал. Telegram начал возвращать ошибку при получении запроса. Как оказалось, эта проблема преследует абсолютно все боты на основе Long Polling – телеграм закрывает обработку запросов от бота спустя какое-то время, из-за чего приходится его постоянно перезагружать. Сперва я решил попробовать автоматизировать процесс «реанимации» бота, написав cron-скриптик для проверки пульса процесса и перезапуска, если пациент не реагировал на тыканье палкой. Однако этот процесс постоянных перезапусков доставлял неудобства игрокам, т.к. занимал какое-то время, а так же сбрасывал текущие таймеры в игре. В итоге проект был перенесен на Webhooks, и данная проблема сразу же исчезла.

Читать:
Last time telegram desktop was not closed properly что делать

Дальше в плане сложностей от самого Bot API все было спокойно. До одного момента.

Проект набирал масштабы, наращивал аудиторию и постоянно развивался. В один момент бот неожиданно начал «подтупливать» при получении запроса. А точнее, появилась задержка в ответе бота игроку. Первым делом я полез на сервер, думая что он перестал справляться с растущим количеством запросов. Но нет, нагрузка на сервер не превышала 30% в пиковые моменты, не наблюдалось проблем со свободной памятью, не было никаких ошибок и предупреждений в логе системы. Но тормоза продолжали расти. Как оказалось, бот стал упираться в лимит Bot API по количеству одновременных запросов к нему. В первое время, я успешно уменьшал и оптимизировал работу бота, чтобы снизить это количество. Однако по мере распространеия игры в массы, стало очевидно: очень скоро бот упрется в этот потолок и никакие оптимизации с моей стороны не помогут. Тогда было решено написать в поддержку Telegram с просьбой увеличить лимиты конкретно для моего бота. И к моему огромному удивлению, они ответили уже на следующий день, а лимит был увеличен, хоть новый порог они и не назвали. Кроме того, они сообщили мне, что бот упирается в лимит по конкретному типу запросов – Callback на т.н. Inline-кнопки. Это клавиатура в Telegram, которая отображается под конкретным сообщением. На текстовые запросы (в том числе и с обычных кнопок) лимит значительно выше, а так же нет ограничения в 15 секунд на ответ от сервера. Проблема была в том, что 70% интерфейса игры было построено на Inline-кнопках. Мне пришлось практически полностью его переработать, чтобы избавиться от этого зла, такого удобного и красивого.

Следующая проблема, с которой столкнулся проект, крылась уже в моей среде разработки и коде. А конкретно, в Python 3 и в том, как он работает с потоками. Каждый новый поток в Python 3 создается вместе с переменными окружения, занимая большое количество памяти. В игре полно таймеров (2 минуты на переход между локациями, ожидание битвы и т.д.), и запуская их в отдельных потоках, создавалась утечка памяти. По мере роста онлайна игры, утечка достигла каких-то безумных масштабов, сжирая всю возможную оперативную память и подкачивая оставшуюся память SSD сервера. Разумеется, проблема была решена созданием очередей таймеров, обрабатывающихся в одном потоке для каждого типа.

Визуальная часть в текстовой игре

Одной из ключевых особенностей Wasteland Wars относительно остальных похожих игр в Telegram стало введение визуальной части. В игру был добавлен интерактивный аватар персонажа, а так же визуальное отображение каждого элемента экипировки в игре. Как в полноразмерных РПГ на игровых платформах, игрок может одевать своего персонажа в разную броню, давать ему разное оружие, а затем видеть все изменения визуально. Чуть позже я развил эту идею, теперь при встрече другого игрока в игре выводится так же его аватар – так появляется возможность не зная прокачки противника, оценить его опасность по внешнему виду. Помимо экипировки, на аватаре так же отображаются «Маски» — их можно купить за донат, они не дают никакого преимущества игроку, но изменяют его вид в аватаре. Кроме того, в игре появилась полноценная интерактивная карта. По мере нахождения какой-либо локации, она добавляется игроку на карту.

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

Планы по развитию проекта

В данный момент игра переписывается на Go – этот язык, как оказалось, гораздо лучше подходит для разработки такого проекта. Наличие собственного веб-сервера в Go и его скорость работы позволила мне начать создание собственного API для проекта, чтобы отвязать его от одной единственной платформы в Telegram. API позволит получать и обрабатывать запросы с любого клиента, а вся логика будет обрабатываться только на сервере.

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

Как создать бота с игрой в телеграмм c помощью Python.

Hello World!
Недавно я писал бота для телеграмм и один мой знакомый рассказал, что в телеграмме есть еще и игры. Мне стало интересно и я решил прогуглить. Идея игр в телеграмм мне понравилась и я подумал, что было бы хорошо интегрировать данную опцию в моего телеграмм бота, так как это добавит интерактивности. Телеграмм ботов я разрабатываю на Python, используя при этом библиотеку pyTelegramBotAPI. Вообщем, я начал искать и , к сожалению, не нашел нужной для меня информации, собранной в одном месте и на русском языке. Но как-то у меня получилось собрать все в кучу и немного разобраться с играми в телеграмм и теперь я хочу поделиться этим с вами. Сразу скажу, что в данной статье не будет каких-то детальных технических особенностей и тому подобных вещей. Начинаем.

Так, в статье я предполагаю, что у вас уже установлена библиотека pyTelegramBotAPI, а также вы более или менее понимаете, как создавать телеграмм ботов. В противном случае со всем этим вы можете ознакомиться в Интернете — информации достаточно.
Итак, импортируем библиотеку pyTelegramBotAPI, создаем бота с помощью BotFather и создаем объект бота используя токен, который выдал нам BotFather.

Хорошо, давайте теперь создадим игру. Делается это также с помощью BotFather. Пишем /newgame и следуем дальнейшим инструкциям.

Окей, дальше, когда вы согласитесь(или не согласитесь ��) с условиями пользователя, BotFather напишет, что ваш бот работает не в inline_mode, а бот с игрой должен работать именно в этом режиме. Но это не проблема. Просто пропишите команду /setinline и BotFather выдаст вам список ваших ботов и предложит выбрать какого из ботов вы хотите перевести в inline режим. Смело выбирайте какого-то из своих ботов.

Отлично, теперь можно создавать игру. Пишем опять /newgame и следуем инструкциям.

Окей, мы создали игру, теперь вернемся к коду.

Добавим message_handler , который обрабатывает команду /start (я не буду объяснять, как работают messege_handlers — вы сами можете найти это в интернете. Вот статья ,где описано, как с ними работать.) Также воспользуемся методом send_game() для того, чтобы бот кидал пользователю саму игру.(детальную информацию о методах вы можете найти в справочнике по ссылке)

game_short_name — название вашей игры.

Теперь, когда мы запустим бота и пропишем команду /start , он вернет нам игру. Эта игра пока еще ничего не делает, но вскоре мы это исправим.

Когда вы нажмете на кнопку “Play simplegame”, ничего не произойдет. (кстати, вы можете добавлять/изменять кнопки под игрой. Как это делать? Поищите в интернете.��)

Ладно, давайте теперь сделаем так, чтобы наша игра работала при нажатии кнопки. Для этого добавим обработчик кол-беков:

И в нем используем метод answer_callback_query()

Ну вот и все �� . Теперь, когда вы нажмете на кнопку “Play simplegame”, у вас в телеграмме откроется игра aragio.

Как это работает? В атрибуте url мы просто указываем ссылку на веб-страницу, которую хотим открыть. В моем случае это игра agario, но в действительности этим все не ограничивается. Вы можете указать абсолютно любую веб-страницу, которую хотите открыть. Это даже не обязательно должна быть игра.

Надеюсь, я чем-то вам помог.
PS. Для того, чтобы создать свою собственную игру, вам понадобятся знания HTML/CSS/JS. Вот статья, где это описано.

Похожие статьи