Игровой Telegram бот на Python, позволяющий играть как в быстрые (с помощью Telegram Dice), так и в онлайн игры с другими пользователями.
Ubuntu 22.04.2 LTS - операционная система.
Python - язык программирования.
PyCharm - среда разработки.
aiogram 3.x - работа с Telegram Bot API.
PostgreSQL - управление БД.
Pydantic - передача значений токена бота и настроек подключения к БД.
Termius - SSH клиент для управления хостом.
TimeWeb - хостинг.
- __main__ - запуск проекта, настройки диспетчера, подключение роутеров, внешних миддлварей, некоторых шаблонных и кастомных фильтров.
- callback_factory - фабрика Telegram коллбеков.
- checkers - ручные и авточекеры, проверяющие возможность вывода, ставки, а также проверка уведомлений пользователей о результатах операций и игр.
- db - инициализация базы данных, а также запросы к ней.
- db_connect_create - создание коннектора БД для последующего использования во всех обращениях к ней.
- fsm - установка состояний машины состояний (конечного автомата).
- games - обработчик онлайн и оффлайн игр.
- handlers - определение хэндлеров.
- filters - определение кастомных фильтров.
- middlewares - определение внешних и внутренних миддлварей.
- templates - определение шаблонных сообщений, клавиатур, кнопок и текстов.
- configs - настройки бота, логирования, а также токена бота и данных подключения к БД.
- difs - текстовые файлы с логами, номерами реквизитов пополнения.
Следующие смайлы - 🎲 🎱 🎰, используемые в боте, с помощью Telegram превращаются в настоящий генератор (псевдо)случайных чисел, что позволяет использовать эту механику для игр прямо в мессенджере. Выбрав тип игры и ставку, бот отправляет соответствующее Dice-сообщение, считывавает выпавшее значение, и приводит результат.
Пользователи бота также могут посоревноваться с другими пользователями, выбрав категорию Онлайн игр. В разных играх участвтует разное количество игроков (по умолчанию в Дуэли - 2, в Русской рулетке - 6, в Королевской битве - 10). В зависимости от игры и ставки пользователя закидывает в одну из соответствующих комнат.
Выбор псевдослучайного числа происходит при помощи Python модуля random. В процессе игры производится анимация загрузки игры, а также выбора числа при помощи стикера. Ниже предоставлен пример игры в Дуэль с разных аккаунтов.
Данный радел несет исключительно информативный формат и представляет собой метод возможной реализации ввода и вывода условных единиц. Бот не производит никких финансовых операций!
Для пополнения внутриигрового баланса и вывода условных единиц с него, реализованы соответствующие функции пополнения и вывода. Если пользователь хочет пополнить или вывести сумму, отличающуюся от стандартных (по умолчанию 50, 100, 500, 1000 у.е.), реализована функция ввода другой суммы, которая подвергается различным проверкам (корректность числа, величина суммы, при выводе наличие введенной суммы у пользователя на балансе).
В случае, если пользователь совершает пополнение, это отображается в базе данных, и при нажатии на кнопку проверки пополнения, происходит зачисление средств и завершение операции с последующим уведомлением пользователя. Также в боте реализованы авточекеры, которые раз в заданное время (по умолчанию 30 секунд) проверяют завершенность операций. Если перевод совершен, но средства не зачислены на баланс и операция не завершена, авточекер автоматически завершает операцию и уведомляет пользователя об этом. Процесс пополнения и работы авточекера показаны ниже.
Вывод средств организован так же, только с дополнительным вводом пользователем реквизитов для вывода.
Для того, чтобы пользователь мог ознакомиться со всеми операциями ввода/вывода, которые он совершил, а также сввоей историей игр, реализованы соответсвующие разделы.
Разделы имеют пагинацию, а также с помощью эмоджи визуально информативно отображают завершенность и результат. Приложенное ниже GIF-изображение показывает данные разделы.
Для управления операциями, пользователями и администраторами разработана админ панель BPManage. Доступ к админ панели имеют только занесенные в базу данных администраторы.
С помощью BPManage можно просматривать, подтверждать и изменять операции, управлять пользователями (блокировать, изменять баланс, просматривать их историю операций и игр), а также управлять администраторами, выдавая и забирая полномочия, повышая или понижая их звание.
Существует 4 уровня администраторов. С каждым новым уровнем к предыдущим возможностям добавляются новые.
Уровни:
- 0 (JUNIOR) - может только просматривать информацию об операциях и пользователях.
- 1 (MIDDLE) - добавляется возможность подтверждать операции, блокировать пользователей.
- 2 (MASTER) - добавляется возможность изменять способы и реквизиты операций вывода.
- 3 (SUPERUSER) - добавляется возможность изменять баланс пользователей, а также полный доступ к панели управления администраторами.
Приведенный ниже короткий пример отображает возможности управления админ панелью BPManage от лица админа 3 уровня. (GIF плохого качества из-за ограничений в 10 МБ GitHub)
В боте реализованы некоторые мелочи, которые порой даже удобны в использовании.
- При пересылке любого сообщения в бот выводится сообщение об ID пользователя и его имени (если у пользователя выставлены разрешающие настройки профиля). Если пересылает администратор, а сообщение от пользователя, который уже использовал бот, то к информации добавляется кнопка перехода в админ панель управления пользователем (картинка ниже).
- При попытке сделать ставку, превышающую баланс пользователя, выведется сообщение с вариантом пополнить баланс. Если пользователь решит пополнить, выберет способ и/или сумму пополнения, а потом решит вернуться назад, переход будет совершен к выбору ставок в игре, из которой он нажал кнопку пополнения.
- В боте ведутся логи некоторых событий.
- В боте настроены некоторые шаблонные и кастомные фильтры (например работа только в приватных ЛС чатах).
- С помощью эмоджи визуально представлены некоторые разделы бота и статус всевозможных действий, что позволяет гораздо удобнее, интуитивнее и быстрее воспринимать информацию.
- Созданы разделы справки, где есть некоторые ответы на возможные вопросы пользователей, а также кнопка обратной связи с администрацией.
- Настроены авточекеры пополнения и уведомления о результатах игры (пример авточекера пополнения указан выше).
- Если отправить боту стикер, он выведет ID стикера, эмодзи, прикрепленное к стикеру, в также статус анимации.
- Если отправить боту сообщение типа Dice (анимированный стикер с миниигрой), бот отреагирует, предложив сыграть все таки в его игры.