Как создать бота с игрой в телеграмм c помощью Python.
Hello World!
Недавно я писал бота для телеграмм и один мой знакомый рассказал, что в телеграмме есть еще и игры. Мне стало интересно и я решил прогуглить. Идея игр в телеграмм мне понравилась и я подумал, что было бы хорошо интегрировать данную опцию в моего телеграмм бота, так как это добавит интерактивности. Телеграмм ботов я разрабатываю на Python, используя при этом библиотеку pyTelegramBotAPI. Вообщем, я начал искать и , к сожалению, не нашел нужной для меня информации, собранной в одном месте и на русском языке. Но как-то у меня получилось собрать все в кучу и немного разобраться с играми в телеграмм и теперь я хочу поделиться этим с вами. Сразу скажу, что в данной статье не будет каких-то детальных технических особенностей и тому подобных вещей. Начинаем.
Так, в статье я предполагаю, что у вас уже установлена библиотека pyTelegramBotAPI, а также вы более или менее понимаете, как создавать телеграмм ботов. В противном случае со всем этим вы можете ознакомиться в Интернете — информации достаточно.
Итак, импортируем библиотеку pyTelegramBotAPI, создаем бота с помощью BotFather и создаем объект бота используя токен, который выдал нам BotFather.
Хорошо, давайте теперь создадим игру. Делается это также с помощью BotFather. Пишем /newgame и следуем дальнейшим инструкциям.
Окей, дальше, когда вы согласитесь(или не согласитесь ) с условиями пользователя, BotFather напишет, что ваш бот работает не в inline_mode, а бот с игрой должен работать именно в этом режиме. Но это не проблема. Просто пропишите команду /setinline и BotFather выдаст вам список ваших ботов и предложит выбрать какого из ботов вы хотите перевести в inline режим. Смело выбирайте какого-то из своих ботов.
Игровые боты. Начало
Что может быть интереснее процесса игры в игры? Правильно! Процесс наблюдения за тем, как играет в игры написанный тобой бот.
Некоторое время, я размышлял, о чём бы написать свою первую статейку. Хотел написать о программировании микроконтроллеров, но оказалось трудно отделить части рабочих проектов от тех, что можно опубликовать без оглядки на коллег. Остановился на идее о ботах.
Введение
Боты для онлайн игр я бы грубо разделил на 3 разновидности по способам реализации:
1. Боты не использующие приложение игры. Имитирующие протокол обмена с сервером.
2. Боты работающие с процессом приложения игры. В случае с Web, работающие с окном браузера.
3. Боты работающие со скриншотом и имитирующие устройства ввода мышь и клавиатуру.
Первая разновидность скорее гипотетическая, т.к. протоколы, как правило, закрыты и не тривиальны.
Первая разновидность больше подходит для ботов с простыми и текстовыми протоколами. Если на сервер передаются бинарные данные, то предстоит разобраться с их структурой, что усложняет задачу.
Вторая разновидность более реальна и может быть реализована. Бот второго вида получает полезную информацию из памяти процесса игры. Недостаток — версии клиентов могут регулярно обновляться и тогда может потребоваться заново искать интересующие адреса памяти.
Мы рассмотрим третюю разновидность ботов, т.к. ИМХО они более привлекательны, хоть и не лишены недостатков.
А так же, такой подход более спортивный 🙂
В этой статье я рассмотрю набор инструментов для самого простого бота для Windows.
Для самого простого бота достаточно эмитировать события мыши и клавиатуры. В большинстве случаев этого оказывается достаточно для решения (не самого эффективного, но не требующего участия человека) рутинных дел в различных играх. Для более эффективной работы бота требуется обратная связь с игрой, т.е. получение и обработка скриншотов игры.
Для разработки приложений я буду использовать Qt Creator + Qt 5 либы (так мне привычнее) и раз бот для Виндовс то + windows.h (WinAPI).
Регистрация горячих кнопок для управления ботом:
Обработка событий нажатия кнопок управления ботом:
Перемещение указателя мыши к нужной точке:
(выполнено не очень аккуратно, обещаю исправиться :-))
Мануал юзера
Перед запуском бота горячей кнопкой Alt-F1, бот следует сначала настроить, определив верные координаты органов управления по которым бот будет кликать.
Для запоминания координат точки наводим указатель месту и жмём Alt-F4.
Для проверки корректности точки отводим указатель в сторону и жмём Alt-F3.
Для настройки следующей точки жмём Alt-F2.
Для сохранения верных координат жмём Alt-F5.
Подводные камни
Опыт показывает, что не стоит торопиться кликать по органам управления и двигать указатель. Часто игры притормаживают, при наведении мыши на кнопку срабатывает отрисовка подсветки и прочие неведанные процессы и торопливость приводит к несрабатыванию клика или захвата при перетягивании и т.п. и как следствие неработоспособность бота. При ручном управлении, люди обычно таких досадных мелочей даже не замечают, так как работает обратная связь через органы зрения. Решение — делать паузы после всех элементарных действий.
Окно игры может произвольно свернуться в следствии появления сообщения от виндозы или ещё по каким причинам. В программе последовательности кликов и пауз стоит предусмотреть клик по иконке свёрнутой игры.
Простой игровой бот для ВК, создаем игру для Вконтакте + исходники! | Часть 1
Данная статья, начало создания игровых механик для своего бота Вконтакте. Многие из вас завадались вопросом: А как создать игрового бота для ВК, давайте начнем создавать классного бота для совместных игр.
1. Подготовка.
Так как мы еще не определились что именно будет в нашем боте, мы будем создавать это ниже, мы подготовим наше сообщество для создания нового бота, а так же подключим сразу базу данных и сделаем регистрацию.
Создаем новое сообщество, указываем название, тематику и по желанию свой сайт (если есть).


