-
Notifications
You must be signed in to change notification settings - Fork 16
/
hamster-autoclicker.user.js
143 lines (124 loc) · 7.9 KB
/
hamster-autoclicker.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// ==UserScript==
// @name Hamster Kombat Autoclicker
// @namespace Violentmonkey Scripts
// @match *://*.hamsterkombat.io/*
// @version 1.2
// @description 12.06.2024, 21:43:52
// @grant none
// @icon https://hamsterkombat.io/images/icons/hamster-coin.png
// @downloadURL https://github.com/mudachyo/Hamster-Kombat/raw/main/hamster-autoclicker.user.js
// @updateURL https://github.com/mudachyo/Hamster-Kombat/raw/main/hamster-autoclicker.user.js
// @homepage https://github.com/mudachyo/Hamster-Kombat
// ==/UserScript==
(function () {
// Конфигурация стилей для логов
const styles = {
success: 'background: #28a745; color: #ffffff; font-weight: bold; padding: 4px 8px; border-radius: 4px;',
starting: 'background: #8640ff; color: #ffffff; font-weight: bold; padding: 4px 8px; border-radius: 4px;',
error: 'background: #dc3545; color: #ffffff; font-weight: bold; padding: 4px 8px; border-radius: 4px;',
info: 'background: #007bff; color: #ffffff; font-weight: bold; padding: 4px 8px; border-radius: 4px;'
};
const logPrefix = '%c[HamsterKombatBot] ';
// Перезапись функции console.log для добавления префикса и стилей
const originalLog = console.log;
console.log = function () {
if (typeof arguments[0] === 'string' && arguments[0].includes('[HamsterKombatBot]')) {
originalLog.apply(console, arguments);
}
};
// Отключение остальных методов консоли для чистоты вывода
console.error = console.warn = console.info = console.debug = () => { };
// Очистка консоли и стартовые сообщения
console.clear();
console.log(`${logPrefix}Starting`, styles.starting);
console.log(`${logPrefix}Created by https://t.me/mudachyo`, styles.starting);
console.log(`${logPrefix}Github https://github.com/mudachyo/Hamster-Kombat`, styles.starting);
// Настройки скрипта
const settings = {
minEnergy: 25, // Минимальная энергия, необходимая для нажатия на монету
minInterval: 30, // Минимальный интервал между кликами в миллисекундах
maxInterval: 100, // Максимальный интервал между кликами в миллисекундах
minEnergyRefillDelay: 60000, // Минимальная задержка в миллисекундах для пополнения энергии (60 секунд)
maxEnergyRefillDelay: 180000, // Максимальная задержка в миллисекундах для пополнения энергии (180 секунд)
maxRetries: 5 // Максимальное количество попыток перед перезагрузкой страницы
};
let retryCount = 0;
// Функция для получения местоположения элемента
function getElementPosition(element) {
let current_element = element;
let top = 0, left = 0;
do {
top += current_element.offsetTop || 0;
left += current_element.offsetLeft || 0;
current_element = current_element.offsetParent;
} while (current_element);
return { top, left };
}
// Функция для генерации случайного числа в диапазоне
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// Функция для выполнения клика с рандомными координатами
function performRandomClick() {
const energyElement = document.getElementsByClassName("user-tap-energy")[0];
const buttonElement = document.getElementsByClassName('user-tap-button')[0];
if (!energyElement || !buttonElement) {
// Элемент не найден, попытка перезапустить скрипт
console.log(`${logPrefix}Element not found, retrying...`, styles.error);
retryCount++;
if (retryCount >= settings.maxRetries) {
console.log(`${logPrefix}Max retries reached, reloading page...`, styles.error);
location.reload();
} else {
// Добавляем задержку в 2 секунды перед следующей попыткой
setTimeout(() => {
setTimeout(performRandomClick, getRandomNumber(settings.minInterval, settings.maxInterval));
}, 2000);
}
return;
}
retryCount = 0; // Сбросить счетчик попыток при успешном обнаружении элементов
const energy = parseInt(energyElement.getElementsByTagName("p")[0].textContent.split(" / ")[0]);
if (energy > settings.minEnergy) {
// Генерация случайных координат, с учетом местоположения и размера кнопки
let { top, left } = getElementPosition(buttonElement);
const randomX = Math.floor(left + Math.random() * buttonElement.offsetWidth);
const randomY = Math.floor(top + Math.random() * buttonElement.offsetHeight);
// Создание событий клика в указанных координатах
const pointerDownEvent = new PointerEvent('pointerdown', { clientX: randomX, clientY: randomY });
const pointerUpEvent = new PointerEvent('pointerup', { clientX: randomX, clientY: randomY });
// Выполнение клика
buttonElement.dispatchEvent(pointerDownEvent);
buttonElement.dispatchEvent(pointerUpEvent);
console.log(`${logPrefix}Button clicked at (${randomX}, ${randomY})`, styles.success);
} else {
// Вывод сообщения о недостаточном уровне энергии в консоль
console.log(`${logPrefix}Insufficient energy, pausing script for energy refill.`, styles.info);
// Генерация случайного значения задержки для пополнения энергии
const randomEnergyRefillDelay = getRandomNumber(settings.minEnergyRefillDelay, settings.maxEnergyRefillDelay);
const delayInSeconds = randomEnergyRefillDelay / 1000;
// Вывод информации о времени до следующего запуска в консоль
console.log(`${logPrefix}Energy refill delay set to: ${delayInSeconds} seconds.`, styles.info);
// Установка задержки перед следующей проверкой энергии
setTimeout(performRandomClick, randomEnergyRefillDelay);
return;
}
// Генерация следующего клика с рандомным интервалом
const randomInterval = getRandomNumber(settings.minInterval, settings.maxInterval);
setTimeout(performRandomClick, randomInterval);
}
// Функция для нажатия на кнопку "Thank you, Bybit"
function clickThankYouBybitButton() {
const thankYouButton = document.querySelector('.bottom-sheet-button.button.button-primary.button-large');
if (thankYouButton) {
thankYouButton.click();
console.log(`${logPrefix}'Thank you' button clicked.`, styles.success);
}
}
// Запуск выполнения кликов с задержкой 5 секунд
setTimeout(() => {
console.log(`${logPrefix}Script starting after 5 seconds delay...`, styles.starting);
clickThankYouBybitButton();
performRandomClick();
}, 5000); // Задержка 5 секунд
})();