Друзья, приветствую! Сейчас наблюдается невероятный интерес к телеграмм игре 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):
Taps (нажатия)
Boost (буст)
Daily Streak (ежедневные серии)
Теперь установим необходимые настройки и произведем запуск бота.
Настройки и запуск
Активирую все опции. Для запуска отправляем 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
Деплой на Amvera Cloud
Amvera Cloud — это отечественный аналог Heroku, который предоставляет платформу как услугу (PaaS). Это означает, что Amvera Cloud предлагает разработчикам полностью управляемую среду для развертывания, управления и масштабирования приложений без необходимости самостоятельного администрирования серверов, как это требуется при использовании VPS (виртуального частного сервера).
Почему именно этот сервис?
Amvera Cloud берет на себя все хлопоты по разворачиванию проекта. Вам достаточно просто передать файлы бота с написанным Dockerfile и после отправки файлов в сервис произойдет автоматическое разворачивание контейнера.
Другими словами: подготовили файлы бота, подготовили Dockerfile, несколькими командами отправили файлы в Amvera и проект запущен!
К тому же, для тестирования сервиса вам предоставят подарочный баланс в размере 111. Этого хватит на пару недель активного фарма и тапанья вашего хомяка.
Регистрируемся на сайте Amvera Cloud.
Переходим в раздел проектов.
Создаем первый проект. На этом этаме вам необходимо дать название проекту и выбрать тарифный план. Для текущего бота достаточно будет пробного.
Копируем ссылку, указанную стрелкой (скрин ниже).
На новом экране нажимаем на завершить.
То есть никакие настройки нам генерировать не нужно. Мы уже все сделали, когда создали наш Dockerfile. Теперь, нам остается доставить файлы в Amvera и данный сервис сам запустит контейнер бота.
Для доставки файлов в 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. До скорого!