Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not Working #1

Open
ismoil0709 opened this issue Jun 4, 2024 · 11 comments
Open

Not Working #1

ismoil0709 opened this issue Jun 4, 2024 · 11 comments

Comments

@ismoil0709
Copy link

i used firefox i did as shown and when i go to telegram web app i didn't see any change

@EvgeniyVorobev
Copy link
Owner

i used firefox i did as shown and when i go to telegram web app i didn't see any change

Try using chrome, disable addblock, disable antivirus, mabe blocking.

@Atamg1994
Copy link

install https://www.tampermonkey.net/

and add this script

// ==UserScript==
// @name         Hamster kombat clicer prod
// @namespace    http://tampermonkey.net/
// @version      2024-06-09
// @description  ...
// @author       atamg1994
// @include *://hamsterkombat.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=telegram.org
// @resource         sound https://gist.githubusercontent.com/Atamg1994/a050c648388bf5c1ec1d1926452f2f5a/raw/e0c7f1f80f2be4a1c90f8bbbe94a7634844a9cef/sound
// @grant            GM_getResourceText
// ==/UserScript==
//
(function() {
    'use strict';

    /*
     const response = await fetch('https://gist.githubusercontent.com/Atamg1994/a050c648388bf5c1ec1d1926452f2f5a/raw/e0c7f1f80f2be4a1c90f8bbbe94a7634844a9cef/sound');
    const sound = await response.text();


    */
// disable all logs
const customConsole = {
  log: function() {
    // Оставьте эту функцию пустой, чтобы отключить все логи
    // или замените её на оригинальную функцию console.log
    // console.log.apply(console, arguments);
  }
};
// Переназначаем console на нашу обертку
unsafeWindow.console = customConsole;
window.console = customConsole;



// bypass the platform through proxying to open via the telegram web version
if (unsafeWindow && unsafeWindow.Telegram && unsafeWindow.Telegram.WebApp) {
    unsafeWindow.Telegram.WebApp = new Proxy(unsafeWindow.Telegram.WebApp, {
        get(target, prop) {
            // Перехватываем обращение к свойству 'platform'
            if (prop === 'platform') {
                return 'ios';
            }
            // Перехватываем вызовы методов
            if (typeof target[prop] === 'function') {
                return function(...args) {
                    console.log(`Method ${prop} called with arguments:`, args);

                    // Изменяем поведение метода 'exampleMethod'
                    if (prop === 'exampleMethod') {
                        // Модифицируем аргументы или выполняем другие действия
                        args[0] = 'modified argument';
                    }

                    // Вызываем оригинальный метод
                    return target[prop].apply(this, args);
                };
            }

            return target[prop];
        }
    });
}



function dispatchPointerEvent(target, currentTarget, eventType, options) {
  const event = new PointerEvent(eventType, options);

  // Переопределение свойств target и currentTarget, если необходимо
  if (event.target !== target) {
    Object.defineProperty(event, 'target', { value: target });
  }
  if (event.currentTarget !== currentTarget) {
    Object.defineProperty(event, 'currentTarget', { value: currentTarget });
  }
  if (event.srcElement !== target) {
    Object.defineProperty(event, 'srcElement', { value: target });
  }

  currentTarget.dispatchEvent(event);
  console.log(`Dispatched ${eventType} event on element:`, currentTarget);
}


function pointer(element, element1 = false, element2 = false) {
  if (!element1) element1 = element;
  if (!element2) element2 = element;

  // Получаем координаты элемента
  const rect = element.getBoundingClientRect();
  const x = rect.left + (rect.width / 2);
  const y = rect.top + (rect.height / 2);

  // Функция для генерации случайных координат вокруг исходной точки
  function getRandomCoords(baseX, baseY, range) {
    return {
      clientX: baseX + (Math.random() * range * 2 - range),
      clientY: baseY + (Math.random() * range * 2 - range)
    };
  }

  // Функция для генерации случайного угла высоты
  function getRandomAltitudeAngle(minAngle, maxAngle) {
    const minRadians = minAngle * (Math.PI / 180);
    const maxRadians = maxAngle * (Math.PI / 180);
    return minRadians + Math.random() * (maxRadians - minRadians);
  }

  // Функция для генерации случайного значения в заданном диапазоне
  function getRandomInRange(min, max) {
    return min + Math.random() * (max - min);
  }

  // Диапазон случайных отклонений (в пикселях)
  const range = 80;
  const randomCoords = getRandomCoords(x, y, range);

  // Генерация случайного угла высоты между 60 и 90 градусами
  const randomAltitudeAngle = getRandomAltitudeAngle(60, 90);

  // Генерация случайного давления, ширины и высоты
  const randomPressure = getRandomInRange(0.1, 1); // давление от 0.1 до 1
  const randomWidth = getRandomInRange(5, 15); // ширина касания от 5 до 15 пикселей
  const randomHeight = getRandomInRange(5, 15); // высота касания от 5 до 15 пикселей

  const options = {
    bubbles: true,
    cancelable: true,
    clientX: randomCoords.clientX,
    clientY: randomCoords.clientY,
    button: 0,
    buttons: 1, // кнопка нажата
    composed: true,
    pointerId: 1,
    pointerType: 'touch', // Изменено на 'touch' для имитации пальца
    pressure: randomPressure, // давление пальца
    width: randomWidth, // ширина касания
    height: randomHeight, // высота касания
    tiltX: 0,
    tiltY: 0,
    twist: 0,
    altitudeAngle: randomAltitudeAngle,
    azimuthAngle: 0,
    view: unsafeWindow
  };

  const targetElement = element1;
  const currentTargetElement = element2;

  if (targetElement && currentTargetElement) {
    // Создание события pointerdown
    dispatchPointerEvent(targetElement, currentTargetElement, 'pointerdown', options);

    // Генерация случайного смещения для pointermove
    const moveRange = 10; // диапазон смещения
    const moveCoords = getRandomCoords(randomCoords.clientX, randomCoords.clientY, moveRange);

    // Вероятность выполнения смещения (например, 50%)
    const shouldMove = Math.random() > 0.5;

    if (shouldMove) {
      const moveOptions = {
        ...options,
        clientX: moveCoords.clientX,
        clientY: moveCoords.clientY,
      };

      // Создание события pointermove
      dispatchPointerEvent(targetElement, currentTargetElement, 'pointermove', moveOptions);
      console.log('Pointer move event on element:', element, 'to coordinates:', moveCoords);
    }

    // Создание события pointerup
    dispatchPointerEvent(targetElement, currentTargetElement, 'pointerup', options);
    console.log('Pointer event on element:', element, 'at coordinates:', randomCoords, 'with altitudeAngle:', randomAltitudeAngle, 'pressure:', randomPressure, 'width:', randomWidth, 'height:', randomHeight);
  } else {
    console.log('Target or currentTarget element not found');
  }
}


function clickElement(element) {
  // Получаем координаты элемента
  const rect = element.getBoundingClientRect();
  const x = rect.left + (rect.width / 2); // Центр по горизонтали
  const y = rect.top + (rect.height / 2); // Центр по вертикали

  // Создаем событие MouseEvent с координатами
  const event = new MouseEvent('click', {
    view: unsafeWindow,
    bubbles: true,
    cancelable: true,
    clientX: x,
    clientY: y
  });

  // Отправляем событие клика
  element.dispatchEvent(event);
  console.log('Clicked element:', element);
}

// Функция для выполнения тапа по элементу на Android
function tapElement(element) {
  // Получаем координаты элемента
  const rect = element.getBoundingClientRect();
  const x = rect.left + (rect.width / 2); // Центр по горизонтали
  const y = rect.top + (rect.height / 2); // Центр по вертикали

  // Создаем объект Touch с координатами
  const touchObj = new Touch({
    identifier: Date.now(),
    target: element,
    clientX: x,
    clientY: y,
    radiusX: 2.5,
    radiusY: 2.5,
    rotationAngle: 10,
    force: 0.5
  });

  // Создаем события TouchEvent с координатами
  const touchStartEvent = new TouchEvent('touchstart', {
    bubbles: true,
    cancelable: true,
    touches: [touchObj],
    targetTouches: [touchObj],
    changedTouches: [touchObj],
    shiftKey: true
  });

  const touchEndEvent = new TouchEvent('touchend', {
    bubbles: true,
    cancelable: true,
    touches: [],
    targetTouches: [],
    changedTouches: [touchObj],
    shiftKey: true
  });

  // Отправляем события тапа
  element.dispatchEvent(touchStartEvent);
  element.dispatchEvent(touchEndEvent);
  console.log('Tapped element:', element);
}

// Функция для эмуляции ввода текста в contenteditable элемент
function typeText(element, text) {
  const inputEvent = new Event('input', { bubbles: true });
  const changeEvent = new Event('change', { bubbles: true });

  // Сохраняем предыдущее значение
  const lastValue = element.value || element.innerText;

  if (element.hasAttribute('contenteditable')) {
    // Для элементов с contenteditable используем innerText
    element.innerText = text;
  } else {
    // Для обычных input и textarea используем value
    element.value = text;
  }

  // hack React
  const isReactVersion16 = !!element._valueTracker;
  const isReactVersion15 = !!element._valueTracker || !!element._wrapperState;

  if (isReactVersion16 || isReactVersion15) {
    if (isReactVersion15) {
      inputEvent.simulated = true;
      element._wrapperState = { initialValue: lastValue };
    }

    if (isReactVersion16) {
      const tracker = element._valueTracker;
      if (tracker) {
        tracker.setValue(lastValue);
      }
    }
  }

  element.dispatchEvent(inputEvent);
  element.dispatchEvent(changeEvent);

  console.log('Typed text:', text);
}

// Главная функция для старта взаимодействия
function action(selector, method = 'click', text = '') {
  return new Promise((resolve, reject) => {
    const element = document.querySelector(selector);
    if (element) {
      if (method === 'click') {
        clickElement(element);
       resolve('Element found');
      } else if (method === 'tap') {
        tapElement(element);
        resolve('Element found');
      } else if (method === 'pointer') {
        pointer(element);
       resolve('Element found');
      } else if (method === 'type' && text) {
        typeText(element, text);
        resolve('Element found');
      }
    } else {
      console.log('Element not found');
      reject('Element not found');
    }
  });
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}




    function playRepeatedAudio(durationInSeconds) {
    const audio = new Audio();
    audio.src = GM_getResourceText("sound");
    audio.volume = 0.15;
    audio.play();
    const intervalx = setInterval(() => {
        audio.currentTime = 0;
        audio.play();
    }, 2000);
    }



function getEnergyValue() {
  const energyElement = document.querySelector('.user-tap-energy p');
  if (energyElement) {
    const energyText = energyElement.innerText;
    const [currentEnergy] = energyText.split(' / ').map(Number);
    return currentEnergy;
  } else {
    return 0; // Возвращаем значение 1000, если элемент не найден
  }
}

function getPriceValue() {
  const priceElement = document.querySelector('.price-value');
  if (priceElement) {
    const priceText = priceElement.innerText;
    const priceValue = parseInt(priceText.replace('+', ''), 10);
    return priceValue;
  } else {
    return 9999; // Возвращаем 0, если элемент не найден
  }
}




var click=true;


// Главная функция для старта
function startInteracting(selector, method = 'pointer', interval = 500) {
  const intervalId = setInterval(async function() {
	 const currentEnergy = getEnergyValue();
    const priceValue = getPriceValue();
      if (click) {
          const element = document.querySelector(selector);
        if (element) {
          await action(selector, method);
        } else {
          console.log('Element not found:', selector);
        }
      }

   let wait_sum = priceValue*100;
      if (currentEnergy < priceValue && click) {
          click=false;
       }else{
           if (currentEnergy < wait_sum && !click) {
               console.log(`Not enough energy to perform the action wait ${wait_sum} `);
            }
        }
      if (currentEnergy > wait_sum && !click) {
               click=true;
           }
    }, interval);
  // Возвращаем функцию для остановки интервала
  return function stopInteracting() {
    clearInterval(intervalId);
    console.log('Stopped interacting');
  };
}
// Главная функция для старта


// Пример использования
setTimeout(()=>{
 const element = document.querySelector('.user-tap-button-circle');
    if (element){
playRepeatedAudio(2);
const stop = startInteracting('.user-tap-button-circle', 'pointer',150);
}
},10000)


})();

