Как создать игру в telegram?
Создал бота. Включил inline режим. Зарегистрировал игру (/newgame) . Привязал её к боту. Даже инлайн сообщения с игрой могу кидать. Не могу понять куда запихнуть url ? Нужно ли создавать объект типа Game и как его передавать в inlinequery .
Ни на ютубе, ни в гугле — нигде нет даже простого гайда по созданию игры, привязке к боту и расшариванию её.
Отслеживать
5,960 3 3 золотых знака 22 22 серебряных знака 44 44 бронзовых знака
задан 24 фев 2018 в 8:57
349 3 3 серебряных знака 15 15 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Телеграму не нужно знать ни HTML , ни CSS , ни JS коды вашей игры. Нужно только 3 основные составляющие.
- Создать бота и включить у него inline режим.
- Зарегистрировать игру в том же BotFather и привязываем к боту. Инструкция не нужна. Всё пошагово вам объяснит бот.
- Пишем игру ( HTML , CSS , JS ) и заливаем на хостинг. Даже gitpage подойдёт.
Остается объединить это всё:
// ссылка на игру в сети интернет let url = 'http://siteWithGame.com' // название игры (то, что указывали в BotFather) const gameName = "yourGameName" // Matches /start bot.onText(/\/start/, function onPhotoText(msg) < bot.sendGame(msg.chat.id, gameName); >); // Handle callback queries bot.on('callback_query', function onCallbackQuery(callbackQuery) < bot.answerCallbackQuery(callbackQuery.id, < url >); >);
Т.е. бот может в ответ на какой-то запрос отправить игру bot.sendGame(. ) .
Грубо говоря, это будет сообщение с картинкой и описанием игры и под этим сообщением callBack кнопка, ведущая на сайт с игрой.
При нажатии на кнопку открывается страница с игрой в приложении Telegram.
Вот здесь есть реализация и комментарии (node-telegram-bot-api).
Создаем собственный текстовый квест в Telegram
Телеграм боты — это крутой способ взаимодействия с пользователем прямо в привычном ему мессенджере. Это гораздо быстрее и чаще удобнее, чем писать полноценное мобильное приложение. В этой статье мы постраемся создать собственного Telegram бота, который будет предлагать пользователю разыграть полноценный текстовый квест.
Нюансы сюжета вам придется продумать самостоятельно, ну а вся техническая часть — под катом!
Для начала давайте познакомимся с Telegram ботами, по ссылке представлено множество примеров таких программ, от прогноза погоды до общения с рандомным собеседником: https://uip.me/2016/04/50-popular-telegram-bots/.
Технически, телеграм бот — это программа, которая запущена на вашем компьютере и общается с серверами телеграма через интернет. Можно представить, что при регистрации бота, телеграм выделяет нам почтовый ящик, через который мы можем получать сообщения от пользователей и отправлять их им.
Чтобы создать собственного бота, сперва его надо зарегистрировать. Для этого в телеграме нужно добавить бота @BotFather и следовать инструкциям. После того, как мы введем название бота, @BotFather сообщит нам токен — пароль к нашему почтовому ящику.
После получения токена нам потребуется установить библиотеку pyTelegramBotApi, как и обычно, это делается через pip:
pip install pytelegrambotapi
Пробуем создать бота
Давайте сделаем нашего первого бота — бота-попугая. На все сообщения он будет отвечать повторением.
import telebot token = "ВСТАВЬТЕ СЮДА ТОКЕН" # Обходим блокировку с помощью прокси telebot.apihelper.proxy = # подключаемся к телеграму bot = telebot.TeleBot(token=token) # content_types=['text'] - сработает, если нам прислали текстовое сообщение @bot.message_handler(content_types=['text']) def echo(message): # message - входящее сообщение # message.text - это его текст # message.chat.id - это номер его автора text = message.text user = message.chat.id #отправляем картинку с попугаем bot.send_photo(user, "https://i.ytimg.com/vi/R-RbmqzRC9c/maxresdefault.jpg") #отправляем сообщение тому же пользователю с тем же текстом bot.send_message(user, text) # поллинг - вечный цикл с обновлением входящих сообщений bot.polling(none_stop=True)
Помимо текстовых сообщений, в телеграме есть команды, они начинаются со слэша, например, /start или /help . Их тоже можно обрабатывать.
Давайте добавим пояснение к нашему боту, которое объяснит пользователю, что он делает.
import telebot token = "ВСТАВЬ СЮДА ТОКЕН" # подключаемся к телеграму bot = telebot.TeleBot(token=token) # реагируем на команды /start и /help @bot.message_handler(commands=['start', 'help']) def help(message): user = message.chat.id bot.send_message(user, "Это бот попугай! Просто пришли и я повторю.") # content_types=['text'] - сработает, если нам прислали текстовое сообщение @bot.message_handler(content_types=['text']) def echo(message): # message - входящее сообщение # message.text - это его текст # message.chat.id - это номер его автора text = message.text user = message.chat.id #отправляем картинку с попугаем bot.send_photo(user, "https://i.ytimg.com/vi/R-RbmqzRC9c/maxresdefault.jpg") #отправляем сообщение тому же пользователю с тем же текстом bot.send_message(user, text) # поллинг - вечный цикл с обновлением входящих сообщений bot.polling(none_stop=True)
Взаимодействуем с несколькими пользователями одновременно
Предположим мы хотим сделать бота, которы будет запоминать какую-то фразу, а затем по просьбе пользователя напоминать ее ему. Чтобы решить эту задачу, нам понадобится где-то хранить последнее сообщение пользователя.
Если мы будем использовать переменную, то сможем сохранить сообщение только одного пользователя. Например, Вася попросил запомнить слово kitten . Мы положим эту строку в переменную note . А затем Петя, попросить запомнить слово puppy , и мы снова положим это переменную note . Когда Вася попросит нам напомнить его последнее сообщение, мы напишем ему puppy вместо kitten . Совершенно не годится!
> Удобнее всего хранить все данные, которые привязаны к конкретному пользователю в словаре. Ключем в этом словаре будет id пользователя, а значением — произвольные данные.
Предположим, что наш словарь называется notes — заметки. Теперь, когда Вася (id88000) пришлет слово kitten мы положим его в notes[88000] , а слово puppy от Пети (id5300) — в notes[5300] . Посколько теперь мы используем разные переменные для хранения слова, сообщения от разных пользователей не будут путаться.
Реализация:
import telebot token = "ВАШ ТОКЕН" # Обходим блокировку с помощью прокси telebot.apihelper.proxy = bot = telebot.TeleBot(token=token) notes = <> @bot.message_handler(commands=['remind']) def remind(message): user_id = message.chat.id if user_id not in notes: bot.send_message(user_id, "Вы мне еще не писали.") else: bot.send_message(user_id, notes[user_id]) @bot.message_handler(content_types=['text']) def remember(message): user_id = message.chat.id notes[user_id] = message.text bot.send_message(user_id, "Я запомнил") bot.polling(none_stop=True)
Добавляем кнопки
Следующий пример демонстрирует, как добавить несколько кнопок к сообщению и реагировать на их нажатия.
import telebot from telebot import types token = "ВАШ ТОКЕН" # Обходим блокировку с помощью прокси telebot.apihelper.proxy = bot = telebot.TeleBot(token=token) @bot.message_handler(commands=["start"]) def repeat_all_messages(message): # создаем клавиатуру keyboard = types.InlineKeyboardMarkup() # добавляем на нее две кнопки button1 = types.InlineKeyboardButton(text="Кнопка 1", callback_data="button1") button2 = types.InlineKeyboardButton(text="Кнопка 2", callback_data="button2") keyboard.add(button1) keyboard.add(button2) # отправляем сообщение пользователю bot.send_message(message.chat.id, "Нажмите кнопку!", reply_markup=keyboard) # функция запустится, когда пользователь нажмет на кнопку @bot.callback_query_handler(func=lambda call: True) def callback_inline(call): if call.message: if call.data == "button1": bot.send_message(call.message.chat.id, "Вы нажали на первую кнопку.") if call.data == "button2": bot.send_message(call.message.chat.id, "Вы нажали на вторую кнопку.") bot.polling(none_stop=True)
Собираем текстовый квест
from telebot import TeleBot, types from random import randint from secret import token pictures = < 0: "https://storage.geekclass.ru/images/760e484b-a099-4a7a-a722-5aec9a933614.jpg", 1: "https://storage.geekclass.ru/images/4637fc41-08df-466a-b112-aa577dba6c1d.jpg", 2: "https://storage.geekclass.ru/images/c2a2a60c-9c7b-4c3a-b663-42d2559bf869.jpg" >states = <> inventories = <> # Обходим блокировку с помощью прокси telebot.apihelper.proxy = bot = TeleBot(token) @bot.message_handler(commands=["start"]) def start_game(message): user = message.chat.id states[user] = 0 inventories[user] = [] bot.send_message(user, "Добро пожаловать в игру!") process_state(user, states[user], inventories[user]) @bot.callback_query_handler(func=lambda call: True) def user_answer(call): user = call.message.chat.id process_answer(user, call.data) def process_state(user, state, inventory): kb = types.InlineKeyboardMarkup() bot.send_photo(user, pictures[state]) if state == 0: kb.add(types.InlineKeyboardButton(text="пойти направо", callback_data="1")) kb.add(types.InlineKeyboardButton(text="пойти налево", callback_data="2")) bot.send_message(user, "Вы в оказались в темном подземелье, перед вами два прохода.", reply_markup=kb) if state == 1: kb.add(types.InlineKeyboardButton(text="переплыть", callback_data="1")) kb.add(types.InlineKeyboardButton(text="вернуться", callback_data="2")) bot.send_message(user, "Перед вами большое подземное озеро, а вдали виднеется маленький остров.", reply_markup=kb) if state == 2: bot.send_message(user, "Вы выиграли.") def process_answer(user, answer): if states[user] == 0: if answer == "1": states[user] = 1 else: if "key" in inventories[user]: bot.send_message(user, "Перед вами закрытая дверь. Вы пробуете открыть ее ключем, и дверь поддается. Кажется, это выход.") states[user] = 2 else: bot.send_message(user, "Перед вами закрытая дверь, и, кажется, без ключа ее не открыть. Придется вернуться обратно.") states[user] = 0 elif states[user] == 1: if answer == "2": bot.send_message(user, "И правда, не стоит штурмовать неизвестные воды. Возвращаемся назад. ") states[user] = 0 else: bot.send_message(user, "Вы пробуете переплыть озеро. ") chance = randint(0, 100) if chance > 30: bot.send_message(user, "Вода оказалось теплой, а в сундуке на острове вы нашли старый ключ. Стоит вернутся обратно.") inventories[user].append("key") states[user] = 0 else: bot.send_message(user, "На середине озера вас подхватывают волны и возвращают обратно.") states[user] = 1 process_state(user, states[user], inventories[user]) bot.polling(none_stop=True)
Как создавать игры в 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 блоге
- Описание Gaming Platform для разработчиков
- Telegram Game API
- Как создать Telegram бота
Интересные записи:
- Инструкция по работе с DoubleClick
- Бесплатные SSL сертификаты от Let’s Encrypt
Игровая платформа
Боты теперь могут предлагать пользователям поиграть в HTML5-игры, в группе или приватных чатах. Игры — это новый тип контента, который бот может отправлять пользователям.
Примечание
Эта страница предназначена в первую очередь для разработчиков ботов. Если вы хотите почитать об играх в Telegram более простым языком, добро пожаловать в блог.
Чтобы посмотреть на способности игровой платформы, попробуйте поиграть через ботов @gamebot и @gamee.
Создание игры
Чтобы создать игру, вам необходимо отправить команду /newgame боту @BotFather. В процессе создание вы должны будете ввести название игры, описание, фото и необязательную анимацию геймплея. Игры с анимированной картинкой выглядят более привлекательно в списке (примеры: Lumberjack и Corsairs).
Запуск игры
Как только игра создана, её можно отправлять в группы или чаты точно так же, как и обычное сообщение. Второй способ — отправить её при помощи инлайн-режима. Под сообщением с игрой всегда будет инлайн-кнопка, начинающая игру. Как только кто-то нажимает кнопку, вашему боту приходит коллбэк с информацией о выбранной игре. Вы отвечаете уникальным URL, сформированный конкретно для этого пользователя, и приложение автоматически открывает игру во встроенном браузере.
Добавление кнопок
Если вы отправите сообщение без кнопок вообще, то к нему автоматически добавится стандартная кнопка «Играть в ИмяИгры». Однако, вы можете добавлять к сообщению и другие кнопки: например, с описанием правил или ссылкой на официальное сообщество.
Важная информация
Первая кнопка в сообщении всегда должна выполнять функцию открытия игры.
Таблица рекордов
Сообщение, к которому прикреплена игра, также может отображать таблицу рекордов для конкретного чата. Как только кто-то занимает первое место по очкам, всем участникам придёт уведомление, а текущая таблица рекордов отобразит новый рейтинг игроков. Также возможно запросить данные о рейтинге игроков, чтобы создать такую таблицу прямо в игре.
Отправка результатов в чат
В интерфейсе игры в правом верхнем углу всегда будет находиться стандартная системная кнопка «Поделиться»:
Также вы можете создавать дополнительные кнопки в HTML-странице. Нажатие на такую кнопку приведёт к открытию желаемого чата и отправкой в него сообщения с количеством набранных очков в игре.
Чтобы добавить такую кнопку на страницу, добавьте этот скрипт перед закрытием тэга :
Примечание
Эта библиотека будет работать только в играх, открытых в приложении Telegram. Пожалуйста, не применяйте её за пределами игр.
По нажатию на кнопку должен вызываться метод TelegramGameProxy.shareScore() .
Пример вызова
Предупреждение
Запрещается вызывать этот метод без участия пользователя. Он должен вызываться только при прямом намерении пользователя нажать на кнопку.
Использование параметров URL
Если в вашем URL используется хэш, то имейте в виду, что Telegram может к нему что-нибудь добавить. Названия добавленных параметров будет начинаться с tg (вот пример кода, который их добавляет: games.js#L54). Чтобы достать свои собственные параметры из адреса, вы можете воспользоваться объектом TelegramGameProxy.initParams .
Позаботьтесь об UX
Пожалуйста, протестируйте своё приложение на максимальном количестве разных экранов и ориентаций. Если по каким-то причинам на определённых экранах ваше приложение не работает — не бросайте это просто так и оповестите пользователя — хотя бы просто уведомлением.
Сайт про Telegram на русском (неофициальный).
Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.