Hamster Kombat: Автоматизация фарма и тапанья хомяка через Python с деплоем
Друзья, приветствую! Сейчас наблюдается невероятный интерес к телеграмм игре Hamster Kombat. Все тапают этого несчастного хомяка в надежде, что когда-то можно будет продать монеты за реальные деньги. Пока мы все в ожидании, давайте я расскажу, как автоматизировать процесс фарма и тапанья хомяка через Python, используя один интересный проект.
В завершении статьи я поделюсь с вами двумя способами, которые позволят развернуть нашего бота удаленно.
Получаем токен
Для начала выполним небольшую подготовку. Нам необходимо получить специальный токен для автоматизированного тапанья и фарма в Hamster Kombat.
Выполняем вход в WEB версию телеграм: web.telegram.org
Открываем страницу с Hamster Kombat.
Кликаем на Play.
Открываем панель разработчика (обычно F12).
Переходим в приложение и копируем значение ключа
tgWebAppData
(скриншот со стрелами ниже).
Устанавливаем скрипт
Открываем терминал.
Вводим команду (клонируем репозиторий проекта):
git clone https://github.com/jawikas/hamsterkombat.git
Открываем созданную директорию в IDE, с которой вы работаете. В моем случае это будет PyCharm.
Устанавливаем зависимости:
pip install -r requirements.txt
Открываем файл
tokens.txt
и добавляем в него скопированные данные с панели разработчика. Обратите внимание, добавлять нужно без кавычек в начале и в конце скопированной строки. Пример:
query_id=xxxxxxxxx-Rxxxxuj&user=%7B%22id%22%3A1323733375%2C%22first_name%22%3A%22xxxx%22%2C%22last_name%22%3A%22%E7%9A%BF%20xxxxxx%22%2C%22username%22%3A%22xxxxx%22%2C%22language_code%22%3A%22id%22%2C%22allows_write_to_pm%22%3Atrue%7D&auth_date=xxxxx&hash=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Выполняем запуск:
python main.py
Объяснение опций, которые нас встретят
После запуска скрипта у вас будут следующие опции:
Auto Buy Upgrade (Автоматическое обновление покупки с 3 вариантами метода) — ВКЛ/ВЫКЛ:
Upgrade items with the highest profit: Улучшение предметов с наибольшей прибылью.
Upgrade items at the lowest price (low price with high profit): Улучшение предметов по самой низкой цене (низкая цена с высокой прибылью).
Upgrade items with a price less than balance: Улучшение предметов по цене меньше баланса.
Auto Complete Combo (Автовыполнение ежедневного комбо) — ВКЛ/ВЫКЛ:
Auto Complete Cipher (Автоматическое решение ежедневных шифров морзе) — ВКЛ/ВЫКЛ:
Auto Complete Tasks (Автоматическое решение заданий) — ВКЛ/ВЫКЛ:
По умолчанию, скрипт выполняет следующие действия без необходимости настройки (команда 5):
Теперь установим необходимые настройки и произведем запуск бота.
Настройки и запуск
Активирую все опции. Для запуска отправляем 5 и жмем на ENTER:
Далее выполнится много действий и на выходе мы доберемся до паузы в 30 минут:
Через 30 минут действия повторяются. Для остановки бота выполняем комбинацию клавиш CTRL + C
.
Для того чтоб убедиться, что автофарм выполняется, можно открыть Hamster Combat с мобильного устройства.
У вас после первого запуска картинка будет приятнее, так как автоматически выполнятся несколько заданий и на ваш баланс упадет несколько миллионов монет.
Автофарм и автотапы в нескольких аккаунтах
Для запуска нескольких аккаунтов, передайте в файл tokens.txt
несколько токенов токенов. Каждый новый токен необходимо передавать с новой строки:
query_id=xxxxxxxxx-Rxxxxuj&user=...
query_id=xxxxxxxxx-Rxxxxuj&user=...
В таком случае будет происходить запуск всех аккаунтов, а после будет идти одна общая пауза в 30 минут.
Если вы просто хотели ознакомиться с проектом и производить его запуск со своей локальной машины, то у меня для вас все. Просто разбирайтесь с настройками и тестируйте их разные комбинации.
Для тех же, кто хочет действительно использовать его 24/7 — читайте далее. Там я расскажу о двух способах удаленного запуска данного проекта.
Подготовка к удаленному запуску
Прежде чем выполнять запуск бота удаленно, внесем некоторые изменения в код. Удобнее задавать опции на старте, тем самым создав условие, при котором бот будет запускаться после ввода команды python main.py
.
Изменения в config.json
{
"min_tap": 138,
"max_tap": 738,
"delayUpgrade": 1,
"DelayPerAccount": 5,
"tapDelay": true,
"max_price": 5000000,
"loop": 1600,
"auto_upgrade": true,
"combo_upgrade": true,
"daily_cipher_on": true,
"tasks_on": true,
"upgrade_method": 1
}
Тут, как вы видите, мы добавили следующие параметры: auto_upgrade, combo_upgrade, daily_ciper_on, task_on и upgrade_method. В старой реализации данные параметры мы указывали через терминал (1, 2 и так далее).
Вот описание для каждой настройки и их значений в файле конфигурации:
min_tap: Минимальное количество нажатий. Используется для задания нижнего предела количества нажатий на хомяка.
Пример: 138
max_tap: Максимальное количество нажатий. Используется для задания верхнего предела количества нажатий.
Пример: 738
delayUpgrade: Задержка перед обновлением (в секундах). Указывает задержку между проверками возможности обновления.
Пример: 1
DelayPerAccount: Задержка для каждой учетной записи (в секундах). Указывает задержку между действиями для каждой учетной записи.
Пример: 5
tapDelay: Включение/выключение задержки для нажатий. Логическое значение, указывающее, следует ли использовать задержку для нажатий.
Пример: true
max_price: Максимальная цена, которая будет использована при покупке обновления.
Пример: 5000000
loop: Время цикла (в секундах). Указывает длительность одного цикла работы бота.
Пример: 1600
auto_upgrade: Автоматическое обновление. Логическое значение, указывающее, следует ли автоматически покупать обновления.
Пример: false
combo_upgrade: Автоматическое выполнение комбо. Логическое значение, указывающее, следует ли автоматически выполнять комбо-действия.
Пример: false
daily_cipher_on: Автоматическое выполнение ежедневных шифров.
Пример: false
tasks_on: Автоматическое выполнение задач. Логическое значение, указывающее, следует ли автоматически выполнять задачи.
Пример: false
upgrade_method: Метод обновления. Указывает метод, который будет использоваться для обновлений. Возможные значения:
1: Обновление по самому высокому профиту.
2: Обновление по самой низкой цене.
3: Обновление по цене, меньше текущего баланса.
Пример: 1
Изменения в core.py
import locale
import requests
from colorama import *
from src.utils import load_tokens
from src.auth import get_token, authenticate
from src.exceptions import upgrade_passive, claim_daily, execute, boost, clicker_config
from src.exceptions import _sync, exhausted, execute_combo, claim_cipher
from src.__init__ import (
mrh, pth, hju, kng,
read_config, _number, countdown_timer, log,
log_line,
)
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
init(autoreset=True)
config = read_config()
def main():
auto_upgrade = config.get('auto_upgrade', False)
combo_upgrade = config.get('combo_upgrade', False)
daily_cipher_on = config.get('daily_cipher_on', False)
tasks_on = config.get('tasks_on', False)
_method = str(config.get('upgrade_method', '1'))
cek_task_dict = {}
countPerAccount = config.get('DelayPerAccount', 3)
loop = config.get('loop', 3600)
while True:
try:
while True:
init_data_list = load_tokens('tokens.txt')
for init_data in init_data_list:
token = get_token(init_data)
if token:
try:
res = authenticate(token)
if res.status_code == 200:
user_data = res.json()
username = user_data.get('telegramUser', {}).get('username',
'Please set username first')
log(kng + f"Login as {pth}{username}")
clicker_config(token)
clicker_data = _sync(token)
if 'clickerUser' in clicker_data:
user_info = clicker_data['clickerUser']
balance_coins = user_info['balanceCoins']
earn_passive_per_hour = user_info['earnPassivePerHour']
exchange_name = user_info['exchangeId']
log(hju + f"Balance: {pth}{_number(balance_coins)}")
log(hju + f"Income: {pth}{_number(earn_passive_per_hour)}/h")
log(hju + f"CEO of {pth}{exchange_name} {hju}exchange")
claim_daily(token)
while True:
exhausted(token)
if not boost(token):
break
if tasks_on:
execute(token, cek_task_dict)
if daily_cipher_on:
claim_cipher(token)
if combo_upgrade:
execute_combo(token)
if auto_upgrade:
upgrade_passive(token, _method)
log_line()
countdown_timer(countPerAccount)
except requests.RequestException as e:
log(mrh + f"Request exception for token {pth}{token[:4]}****: {str(e)}")
else:
log(mrh + f"Failed to login token {pth}{token[:4]}*********\n", flush=True)
countdown_timer(loop)
except Exception as e:
log(mrh + f"An error occurred in the main loop: {kng}{str(e)}")
countdown_timer(10)
if __name__ == '__main__':
main()
Создание Docker контейнера
Для удобства создадим Dockerfile
в корне проекта:
# Используем новый облегченный образ Python
FROM python:3.12-alpine
# Устанавливаем рабочую директорию в контейнере
WORKDIR /app
# Копируем файл requirements.txt в рабочую директорию
COPY requirements.txt .
# Устанавливаем зависимости из requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Копируем остальные файлы приложения в рабочую директорию
COPY . .
# Указываем команду для запуска приложения
CMD ["python", "main.py"]
Создание образа
docker build -t my-hamster-app .
Запуск контейнера
docker run -it -d --name hamster-container my-hamster-app
Для входа в терминал контейнера:
docker attach hamster-container
Команда docker attach hamster-container
подключает текущую консоль к уже запущенному контейнеру hamster-container
. Это позволяет вам взаимодействовать с контейнером так, как если бы вы работали напрямую в его терминале.
для выхода CTRL + P, CTRL + Q
Деплой на VPS сервере
Теперь вы можете воспользоваться DockerHub: загрузить туда созданный образ и потом скачать его с DockerHub на сервер, либо поступить следующим образом:
Останавливаем контейнер:
docker stop hamster-container
Удаляем контейнер:
docker rm hamster-container
Удаляем образ:
docker rmi my-hamster-app
Подключаемся к серверу по FTP (например, с помощью FileZilla).
Загружаем файлы на сервер.
Создаем образ и запускаем контейнер (как в примере выше).
В рабочих проектах я обычно так не поступаю, прошу не кидать в меня тапки. Просто в данном случае не вижу смысла заморачиваться с приватным репозиторием на GitHub или с репозиторием на DockerHub.
Теперь на сервере повторим те же команды. Подключаться я буду через SSH с логином и паролем:
ssh root@111.111.111.111
my_pass
Переходим в созданную директорию:
cd ../home/hamster_bot
Убедимся, что все файлы на месте. Теперь создаем образ:
Файлы на месте!
docker build -t my-hamster-app .
Если на вашем сервере не установлен Docker, установите его (в интернете много информации на этот счет).
Теперь запустим контейнер:
docker run -it -d --name hamster-container my-hamster-app
Проверим, все ли работает:
docker attach hamster-container
76 — это первые 2 символа ID контейнера. Можно было вместо 76 ввести hamster-container
Деплой на Amvera Cloud
Вместо использования VPS сервера с Linux и многочисленными командами по настройке, можно воспользоваться отечественным аналогом Heroku — Amvera Cloud.
Почему именно этот сервис?
Я решил рассказать о нем, потому что работа с терминалом Linux может отпугнуть новичков: настройка, ввод команд, SSH, установка Docker, деплой файлов и прочее. Для проекта, как данный бот, нет смысла платить 600 рублей и больше, так как требования к железу практически отсутствуют.
Amvera Cloud берет на себя все хлопоты по настройке, а нам останется просто выполнить несколько команд на своей стороне, чтобы наш контейнер автоматически запустился.
К тому же, для тестирования сервиса вам предоставят подарочный баланс в размере 111 рублей, чтобы вы могли понять, подходит ли вам работа с этим сервисом. Этого хватит на пару недель активного фарма и тапанья вашего хомяка.
Регистрируемся на сайте Amvera Cloud.
Переходим в раздел проектов.
Создаем первый проект, заполняя следующие поля: На стартовом экране указываем имя проекта, выбираем «приложение» и подбираем тарифный план. Средства с баланса снимаются постепенно, так что в бесплатной версии можно выбрать даже самый мощный тариф. Для примера я возьму самый простой (пробный).
Копируем ссылку, указанную стрелкой (скрин ниже).
На новом экране нажимаем на завершить.
То есть никакие настройки нам генерировать не нужно. Мы уже все сделали, когда создали наш Dockerfile
Далее выполним несколько команд в своей консоли для доставки файлов в Amvera. Инициализируем пустую директорию .git:
git init
Привязываем свой проект:
git remote add amvera https://git.amvera.ru/имя_пользователя/название_проекта
В моем случае это:
git remote add amvera https://git.amvera.ru/yakvenalex/hamsterbot
При первом использовании GIT в связке с Amvera, возможно, нужно будет выполнить авторизацию. Для этого укажите в появившемся окне логин и пароль от личного кабинета Amvera
Теперь загрузим файлы нашего проекта в репозиторий Amvera:
git add .
git commit -m "Init commit"
git push amvera master
Если получите ошибку, что ветка master не существует, выполните команду:
git checkout -b master
git push amvera master
Проверим что файлы доставлены
Теперь остается подождать пару минут, и наш бот будет активным. В этом можно убедиться, посмотрев на своего хомяка или заглянув в логи приложения.
Завершение
Надеюсь, этот гайд был полезен, и теперь у вас есть понимание, как автоматизировать фарм и тапанье хомяка через Python. Удачи вам в игре и пусть ваши хомяки приносят вам много монет!
Поддержите эту статью лайком, подпиской или комментарием, если хотите и дальше получать подробный разбор необычных проектов на Python. До скорого!