Переходим в настройки и включаем сообщения сообщества, а так же создаем новое приветствие для новичков :), тут же в подразделе Настройки для бота не забываем включить их, и разрешить добавлять его в беседу!
Теперь переходим к настройке скрипта, назовем это основной файл отвечающий за прием событий от вк и их дальнейшей обработки
Если нет сервера, нужно приобрести, рекомендуем хостинг FirstVDS нам подойдет и обычный хостинг VDS-OVZ-Разминка, цена на время написания статьи всего 90 рублей в месяц. После заказа Вам придет на почту данные для авторизации на сервере. Использовать можете любой хостинг, на ваш вкус и цвет. Главное условие поддержка PHP 5.6+ (желательно 7.0+) и MySQL. Далее переходим на сервер, создаем любое доменное имя куда будем заливать скрипты. Мы будем использовать IP адрес. Если с с настройкой сервера не понятно, то почитайте эту статью на нашем сайте, где мы наглядно показываем как загрузить файлы на сервер.
После того как разобрались с сервером, нужно загрузить как раз необходимые библиотеки и основной файл, скачать ниже:
panamera.rar
Для работы с PHP я использую PHPStorm, это платный продукт, но как получить его бесплатно, Вам, наверно, объяснять не нужно 🙂
Распаковываем архив на сервер и открываем наш файл bot.php и пишем код который останется неизменным и может использоваться при создании новых ботов.
Здесь нам нужно заполнить следующие поля:
$host = ‘localhost’; // По умолчанию localhost или ваш IP адрес сервера
$name = »; // логин для авторизации к БД
$pass = »; // Пароль для авторизации к БД
$bdname = »; // ИМЯ базы данных
$vk_key = »; // Длинный ключ сообщества, который мы получим чуть позже
$confirm = »; // СТРОКА которую должен вернуть сервер
$v = ‘5.103’; // Версия API, последняя на сегодняшнее число, оставлять таким если на новых работать в будущем не будет
Получение ключа сообщества:
А так же в разделе Тип событий обязательно включите Входящие сообщения
Так как данные я буду вносить своего сервера, соответственно показывать их я не буду. После настройки возвращаемся снова в сообщество.
Надеюсь с этим все ясно, почти в каждой статье на нашем сайте мы каждый раз объясняем как настроить бот, почитайте их, если здесь не ясно что делать. После успешного подключения переходим уже ко второй части статьи, где будем делать регистрацию пользователей которые первый раз напишут боту.
2. Регистрация новых пользователей в боте.
Для создания игрового бота понадобится регистрация используя базу данных. Мы будем Использовать для этого обертку на родным MySQLi. Для начала создаем через PhpMyAdmin новую таблицу users с полями:
Или используем запрос ниже:
Переходим к самому интересному, написанию кода.
Для начала как всегда, создание переменных которые чаще всего будут использоваться в боте:
Пишем первую проверку, на входящее сообщение, именно туда мы будем вносить весь код
Это нужно что бы исключить все другие события, ведь у нас игровой бот который использует только текст.
Обращаемся к базе данных, что бы проверить есть ли такой пользователь в ней:

