Своя геолокационная игра за вечер

Хотите за вечер запустить бота и повеселить друзей игрой с геолокацией? Да нет ничего проще) Минимальные требования к пользователю: уметь запускать python-скрипты.

Своя геолокационная игра за вечер Python, Игры, Воздух, Своими руками, Linux, Длиннопост

Идея


Мой друг — большой любитель искать какую-нибудь фигню. А я любитель кодить. Так почему не совместить приятное с приятным? Идея такая: запускаем бота, который проведет игрока по нескольким точкам города, показывая ему фотографии и заставляя искать указанные места. В конце — сундук с сокровищами, оплаченный обед в кафе или еще какие-нибудь плюшки.


Реализация


Во-первых, писать этого бота самому мне не пришлось, всего-то и надо было заяндексить «treasure hunt bot» — и готовое красивое решение на Python сразу нашлось. Красиво оно тем, что сразу понятно, как его допилить под свои нужды, в проекте использована самая популярная библиотека для работы с Telegram API, и код вполне красив.

Я сделал форк проекта, добавил возможность отправлять фото, исправил мелкие проблемы с совместимостью с третьей версией Python, создал конфигурационный файл с тестовыми игровыми шагами; все работает достаточно стабильно.


Запуск бота


Для начала нам нужен сервер. У меня для этих целей на столе лежит Raspberry Pi, с трудом представляю, как люди выживают без домашнего сервера, пишите в комментариях, как это бывает. Но если уж так вышло, что его нет, самое время поднять виртуальную машину у любого облачного провайдера, благо, сегодня это делается двумя кликами. В крайнем случае, можно на время игры оставить включенным какой-нибудь домашний компьютер любой степени дряхлости.


Дальше скачиваем исходники и создаем конфигурационный файл config.json типа такого.


Параметры:

TOKEN_BOT — токен вашего бота (как его получить см. документацию).
authorized_users — список id пользователей, допущенных к игре
logging_user — id пользователя, которому бот будет отправлять лог событий игры

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


Как же запустить бота? О, это чудовищно сложно: нужно убедиться, что в системе установлен Python 3, открыть командную строку в вашей ОС, установить единственный требуемый python-пакет:

$ pip3 install python-telegram-bot

Теперь можно перейти в каталог с ботом:

$ cd путь/к/боту

и запустить

$ python3 manage.py

Если вы никогда этого не делали, что ж, добро пожаловать в консольный мир, когда-то нужно начинать)


Ну а если вы захотите сделать из этого процесса демон, в репозитории уже лежит пример конфига для systemd. Как демонизировать скрипты в Windows я понятия не имею)


Вот и все, осталось только придумать интересные места, сфотографировать их, сохранить координаты (и записать это все в config.json) и спрятать сокровище)

Автор поста оценил этот комментарий

Наркоторговцы придумали такую игру до вас. И не удивляйтесь, когда ваших "игроков" будут задерживать ППСП

раскрыть ветку (1)
Автор поста оценил этот комментарий

эм, моих точно не за что, не переживайте)

Автор поста оценил этот комментарий

Большое спасибо. Схоронил. Эффект баадера майнкрафта в действии

раскрыть ветку (1)
Автор поста оценил этот комментарий

пожалуйста;)

Автор поста оценил этот комментарий
Raspberry Pi для такого бота по ресурсам нормально вполне, но вот на домашнем интернете бот телеграмм теряет примерно 1 сообщение из 20-30, при том, что пинги достаточно маленькие и 100МБит (проверено на Ростелекоме и МТС). Ещё Raspberry Pi умудряется раз в несколько дней виснуть, причину не нашел, но грешу на скачки напряжения в сети. У меня для данных целей VPS в Европе, который по совместительству через VPN сидит в домашней сети и является домашним сервером и окном на заблокированные серверы
раскрыть ветку (1)
Автор поста оценил этот комментарий

у меня на RPi пачка ботов, невысоко нагруженных, конечно, но никто ничего не теряет и не виснет)

показать ответы