@fontnet1
Copy link

@Atamg1994
"Привет, хотел узнать, то, что ты сделал, это не бан?"
"Hi, I wanted to know, what you made, is it not a ban?"

@fontnet1
Copy link

@Atamg1994
"How long did it take to build this robot? It's really awesome!"

@Atamg1994
Copy link

@Atamg1994 "How long did it take to build this robot? It's really awesome!"

Screenshot_1

Well, I’m already playing decently, there’s no ban yet, and in theory there shouldn’t be a script that emulates a user’s click
In this case, the pressing force is simulated, the pressing position, angle, etc.. also the radius of pressing.. as if you press with different fingers with different forces

I also have a separate plugin that allows you to open the game in full screen

@fontnet1
Copy link

@Atamg1994 Can I have your telegram ID?

@fontnet1
Copy link

I took Auto Clicker because I have profit

@fontnet1
Copy link

I took Auto Clicker because I have profit @Atamg1994

@fontnet1
Copy link

Thank you anyway @Atamg1994

@fontnet1
Copy link

@Atamg1994 Hello, the robot doesn't work anymore, do you have a replacement for it?

@Atamg1994
Copy link

@Atamg1994 Hello, the robot doesn't work anymore, do you have a replacement for it?

they removed one of the elements... so you need to find the getPriceValue function in the script and replace it with this

function getPriceValue() {
      return 15; 
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants