Appearance
Автокликер Hamster Kombat на python
В этом мануале напишем python скрипт, который будет прокачивать самые прибыльные карточки и тапать хомяка раз в 3 часа. Потом настроим автоматическую работу этого скрипта на сервере
DANGER
Администрация проекта не одобряет использование автокликеров. Все действия выполняйте на свой страх и риск
Подготовка проекта
Для начала работы нам потребуется установить интерпретатор питона и редактор кода PyCharm
Открываем редактор, создаём проект. При создании проекта выбираем New environment using Virtualenv
В корне проекта создаём файл hamster.py
Написание кода
WARNING
Код написан с упором на понимание новичками, а не на качество, отказоустойчивость и расширяемость
Устанавливаем библиотеку для запросов к серверу командой:
./venv/bin/pip install requests
В файл hamster.py
пишем следующий код. Подробности, что и зачем делается указаны в комментариях в коде
py
import requests
import time
# Код, который даст серверу понять какой именно пользователь прислал запрос
# Нужно вытащить из приложения. См. раздел после кода
ACCESS_TOKEN = '1718729242311wereGdwJu4d6H1HyGnR2C2AsleCeVVnhRmWtLYXQC0LgfpCWNOz97Q2d3msjIOGL7331323387'
# Запускаем нужные действия. Можно оставить только тап или только апгрейд карточек
def main():
tap_hamster()
upgrade_best(3)
daily_reward()
# Делает максимально доступное количество тапов
def tap_hamster():
print('Тапаем хомяка')
# получаем с сервера количество доступных тапов
resp = call_server('clicker/sync')
available_taps = resp['clickerUser']['availableTaps']
earn_per_tap = resp['clickerUser']['earnPerTap']
# считаем количество тапов которые можно сделать
new_count = available_taps // earn_per_tap
new_available_taps = available_taps - new_count * earn_per_tap
# формируем тело запроса
data = {
'count': new_count,
'availableTaps': new_available_taps,
'timestamp': int(time.time())
}
# отправляем запрос на тап
resp_tap = call_server('clicker/tap', data)
print('Монет до: ' + str(int(resp['clickerUser']['balanceCoins'])) +
' Монет после ' + str(int(resp_tap['clickerUser']['balanceCoins'])))
# Покупает самую выгодную карточку (одну или несколько)
def upgrade_best(count=1):
# получаем с сервера доступные апгрейды
upgrades = call_server('clicker/upgrades-for-buy')['upgradesForBuy']
# получаем с сервера баланс
balance = int(call_server('clicker/sync')['clickerUser']['balanceCoins'])
# фильтруем карточки доступные для апгрейда
upgrades = [
upgrade for upgrade in upgrades
if upgrade['isAvailable']
and not upgrade['isExpired']
and upgrade['price'] != 0
and upgrade['profitPerHourDelta'] != 0
and upgrade['price'] <= balance
and (upgrade.get('cooldownSeconds') is None or upgrade.get('cooldownSeconds') == 0)
]
# Вычисление прибыли от апгрейда
for upgrade in upgrades:
upgrade['upgradeCost'] = upgrade['price'] / upgrade['profitPerHourDelta']
# Сортировка по стоимости апгрейда
upgrades = sorted(upgrades, key=lambda x: x['upgradeCost'])
# Берём нужное количество карточек
upgrades = upgrades[:count]
if len(upgrades) == 0:
print('Недостаточно монет для апгрейда')
return
# Улучшаем отфильтрованные карточки
for upgrade in upgrades:
print(f"Улучшаем карточку {upgrade['name']}. Стоимость {upgrade['price']} Прибыль {upgrade['profitPerHour']}")
data = {'upgradeId': upgrade['id'], 'timestamp': int(time.time())}
upgrade_resp = call_server('clicker/buy-upgrade', data)
if upgrade_resp.get('error_code'):
print(f"Ошибка: {upgrade_resp['error_message']}")
break
else:
print(f"Карточка улучшена. Профит в час {upgrade_resp['clickerUser']['earnPassivePerHour']}")
# Забирает ежедневную награду
def daily_reward():
print('Получаем ежедневную награду')
resp = call_server('clicker/check-task', {'taskId': 'streak_days'})
print(f"Дневная награда получена. Баланс монет {int(resp['clickerUser']['balanceCoins'])}")
# отправляет POST запрос на сервер и возвращает ответ
def call_server(path, data=None):
url = 'https://api.hamsterkombat.io/' + path
headers = {
'Connection': 'keep-alive',
'accept': 'application/json',
'authorization': 'Bearer ' + ACCESS_TOKEN,
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/126.4.6478.71 Mobile Safari/537.36',
'content-type': 'application/json',
'Origin': 'https://hamsterkombat.io',
'X-Requested-With': 'org.telegram.messenger',
'Sec-Fetch-Site': 'same-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://hamsterkombat.io/',
'Accept-Language': 'en,ru-RU;q=0.8,ru;q=0.7,en-US;q=0.6'
}
response = requests.post(url, headers=headers, json=data)
return response.json()
# Запуск main функцию
if __name__ == '__main__':
main()
Получение токена авторизации
Чтобы знать кто именно отправляет запрос к серверу, используется уникальный для каждого пользователь токен. Этот token отправляется игрой в каждом запросе к серверу.
Т.к. hamster это web приложение запускаемое в WebView, самый простой способ достать токен - использовать удалённую отладку браузера Chrome.
Подключение Android устройства
Сначала нужно включить режим разработчика:
- Откройте настройки устройства
- Перейдите в раздел "О телефоне"
- Найдите пункт "Номер сборки"
- Нажмите на "Номер сборки" 7 раз подряд
- Введите PIN-код или пароль, если телефон попросит
Затем нужно включить отладку по usb:
- Откройте настройки устройства
- Перейдите в новый раздел "Для разработчиков"
- Найдите и включите опцию "Отладка по USB"
Теперь нужно подключить телефон usb кабелем:
- Подключите кабель
- Подтвердите разрешение на подключение отладки по USB
- В списке уведомлений нажмите на "Зарядка устройства через USB"
- Выберите режим "Передача файлов"
Готово, теперь можно подключать отладчик
Подключение к отладчику
На телефоне запускаем телеграм и бота Hamster Kombat
На компьютере запускаем Google Chrome и открываем страницу chrome://inspect
Если предыдущие шаги выполнены верно, то увидим подключенный телефон и в нём вкладку Hamster Kombat.
Получение токена авторизации
Нажимаем кнопку Inspect под вкладкой Hamster Kombat.
Откроется такой же отладчик как и на обычных сайтах (да, эта игра просто сайт).
Нажимаем на хомяка пару раз и ждём когда во вкладке Сеть появится запрос оканчивающийся на tap
. Нажимаем на него и на Заголовки находим authorization
. Строка после Bearer
и есть искомый токен. Копируем его в скрипт в переменную ACCESS_TOKEN
Запуск кода
Заменяем значение переменной ACCESS_TOKEN
на своё и в функции main
оставляем вызов нужных функций
Запускаем написанную программу командой в терминале:
shell
./venv/bin/python hamster.py
Или прямо из PyCharm выбрав в контекстном меню Run
Наблюдаем как скрипт тапает все доступные монеты и апгрейдит самые выгодные карточки:
Автоматическая работа скрипта
Дорабатываем скрипт чтобы он запускал нужные нам действия в разное время. Заменяем содержимое функции main
на следующее:
py
from datetime import datetime
import pytz
def main():
# Получаем текущее время
date = datetime.now(pytz.timezone('Europe/Moscow')).strftime('%H:%M')
print(f'Запуск {date}')
# В нужное время запускаем нужное дейсвие
if date in ['09:30', '11:30', '13:30', '15:30', '17:30', '19:30']:
tap_hamster()
elif date in ['10:00', '12:00', '14:00', '15:00']:
upgrade_best(2)
elif date in ['10:00', '20:00']:
daily_reward()
else:
print('Ничего не запланировано')
Импорты нужно разместить рядом с другими импортами и дополнительно установить библиотеку для работы с часовыми поясами командой
shell
./venv/bin/pip install pytz
Теперь нужно сделать чтобы скрипт автоматически работал без нашего участия
Для этого нам понадобится сервер с ubuntu работающий постоянно и подключённый к интернету. Если у вас такого нет - арендуйте самый дешёвый VPS у timeweb или adminvps или поискать что-то подешевле в каталоге
После покупки VPS у вас должен быть адрес сервера, логи и пароль. Что-то наподобие
ip: 100.31.53.154
username: root
password: PassUWd4nU4Chc72
Подключаемся к серверу используя терминал или программу putty. Из терминала делается это командой
shell
ssh root@100.31.53.154
После подключения к серверу создаём папку где будет размещён скрипт и переходим в эту папку
mkdir /hamster
cd /hamster
Устанавливаем python
shell
apt install python3-venv
python3 -m venv venv
./venv/bin/pip install requests pytz
Копируем на сервер свой скрипт. Либо командой в терминале
shell
rsync hamster.py root@65.109.133.232:/hamster
Так же можно это сделать через PyCharm использую функцию Remote Servers
Настраиваем автоматический запуск нашего скрипта через cron
. Вводим команду:
shell
crontab -e
В открывшемся редакторе в конец вводим следующий текст:
* * * * * cd /hamster && ./venv/bin/python hamster.py >> hamster.log
Теперь ждём пару минут и смотрим что вывелось в лог командой:
shell
tail -100 /hamster/hamster.log
Это всё, от сервера можно отключаться. cron
будет запускать скрипт самостоятельно