Давайте сразу добавим кнопки, ведь это удобно, так как у нас бот называется PANAMERA, давайте сделаем какую-нибудь автомобильную игру, где ваша задача получить Porshe PANAMERA, но не будем ограничиваться этим, а начнем развивать механику в разные направления.
После регистрации у вас ничего нет, нужны деньги, что бы их получить, можно использовать кнопку бонус, давайте ее и добавим в бот.
Пишем следующий код:
К переменным
Далее:
Давайте протестируем регистрацию и ответ на нажатие кнопки:
Ответил не сразу, в коде были допущены следующие ошибки:
ids заменить на vk_id и добавить переменную $userinfo = $vk->userInfo ($id);
Так как статья пишется параллельно созданию бота, могут быть допущены ошибки, выше в исходных файлах они будут исправлены.

Давайте сделаем что бы бонус начислялся на баланс. Добавляем 2 поля к таблице USERS:
переходим к коду и пишем следующую проверку и рандом:
Проверяем:
Так это выглядит в базе данных:
Отлично у нас есть деньги, пора бы начать их и тратить 🙂 самое распространенное в играх конечно же казино, давайте сделаем что-то подобное, самое простейшее казино. Пока мы еще не придумали игровые механики для нашего игрового бота, сделаем фарм денег.
Как будет работать наше казино:
Казино все, казино 100, казино 1кк и прочие, означающие ставки. Погнали делать команду:
Получилось довольно много кода, в будущем возможно мы еще вернемся для доработок, все зависит только от Вас, давайте попробуем это в действии:
Получилось не плохо, теперь в нашем игровом боте есть казино!
На этом наша первая часть по созданию игрового бота вконтакте подходит к концу, теперь ваши идеи и предложения будут появляться в новой статье, во второй части мы уже начнем реализацию ваших идей и предложений!
Если статья понравилась, оцените ее лайком.
Исходники готового проекта:
panamera.rar
Сергей Котов- 19.04.2020
- 43 951
- 11
- 32
Как написать игрового Telegram-бота в домашних условиях
Возможно, кто-то о нас слышал. Мы — популярное интернет-издание по программированию. Мы не только пишем статьи на тему современной разработки, но и ищем способы, как держать аудиторию в постоянной заинтересованности к тому, что мы делаем.
Однажды мы решили, что нам нужно сделать бота. Бот должен был давать логические задачи в групповом чате в Telegram «Развиваем логику», закреплять их на то время, пока её решают, не давать новую, пока ответ кого-то из участников не наберёт десять (потом снизили до пяти) плюсов, а также вывешивать топ наиболее успешных решателей задачек.
Задача довольно простая, подумали мы, особенно учитывая волну популярности ботов и количество материала в сети по этой теме. Однако материала не очень качественного: кто-то не использует композер, а кто-то даже пишет весь код в одном файле-обработчике, полагая, очевидно, будто количество файлов влияет на скорость работы кода.
Сначала бот должен был просто давать задачи, причём их можно было пропускать, постоянно вызывая одну и ту же команду. Это первая проблема, которую мы стали решать. Выход нашёлся почти сразу: сохранение состояния бота (а точнее, текущей команды) в базе. Другими словами, получая команду /get, бот даёт задачу и сохраняет команду в базе.
В следующий раз, перед тем как отреагировать на сообщения в чате, бот сравнивает команду, которую получил прямо сейчас, с последней командой в базе. Если они совпадают, бот никак не реагирует и вдобавок удаляет команду пользователя, чтобы она не мусорила чат. Согласитесь, это выглядит как хорошее решение.
После запуска бота в работу мы обнаружили ещё одну проблему: хэштеги не очень удобны для поиска. Ведь задача может уйти далеко наверх, а листать до неё или забивать в поиске — достаточно неинтересное занятие, чтобы стравливать его пользователю. Поэтому мы решили сразу же закреплять задачу, которую даёт бот. Причём закрепляет как раз он сам, а не мы (и да, делает это без уведомлений).
Ну и напоследок ещё одна проблема, которую мы с успехом решили. Некоторые задачи предполагали не точное решение, а наиболее подходящее. Как в таком случае должен поступить админ и чей ответ выбрать?
Поэтому мы подумали, что коллективное решение намного справедливее решения одного человека, и дали пользователям выбирать самим, помечая плюсом сообщение, с которым они согласны.
Какое решение быстрее наберёт пять плюсов, то и выбирается ботом как лучшее. Это хорошее решение не только с точки зрения справедливости, но и автоматизации: нам больше не придётся следить за чатом и читать все ответы.
Дело осталось за малым: написать бота. Мы ограничились Composer, библиотекой telegram-bot-sdk и symfony/dotenv для парсинга .env-файла. Весь код приводить не буду: он большой. Посмотреть на то, что получилось, можно по ссылке.
Composer — это стандарт при разработке на PHP. Он позволяет скачивать сторонние библиотеки на проект и предоставляет удобный механизм по автозагрузке классов. Вся работа с Composer происходит через консоль и в файле composer.json. Обычно он выглядит так:
Если вы разрабатываете не на фреймворке, то во множестве случаев создаёте composer.json самостоятельно и заполняете секцию autoload, которая загружает ваши классы по правилу psr-4, о котором можно найти много информации в интернете.
Далее вы выполняете команду composer install, и автозагрузка начинает работать. Также не забудьте про библиотеки, которые нужно установить, для этого выполните в терминале в папке с проектом следующие две команды:
И тогда ваш composer.json станет похож на тот, что я показывал выше.
Сразу же продемонстрирую готовую структуру проекта:
Файл app.php является точкой входа в наше приложение, на который мы вешаем веб-хук (это значит, что бот не будет постоянно опрашивать сервер на наличие обновлений; он их будет получать только тогда, когда они будут). Вот как он выглядит:
Ничего необычного, создаём объекты всех нужных нам классов и делаем проверку на то, в каком чате мы находимся — приватном или супергруппе. Да, разделить код на достаточно независимые части является хорошей практикой. К тому же легче рефакторить и добавлять код, когда проблемы того потребуют.
Мы любим чистый код, поэтому настройки храним в файле .env, что позволит любому пользователю ввести свои, и бот будет работать (разумеется, после создания всех нужных таблиц).
Однако получить переменные окружения из .env можно только в том случае, если вы спарсите этот файл. Делается это крайне просто:
Это тот самый файл, который мы включили в app.php. Там мы просто по ключу достаём нужные нам настройки:
В папках Admin и User хранятся классы по работе как с приватным чатом, так и с супергруппой. Это не только удобно, как я говорил выше, но и даёт возможность отключить деятельность бота в одном из режимов, если мы соберёмся добавлять в него функциональность.
Больше томить вас кодом не буду, повторю только, что теперь он в свободном доступе.
Так мы решили сразу несколько проблем и написали достаточно неплохой, легко поддерживаемый код для бота, который по-прежнему в добром здравии и надёжно выполняет свои функции.