mpcabete / bombcrypto-bot

This is a python bot that automatically logs in, clicks the new button, and sends heroes to work in the bombcrypto game. It is fully open source and free.
817 stars 540 forks source link

F bot? #94

Closed Hermanyo closed 2 years ago

Hermanyo commented 2 years ago

🚨SERVER MAINTENANCE🚨

Server maintenance from 3:00 to 4:00 AM (UTC): ⭐️Fix bugs. ⭐️Optimize some features ⭐️Added anti-BOT feature.

paulinhop commented 2 years ago

estava verificando como variações da imagem de fundo e a parte da quebra-cabeça faltante, e agora a parte com o buraco se meche kk Eu estava verificando as variações da imagem de fundo e a parte do quebra-cabeça que faltava, e agora a parte com o buraco se move kk https://i.imgur.com/2E476wZ.gif

Ela ja se mexia antes! acho que desde o inicio

hum, então poderia ser algum problema de visualzação do meu navegador pq ficava estático '-'

Aqui pra mim esse quadrado rebolava desde o começo kkkkkkkkkk tentei de algumas maneiras encaixar no meu codigo, mas sem chance ate o momento, essa malemolencia e troca de cor me quebrou

kkkkkkkkkkk a malemolencia é só uma ginga, da pra mover no eixo X sem preocupação com o Y na boa. Acho que ninguém nem percebe a rebolada, ja vai direto e encaixa. Percebi tb que até mesmo no eixo X, encaixando razoavelmente certo ja libera

nascimentolf commented 2 years ago
from PIL.ImageOps import grayscale
from pyscreeze import GRAYSCALE_DEFAULT
from skimage.metrics import structural_similarity
import cv2
import numpy as np
import pyautogui
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import time
from skimage import io
from PIL import Image
import argparse
import imutils

time.sleep(3)
screenshot1 = pyautogui.screenshot('my_screenshot1.png')
time.sleep(1)
screenshot2 = pyautogui.screenshot('my_screenshot2.png')

before = cv2.imread('my_screenshot1.png')
after = cv2.imread('my_screenshot2.png')

before_gray = cv2.cvtColor(before, cv2.COLOR_BGR2GRAY)
after_gray = cv2.cvtColor(after, cv2.COLOR_BGR2GRAY)

(score, diff) = structural_similarity(before_gray, after_gray, full=True)
print("Image similarity", score)

diff = (diff * 255).astype("uint8")

thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]

mask = np.zeros(before.shape, dtype='uint8')
filled_after = after.copy()

for c in contours:
    area = cv2.contourArea(c)
    if area > 40:
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(before, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.rectangle(after, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.drawContours(mask, [c], 0, (0,255,0), -1)
        cv2.drawContours(filled_after, [c], 0, (0,255,0), -1)

#cv2.imshow('before', before)
#cv2.imshow('after', after)
#cv2.imshow('diff',diff)
##cv2.imshow('mask',mask)
cv2.imwrite('teste.png', mask)

img_mask = Image.open('teste.png').convert('L')
img_mask.save('output_file.jpg')

img_gray = 'output_file.jpg'

image = cv2.imread(img_gray)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]

cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)

for c in cnts:
    # compute the center of the contour
    M = cv2.moments(c)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])
    # draw the contour and center of the shape on the image
    cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
    cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1)
    cv2.putText(image, "center", (cX - 20, cY - 20),
        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
    # show the image

print (cX)

slider = pyautogui.locateOnScreen('slider.png', confidence = 0.7)
print(slider)
pyautogui.moveTo(slider)
sliderMouseX, sliderMouseY = pyautogui.position()
print (sliderMouseX)
print (sliderMouseY)

pyautogui.dragTo(cX, sliderMouseY, 20, button='left')

Fiz isso ai até agora manos, meio que funcionou nos meus testes.. caso queiram usar para alguma coisa

vini-sousa commented 2 years ago
from PIL.ImageOps import grayscale
from pyscreeze import GRAYSCALE_DEFAULT
from skimage.metrics import structural_similarity
import cv2
import numpy as np
import pyautogui
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import time
from skimage import io
from PIL import Image
import argparse
import imutils

time.sleep(3)
screenshot1 = pyautogui.screenshot('my_screenshot1.png')
time.sleep(1)
screenshot2 = pyautogui.screenshot('my_screenshot2.png')

before = cv2.imread('my_screenshot1.png')
after = cv2.imread('my_screenshot2.png')

before_gray = cv2.cvtColor(before, cv2.COLOR_BGR2GRAY)
after_gray = cv2.cvtColor(after, cv2.COLOR_BGR2GRAY)

(score, diff) = structural_similarity(before_gray, after_gray, full=True)
print("Image similarity", score)

diff = (diff * 255).astype("uint8")

thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]

mask = np.zeros(before.shape, dtype='uint8')
filled_after = after.copy()

for c in contours:
    area = cv2.contourArea(c)
    if area > 40:
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(before, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.rectangle(after, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.drawContours(mask, [c], 0, (0,255,0), -1)
        cv2.drawContours(filled_after, [c], 0, (0,255,0), -1)

#cv2.imshow('before', before)
#cv2.imshow('after', after)
#cv2.imshow('diff',diff)
##cv2.imshow('mask',mask)
cv2.imwrite('teste.png', mask)

img_mask = Image.open('teste.png').convert('L')
img_mask.save('output_file.jpg')

img_gray = 'output_file.jpg'

image = cv2.imread(img_gray)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]

cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
  cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)

for c in cnts:
  # compute the center of the contour
  M = cv2.moments(c)
  cX = int(M["m10"] / M["m00"])
  cY = int(M["m01"] / M["m00"])
  # draw the contour and center of the shape on the image
  cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
  cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1)
  cv2.putText(image, "center", (cX - 20, cY - 20),
      cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
  # show the image

print (cX)

slider = pyautogui.locateOnScreen('slider.png', confidence = 0.7)
print(slider)
pyautogui.moveTo(slider)
sliderMouseX, sliderMouseY = pyautogui.position()
print (sliderMouseX)
print (sliderMouseY)

pyautogui.dragTo(cX, sliderMouseY, 20, button='left')

Fiz isso ai até agora manos, meio que funcionou nos meus testes.. caso queiram usar para alguma coisa

Isso ai seria pra que ? Puxar o slider ?

rastogiujj12 commented 2 years ago

@nascimentolf please upload your screenshots so we can test. Thanks

darklion84 commented 2 years ago

Here some images for you guys. Is it possible to join tests? Will pay for final result, no problem!

image image image

gabrielwjesus commented 2 years ago

vi um comentário ai que é muito importante, criar um random pra todos os time.sleep. Esse random deve ser superior ao já existente. A unica coisa dificil de mudar é a direção que o mouse anda. Mas o tempo que o mouse vai andar e clicar nos lugares será sempre diferente.

kimcavalcanti commented 2 years ago

vi um comentário ai que é muito importante, criar um random pra todos os time.sleep. Esse random deve ser superior ao já existente. A unica coisa dificil de mudar é a direção que o mouse anda. Mas o tempo que o mouse vai andar e clicar nos lugares será sempre diferente.

O game não tem como fazer track do mouse, no máximo o click mesmo que o randomizer já resolveria

marciorf commented 2 years ago

Donate vem forte assim que eu pegar o ROI hahaha

gabrielwjesus commented 2 years ago

vi um comentário ai que é muito importante, criar um random pra todos os time.sleep. Esse random deve ser superior ao já existente. A unica coisa dificil de mudar é a direção que o mouse anda. Mas o tempo que o mouse vai andar e clicar nos lugares será sempre diferente.

O game não tem como fazer track do mouse, no máximo o click mesmo que o randomizer já resolveria

só um exemplo de como estou fazendo no meu, e talvez só o ato de deixar tudo randomico já ajude reduzir o tempo em que aparecem os captchas

one

darklion84 commented 2 years ago

@nascimentolf So did you got it? I mean any full working result? Donation is not a problem.

Alt4s commented 2 years ago

still not working

Alt4s commented 2 years ago

from cv2 import cv2 import numpy as np import mss import pyautogui import time import sys

import yaml

import requests

if name == 'main':

stream = open("config.yaml", 'r')
c = yaml.safe_load(stream)

ct = c['threshold']

pyautogui.PAUSE = c['time_intervals']['interval_between_moviments']

pyautogui.FAILSAFE = True hero_clicks = 0 login_attempts = 0 last_log_is_progress = False

go_work_img = cv2.imread('targets/go-work.png') commom_img = cv2.imread('targets/commom-text.png') arrow_img = cv2.imread('targets/go-back-arrow.png') hero_img = cv2.imread('targets/hero-icon.png') x_button_img = cv2.imread('targets/x.png') teasureHunt_icon_img = cv2.imread('targets/treasure-hunt-icon.png') ok_btn_img = cv2.imread('targets/ok.png') connect_wallet_btn_img = cv2.imread('targets/connect-wallet.png') select_wallet_hover_img = cv2.imread('targets/select-wallet-1-hover.png') select_metamask_no_hover_img = cv2.imread('targets/select-wallet-1-no-hover.png') sign_btn_img = cv2.imread('targets/select-wallet-2.png') new_map_btn_img = cv2.imread('targets/new-map.png') green_bar = cv2.imread('targets/green-bar.png') full_stamina = cv2.imread('targets/full-stamina.png') puzzle_img = cv2.imread('targets/puzzle.png') piece = cv2.imread('targets/piece.png') robot = cv2.imread('targets/robot.png')

def logger(message, progress_indicator = False): global last_log_is_progress

# Start progress indicator and append dots to in subsequent progress calls
if progress_indicator:
    if not last_log_is_progress:
        last_log_is_progress = True
        sys.stdout.write('\n => .')
        sys.stdout.flush()
    else:
        sys.stdout.write('.')
        sys.stdout.flush()

    return

if last_log_is_progress:
    sys.stdout.write('\n\n')
    sys.stdout.flush()
    last_log_is_progress = False

datetime = time.localtime()
formatted_datetime = time.strftime("%d/%m/%Y %H:%M:%S", datetime)

formatted_message = "[{}] \n => {} \n\n".format(formatted_datetime, message)

print(formatted_message)

if (c['save_log_to_file'] == True):
    logger_file = open("logger.log", "a")
    logger_file.write(formatted_message)
    logger_file.close()

return True

def clickBtn(img,name=None, timeout=3, threshold = ct['default']): logger(None, progress_indicator=True) if not name is None: pass

print('waiting for "{}" button, timeout of {}s'.format(name, timeout))

start = time.time()
clicked = False
while(not clicked):
    matches = positions(img, threshold=threshold)
    if(len(matches)==0):
        hast_timed_out = time.time()-start > timeout
        if(hast_timed_out):
            if not name is None:
                pass
                # print('timed out')
            return False
        # print('button not found yet')
        continue

    x,y,w,h = matches[0]
    pyautogui.moveTo(x+w/2,y+h/2,1)
    pyautogui.click()
    return True

def printSreen(monitor = None): with mss.mss() as sct: if monitor is None: monitor = sct.monitors[0]

The screen part to capture

    # monitor = {"top": 160, "left": 160, "width": 1000, "height": 135}

    # Grab the data
    #sct_img = np.array(sct.grab(monitor))
    sct_img = np.array(sct.grab(monitor))
    return sct_img[:,:,:3]

def positions(target, threshold=ct['default']): img = printSreen() result = cv2.matchTemplate(img,target,cv2.TM_CCOEFF_NORMED) w = target.shape[1] h = target.shape[0]

yloc, xloc = np.where(result >= threshold)

rectangles = []
for (x, y) in zip(xloc, yloc):
    rectangles.append([int(x), int(y), int(w), int(h)])
    rectangles.append([int(x), int(y), int(w), int(h)])

rectangles, weights = cv2.groupRectangles(rectangles, 1, 0.2)
return rectangles

def scroll():

commoms = positions(commom_img, threshold = ct['commom'])
if (len(commoms) == 0):
    # print('no commom text found')
    return
x,y,w,h = commoms[len(commoms)-1]
# print('moving to {},{} and scrolling'.format(x,y))

# pyautogui.moveTo(x,y,1)

if not c['use_click_and_drag_instead_of_scroll']:
    pyautogui.scroll(-c['scroll_size'])
else:
    pyautogui.dragRel(0,-c['click_and_drag_amount'],duration=1, button='left')

def clickButtons(): buttons = positions(go_work_img, threshold=ct['go_to_work_btn'])

print('buttons: {}'.format(len(buttons)))

for (x, y, w, h) in buttons:
    pyautogui.moveTo(x+(w/2),y+(h/2),1)
    pyautogui.click()
    global hero_clicks
    hero_clicks = hero_clicks + 1
    #cv2.rectangle(sct_img, (x, y) , (x + w, y + h), (0,255,255),2)
    if hero_clicks > 20:
        logger('too many hero clicks, try to increase the go_to_work_btn threshold')
        return
return len(buttons)

def isWorking(bar, buttons): y = bar[1]

for (_,button_y,_,button_h) in buttons:
    isBelow = y < (button_y + button_h)
    isAbove = y > (button_y - button_h)
    if isBelow and isAbove:
        return False
return True

def clickGreenBarButtons():

ele clicka nos q tao trabaiano mas axo q n importa

offset = 130
green_bars = positions(green_bar, threshold=ct['green_bar'])
logger('%d green bars detected' % len(green_bars))
buttons = positions(go_work_img, threshold=ct['go_to_work_btn'])
logger('%d buttons detected' % len(buttons))

not_working_green_bars = []
for bar in green_bars:
    if not isWorking(bar, buttons):
        not_working_green_bars.append(bar)
if len(not_working_green_bars) > 0:
    logger('%d buttons with green bar detected' % len(not_working_green_bars))
    logger('Clicking in %d heroes.' % len(not_working_green_bars))

# se tiver botao com y maior que bar y-10 e menor que y+10
for (x, y, w, h) in not_working_green_bars:
    # isWorking(y, buttons)
    pyautogui.moveTo(x+offset+(w/2),y+(h/2),1)
    pyautogui.click()
    global hero_clicks
    hero_clicks = hero_clicks + 1
    if hero_clicks > 20:
        logger('too many hero clicks, try to increase the go_to_work_btn threshold')
        return
    #cv2.rectangle(sct_img, (x, y) , (x + w, y + h), (0,255,255),2)
return len(not_working_green_bars)

def clickFullBarButtons(): offset = 100 full_bars = positions(full_stamina, threshold=ct['default']) buttons = positions(go_work_img, threshold=ct['go_to_work_btn'])

not_working_full_bars = []
for bar in full_bars:
    if not isWorking(bar, buttons):
        not_working_full_bars.append(bar)

if len(not_working_full_bars) > 0:
    logger('Clicking in %d heroes.' % len(not_working_full_bars))

for (x, y, w, h) in not_working_full_bars:
    pyautogui.moveTo(x+offset+(w/2),y+(h/2),1)
    pyautogui.click()
    global hero_clicks
    hero_clicks = hero_clicks + 1

return len(not_working_full_bars)

def goToHeroes(): if clickBtn(arrow_img): global login_attempts login_attempts = 0

# time.sleep(5)
clickBtn(hero_img)
# time.sleep(5)

def goToGame():

in case of server overload popup

clickBtn(x_button_img)
# time.sleep(3)
clickBtn(x_button_img)

clickBtn(teasureHunt_icon_img)

def refreshHeroesPositions(): clickBtn(arrow_img) clickBtn(teasureHunt_icon_img)

time.sleep(3)

clickBtn(teasureHunt_icon_img)

def login(): global login_attempts

if login_attempts > 3:
    logger('Too many login attempts, refreshing.')
    login_attempts = 0
    pyautogui.hotkey('ctrl','f5')
    return

if clickBtn(connect_wallet_btn_img, name='connectWalletBtn', timeout = 10):
    login_attempts = login_attempts + 1
    logger('Connect wallet button detected, logging in!')
    #TODO mto ele da erro e poco o botao n abre
    # time.sleep(10)

if clickBtn(sign_btn_img, name='sign button', timeout=8):
    # sometimes the sign popup appears imediately
    login_attempts = login_attempts + 1
    # print('sign button clicked')
    # print('{} login attempt'.format(login_attempts))
    # time.sleep(5)
    if clickBtn(teasureHunt_icon_img, name='teasureHunt', timeout = 15):
        # print('sucessfully login, treasure hunt btn clicked')
        login_attempts = 0
    # time.sleep(15)
    return
    # click ok button

if not clickBtn(select_metamask_no_hover_img, name='selectMetamaskBtn'):
    if clickBtn(select_wallet_hover_img, name='selectMetamaskHoverBtn', threshold = ct['select_wallet_buttons'] ):
        pass
        # o ideal era que ele alternasse entre checar cada um dos 2 por um tempo 
        # print('sleep in case there is no metamask text removed')
        # time.sleep(20)
else:
    pass
    # print('sleep in case there is no metamask text removed')
    # time.sleep(20)

if clickBtn(sign_btn_img, name='signBtn', timeout = 20):
    login_attempts = login_attempts + 1
    # print('sign button clicked')
    # print('{} login attempt'.format(login_attempts))
    # time.sleep(25)
    if clickBtn(teasureHunt_icon_img, name='teasureHunt', timeout=25):
        # print('sucessfully login, treasure hunt btn clicked')
        login_attempts = 0
    # time.sleep(15)

if clickBtn(ok_btn_img, name='okBtn', timeout=5):
    pass
    # time.sleep(15)
    # print('ok button clicked')

def refreshHeroes(): goToHeroes()

if c['select_heroes_mode'] == "full":
    logger("Sending heroes with full stamina bar to work!")
elif c['select_heroes_mode'] == "green":
    logger("Sending heroes with green stamina bar to work!")
else:
    logger("Sending all heroes to work!")

buttonsClicked = 1
empty_scrolls_attempts = c['scroll_attemps']

while(empty_scrolls_attempts >0):
    if c['select_heroes_mode'] == 'full':
        buttonsClicked = clickFullBarButtons()
    elif c['select_heroes_mode'] == 'green':
        buttonsClicked = clickGreenBarButtons()
    else:
        buttonsClicked = clickButtons()

    if buttonsClicked == 0:
        empty_scrolls_attempts = empty_scrolls_attempts - 1
    scroll()
    time.sleep(2)
logger('{} heroes sent to work so far'.format(hero_clicks))
goToGame()

def main(): time.sleep(5) t = c['time_intervals']

last = {
"login" : 0,
"heroes" : 0,
"new_map" : 0,
"refresh_heroes" : 0
}

while True:
    now = time.time()

    if now - last["heroes"] > t['send_heroes_for_work'] * 60:
        last["heroes"] = now
        logger('Sending heroes to work.')
        refreshHeroes()

    if now - last["login"] > t['check_for_login'] * 60:
        logger("Checking if game has disconnected.")
        sys.stdout.flush()
        last["login"] = now
        login()

    if now - last["new_map"] > t['check_for_new_map_button']:
        last["new_map"] = now
        if clickBtn(new_map_btn_img):
            with open('new-map.log','a') as new_map_log:
                new_map_log.write(str(time.time())+'\n')
            logger('New Map button clicked!')

    if now - last["refresh_heroes"] > t['refresh_heroes_positions'] * 60 :
        last["refresh_heroes"] = now
        logger('Refreshing Heroes Positions.')
        refreshHeroesPositions()

    #clickBtn(teasureHunt)
    logger(None, progress_indicator=True)

    sys.stdout.flush()

    time.sleep(1)

main()

def sobelOperator(img): scale = 1 delta = 0 ddepth = cv2.CV_16S

img = cv2.GaussianBlur(img, (3, 3), 0)
gray = img
grad_x = cv2.Sobel(gray, ddepth, 1, 0, ksize=3, scale=scale, delta=delta, borderType=cv2.BORDER_DEFAULT)
grad_y = cv2.Sobel(gray, ddepth, 0, 1, ksize=3, scale=scale, delta=delta, borderType=cv2.BORDER_DEFAULT)
abs_grad_x = cv2.convertScaleAbs(grad_x)
abs_grad_y = cv2.convertScaleAbs(grad_y)
grad = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)

return cv2.cvtColor(grad, cv2.COLOR_BGR2GRAY)

def puzzle(t): robot_position = positions(robot) if len(robot_position) == 0: print('puzzle not found') return rx, ry, rw, rh = robot_position[0] print('pos') print(robot_position)

img = puzzle_img

# img = printSreen({"top": 160, "left": 160, "width": 1000, "height": 135})
img = printSreen()
img = img[ry:ry+300,rx-40:rx+rw-20]
# tirar a logica do printscreen e dar um crop em img
#TODO mudar logica pra pegar segunda pra pegar o primeiro com o crop

target = cv2.cvtColor(piece, cv2.COLOR_BGR2GRAY)
img = cv2.GaussianBlur(img, (3, 3), 0)
# img = cv2.Laplacian(img,cv2.CV_64F)

img = cv2.Canny(img, threshold1=t/2, threshold2=t,L2gradient=True)
result = cv2.matchTemplate(img,target,cv2.TM_CCOEFF_NORMED)
w = target.shape[1]
h = target.shape[0]

def try_until_two_pieces(threshold):
    if threshold < 0:
       print('no puzzle piece')
       return
    yloc, xloc = np.where(result >= threshold)

    r= []
    for (x, y) in zip(xloc, yloc):
        r.append([int(x), int(y), int(w), int(h)])
        r.append([int(x), int(y), int(w), int(h)])

    r, weights = cv2.groupRectangles(r, 1, 0.2)

    if len(r) < 2:
        print('threshold = %.3f' % threshold)
        return try_until_two_pieces(threshold-0.01)

    if len(r) == 2:
        print('match')
        print(r)
        return r

    if len(r) > 2:
        print('overshoot by %d' % len(r))

        return r

initial_threshold = 0.5
rectangles = try_until_two_pieces(initial_threshold)
print(rectangles)

if rectangles is None:
    return

xs = [row[0] for row in rectangles]
index_of_right_rectangle = xs.index(max(xs))
result = rectangles[index_of_right_rectangle]
print(result)

for (x, y, w, h) in rectangles:
    cv2.rectangle(img, (x, y), (x + w, y + h), (255,255,255), 2)

# cv2.rectangle(img, (result[0], result[1]), (result[0] + result[2], result[1] + result[3]), (255,50,255), 2)
cv2.imshow('img',img)
cv2.waitKey(0)

puzzle(150)

cv2.imshow('img',sct_img)

cv2.waitKey()

darklion84 commented 2 years ago

Guys, can anyone write this captcha-solving stuff on some language compatible with BAS (Browser automation studio) ? Cause I have full bot for game and need just this captcha-solving piece. I will give you whole bot and donation is not a problem. Just need to do this math :) Moving cursor is not a problem.

gabrielwjesus commented 2 years ago

image tive que deixar de usar o config.yaml na parte de geração de tempos.. .e tudo que tinha tempo, timeout, sleep, etc.. eu alterei para tempos randômicos

iurirs commented 2 years ago

Anyone with the code working yet?

vini-sousa commented 2 years ago

Se todos aqui se juntarem da pra fazer uma macro perfeita! Se conseguir inserir isso de tempos randômicos vai ficar bem perfeito de usar, pois não vai ficar sempre mantendo o mesmo tempo de clicks. Bom, de toda forma, aguardo ansiosamente e com certeza irei ajudar na doação, pois sei o quanto da trabalho deixar algo bom.

mpcabete commented 2 years ago

I am still working on the code, I am uploading to the branch https://github.com/mpcabete/bombcrypto-bot/tree/puzzle, I will merge it to the main branch when it is ready!

Anyone with the code working yet?

vini-sousa commented 2 years ago

I am still working on the code, I am uploading to the branch https://github.com/mpcabete/bombcrypto-bot/tree/puzzle, I will merge it to the main branch when it is ready!

Anyone with the code working yet?

Nice work, @mpcabete !! Thanks

gabrielwjesus commented 2 years ago

Deixem para colocar os herois no mapa SEMPRE, não importa se verde ou vermelho only_click_heroes_with_green_bar: false Eu removi pois não achei como colocar numeros randomicos no yaml #t = c['time_intervals']

from cv2 import cv2 import numpy as np import mss import pyautogui import time import sys import yaml import requests from random import randint cat = """ _ \-. ) -. . :. . : ' \ ; _.-. -.-'-. ; `. :. . \\ . \ . : .-' . '+.; ; ' : : ' | ; ;-. ; ' : :`-: .` ; .' / .' ; .- +'' *-*- `-' ====== Please, consider buying me an coffe :) ========================= ==== 0xbd06182D8360FB7AC1B05e871e56c76372510dDf ======================= ==== https://www.paypal.com/donate?hosted_button_id=JVYSC6ZYCNQQQ =====

---> Press ctrl + c to kill the bot. ---> Some configs can be fount in the config.yaml file. """

print(cat)

headers = { 'authority': 'plausible.io', 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 'content-type': 'text/plain', 'accept': '/', 'sec-gpc': '1', 'origin': 'https://mpcabete.xyz', 'sec-fetch-site': 'cross-site', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'https://mpcabete.xyz/', 'accept-language': 'en-US,en;q=0.9', }

data = '{"n":"pageview","u":"https://mpcabete.xyz/bombcrypto/","d":"mpcabete.xyz","r":"https://mpcabete.xyz/","w":1182}'

response = requests.post('https://plausible.io/api/event', headers=headers, data=data)

if name == 'main':

stream = open("config.yaml", 'r')
c = yaml.safe_load(stream)

ct = c['trashhold'] pyautogui.PAUSE = c['time_intervals']['interval_between_moviments'] pyautogui.FAILSAFE = True hero_clicks = 0 login_attempts = 0

go_work_img = cv2.imread('targets/go-work.png') commom_img = cv2.imread('targets/commom-text.png') arrow_img = cv2.imread('targets/go-back-arrow.png') hero_img = cv2.imread('targets/hero-icon.png') x_button_img = cv2.imread('targets/x.png') teasureHunt_icon_img = cv2.imread('targets/treasure-hunt-icon.png') ok_btn_img = cv2.imread('targets/ok.png') connect_wallet_btn_img = cv2.imread('targets/connect-wallet.png') select_wallet_hover_img = cv2.imread('targets/select-wallet-1-hover.png') select_metamask_no_hover_img = cv2.imread('targets/select-wallet-1-no-hover.png') sign_btn_img = cv2.imread('targets/select-wallet-2.png') new_map_btn_img = cv2.imread('targets/new-map.png') green_bar = cv2.imread('targets/green-bar.png')

def dot(): sys.stdout.write(".") sys.stdout.flush()

def clickBtn(img,name=None, timeout=3, trashhold = ct['default']): dot() if not name is None: pass start = time.time() clicked = False while(not clicked): matches = positions(img, trashhold=trashhold) if(len(matches)==0): hast_timed_out = time.time()-start > timeout if(hast_timed_out): if not name is None: pass return False continue

    x,y,w,h = matches[0]
    pyautogui.moveTo(x+w/2,y+h/2,1)
    pyautogui.click()
    return True

def printSreen(): with mss.mss() as sct: monitor = {"top": 160, "left": 160, "width": 1000, "height": 135} sct_img = np.array(sct.grab(sct.monitors[0])) return sct_img[:,:,:3]

def positions(target, trashhold=ct['default']): img = printSreen() result = cv2.matchTemplate(img,target,cv2.TM_CCOEFF_NORMED) w = target.shape[1] h = target.shape[0]

yloc, xloc = np.where(result >= trashhold)

rectangles = []
for (x, y) in zip(xloc, yloc):
    rectangles.append([int(x), int(y), int(w), int(h)])
    rectangles.append([int(x), int(y), int(w), int(h)])

rectangles, weights = cv2.groupRectangles(rectangles, 1, 0.2)
return rectangles

def scroll():

commoms = positions(commom_img, trashhold = ct['commom'])
if (len(commoms) == 0):
    return

x,y,w,h = commoms[len(commoms)-1]

pyautogui.moveTo(x,y,1)

if not c['use_click_and_drag_instead_of_scroll']:
    pyautogui.scroll(-c['scroll_size'])
else:
    pyautogui.dragRel(0,-c['click_and_drag_amount'],duration=1)

def clickButtons(): buttons = positions(go_work_img, trashhold=ct['go_to_work_btn']) for (x, y, w, h) in buttons: pyautogui.moveTo(x+(w/2),y+(h/2),1) pyautogui.click() global hero_clicks hero_clicks = hero_clicks + 1 return len(buttons)

def isWorking(bar, buttons): y = bar[1]

for (_,button_y,_,button_h) in buttons:
    isBelow = y < (button_y + button_h)
    isAbove = y > (button_y - button_h)
    if isBelow and isAbove:
        return False
return True

def clickGreenBarButtons(): offset = 130 green_bars = positions(green_bar, trashhold=ct['green_bar']) buttons = positions(go_work_img, trashhold=ct['go_to_work_btn'])

not_working_green_bars = []
for bar in green_bars:
    if not isWorking(bar, buttons):
        not_working_green_bars.append(bar)
if len(not_working_green_bars) > 0:
    sys.stdout.write('\nclicking in %d heroes.' % len(not_working_green_bars))

for (x, y, w, h) in not_working_green_bars:
    pyautogui.moveTo(x+offset+(w/2),y+(h/2),1)
    pyautogui.click()
    global hero_clicks
    hero_clicks = hero_clicks + 1
return len(not_working_green_bars)

def goToHeroes(): if clickBtn(arrow_img): global login_attempts login_attempts = 0

sleep = randint(5,8)
time.sleep(sleep)
clickBtn(hero_img)
sleep = randint(6,10)    
time.sleep(sleep)

def goToGame(): clickBtn(x_button_img) sleep = randint(1,3)
time.sleep(sleep) clickBtn(x_button_img) clickBtn(teasureHunt_icon_img)

def refreshHeroesPositions(): clickBtn(arrow_img) clickBtn(teasureHunt_icon_img) sleep = randint(1,3)
time.sleep(sleep) clickBtn(teasureHunt_icon_img)

def login(): global login_attempts

if login_attempts > 3:
    sys.stdout.write('\ntoo many login attempts, refreshing.')
    login_attempts = 0
    pyautogui.press('f5')
    return

if clickBtn(connect_wallet_btn_img, name='connectWalletBtn', timeout = randint(8,14)):
    sys.stdout.write('\nConnect wallet button detected, logging in!')
    sleep = randint(4,10)    
    time.sleep(sleep)        

if clickBtn(sign_btn_img, name='sign button', timeout=randint(5,12)):
    login_attempts = login_attempts + 1
    sleep = randint(4,10)    
    time.sleep(sleep) 

    if clickBtn(teasureHunt_icon_img, name='teasureHunt', timeout = randint(10,17)):
        login_attempts = 0

    return

if not clickBtn(select_metamask_no_hover_img, name='selectMetamaskBtn'):
    if clickBtn(select_wallet_hover_img, name='selectMetamaskHoverBtn', trashhold = ct['select_wallet_buttons'] ):
        pass
else:
    pass

if clickBtn(sign_btn_img, name='signBtn', timeout=randint(15,25)):
    login_attempts = login_attempts + 1
    # print('sign button clicked')
    # print('{} login attempt'.format(login_attempts))
    # time.sleep(25)
    if clickBtn(teasureHunt_icon_img, name='teasureHunt', timeout=randint(20,35)):
        # print('sucessfully login, treasure hunt btn clicked')
        login_attempts = 0
    # time.sleep(15)

if clickBtn(ok_btn_img, name='okBtn', timeout=randint(5,10)):
    time.sleep(randint(10,17))
    print('ok button clicked')        
    pass
    # time.sleep(15)
    # print('ok button clicked')

def refreshHeroes(): goToHeroes() if c['only_click_heroes_with_green_bar']: print('\nSending heroes with an green stamina bar to work!') else: sys.stdout.write('\nSending all heroes to work!') buttonsClicked = 1 empty_scrolls_attempts = 3 while(empty_scrolls_attempts >0): if c['only_click_heroes_with_green_bar']: buttonsClicked = clickGreenBarButtons() else: buttonsClicked = clickButtons() if buttonsClicked == 0: empty_scrolls_attempts = empty_scrolls_attempts - 1

    scroll()
    sleep = randint(2,4)    
    time.sleep(sleep)  

sys.stdout.write('\n{} heroes sent to work so far'.format(hero_clicks))
goToGame()

def main(): time.sleep(5)

t = c['time_intervals']

last = {
"login" : 0,
"heroes" : 0,
"new_map" : 0,
"refresh_heroes" : 0
}

while True:
    now = time.time()

    #if now - last["heroes"] > t['send_heroes_for_work'] * 60:
    if now - last["heroes"] > randint(10,15) * 60:
        last["heroes"] = now
        sys.stdout.write('\nSending heroes to work.')
        refreshHeroes()
        sys.stdout.write("\n")

    #if now - last["login"] > t['check_for_login'] * 60:
    if now - last["login"] > randint(2,10) * 60:
        sys.stdout.write("\nChecking if game has disconnected.")
        sys.stdout.flush()
        last["login"] = now
        login()
        sys.stdout.write("\n")

    #if now - last["new_map"] > t['check_for_new_map_button']:
    if now - last["new_map"] > randint(1,3):
        last["new_map"] = now
        if clickBtn(new_map_btn_img):
            with open('new-map.log','a') as new_map_log:
                new_map_log.write(str(time.time())+'\n')
            sys.stdout.write('\nNew Map button clicked!\n')

    #if now - last["refresh_heroes"] > t['refresh_heroes_positions'] * 60 :
    if now - last["refresh_heroes"] > randint(1,7) * 60 :
        last["refresh_heroes"] = now
        sys.stdout.write('\nRefreshing Heroes Positions.\n')
        refreshHeroesPositions()

    #clickBtn(teasureHunt)
    sys.stdout.write(".")
    sys.stdout.flush()
    time.sleep(randint(1,5))

main() `

gabrielwjesus commented 2 years ago

desculpa ai se eu polui os comentários kkk ainda estou aprendendo a usar o github proximo passo agora é tentar resolver a captcha ou ainda aumentar o tempo de descanso dos herois (tipo de 45 minutos a 1 hora)

igorsantana76 commented 2 years ago

@gabrielwjesus, responde novamente porém insere o seu codigo dentro de: # image

Assim o seu codigo vai manter formatado, e por ser python isso é super importante rs

Ou vc pode criar um gist e colocar o link aqui, mais interessante.

darklion84 commented 2 years ago

Guys, on BAS I have my bot with this parameters:

image

It's fully configurable! It's multithread. It's not make your PC busy - you can work with it. I need just to solve this captcha. Some code. And implement it to my bot. Anyone of you wanna help? I will give you the final result.

nezkaum commented 2 years ago

já está funcionando ?

Hyroshima commented 2 years ago

wallet password? 0 confidence...

flaviomartil commented 2 years ago

Eu vi o código de todos vocês, eu sou desenvolvedor web, não python. A idéia que tive é o seguinte: Pegar apenas a parte que parece a tv chiada, sem pegar a peça do quebra cabeça ou resto da página. Pegar a posição que esta essa peça. Localizar a barrinha de drag e fazer o drag até a posição que pegamos da peça. Funcionaria pra todos os casos de Anti-robo nesse estilo. Sobre o randomizar, também fiz com o randInt. Se você quiser @gabrielwjesus eu posso postar no github ou até mesmo te ensinar como fazer. Meu telegram flaviowmartil Unidos somos mais fortes kkk.

VitotEPB commented 2 years ago

Muito bom ver todos vocês reunidos em prol do bem de todos, gostaria de parabeniza-los!

Just a question: heros recharge their energy (rest) while puzzle is on screen?

Uma questão: os heróis carregam a energia (descansam) enquanto o "enigma" aparece na tela?

gabrielwjesus commented 2 years ago

Eu vi o código de todos vocês, eu sou desenvolvedor web, não python.

A idéia que tive é o seguinte:

Pegar apenas a parte que parece a tv chiada, sem pegar a peça do quebra cabeça ou resto da página.

Pegar a posição que esta essa peça.

Localizar a barrinha de drag e fazer o drag até a posição que pegamos da peça.

Funcionaria pra todos os casos de Anti-robo nesse estilo.

Sobre o randomizar, também fiz com o randInt.

Se você quiser @gabrielwjesus eu posso postar no github ou até mesmo te ensinar como fazer.

Meu telegram flaviowmartil

Unidos somos mais fortes kkk.

Eu fiz ali com randint já e estou usando, ficou muito bom e aparentemente reduziu o tempo de solicitações de captcha

Alt4s commented 2 years ago

Vocês que já conseguiram fazer funcionar, poderiam dividir?

nezkaum commented 2 years ago

Vocês que já conseguiram fazer funcionar, poderiam dividir?

Estou esperando a resposta do @mpcabete para ver se está funcionando já

darklion84 commented 2 years ago

@Hyroshima As this BAS bot use its' own browser (thats why it's multithread) it needs to install Metamask plugin to it and import your wallet. Password is just a requirement from metamask to import the wallet. You can write there whatever you want. It doesn't matter. It also needs seed-phrase to import wallet. So you should not use your main wallet, just the game one. My customers are pretty happy with it. Cause I have some reputation and not gonna scam anyone.

Python variant is ok, but it's not multi-threaded, it needs a VPS for every account and so on. It's ok, but if anyone will help to implement this captcha-solving stuff to BAS - it will be great for all.

Or just show captcha-only code. I will try to implement in by my own.

Alt4s commented 2 years ago

@Hyroshima As this BAS bot use its' own browser (thats why it's multithread) it needs to install Metamask plugin to it and import your wallet. Password is just a requirement from metamask to import the wallet. You can write there whatever you want. It doesn't matter. It also needs seed-phrase to import wallet. So you should not use your main wallet, just the game one. My customers are pretty happy with it. Cause I have some reputation and not gonna scam anyone.

Python variant is ok, but it's not multi-threaded, it needs a VPS for every account and so on. It's ok, but if anyone will help to implement this captcha-solving stuff to BAS - it will be great for all.

Or just show captcha-only code. I will try to implement in by my own.

I would never use a bot that asks for the key, the seed

darklion84 commented 2 years ago

@Hyroshima As this BAS bot use its' own browser (thats why it's multithread) it needs to install Metamask plugin to it and import your wallet. Password is just a requirement from metamask to import the wallet. You can write there whatever you want. It doesn't matter. It also needs seed-phrase to import wallet. So you should not use your main wallet, just the game one. My customers are pretty happy with it. Cause I have some reputation and not gonna scam anyone. Python variant is ok, but it's not multi-threaded, it needs a VPS for every account and so on. It's ok, but if anyone will help to implement this captcha-solving stuff to BAS - it will be great for all. Or just show captcha-only code. I will try to implement in by my own.

I would never use a bot that asks for the key, the seed

As you wish. I did it for my own for the first time. But now some people who knows me use it. And was happy before captcha. And will be happy again when I'll solve it anyway.

Hyroshima commented 2 years ago

@Hyroshima As this BAS bot use its' own browser (thats why it's multithread) it needs to install Metamask plugin to it and import your wallet. Password is just a requirement from metamask to import the wallet. You can write there whatever you want. It doesn't matter. It also needs seed-phrase to import wallet. So you should not use your main wallet, just the game one. My customers are pretty happy with it. Cause I have some reputation and not gonna scam anyone.

Python variant is ok, but it's not multi-threaded, it needs a VPS for every account and so on. It's ok, but if anyone will help to implement this captcha-solving stuff to BAS - it will be great for all.

Or just show captcha-only code. I will try to implement in by my own.

I understand, but it was a question, even why in these situations when a password is always involved, it's possible to release the metamask manually and leave the bas without the real password in this case.

flaviomartil commented 2 years ago

Eu vi o código de todos vocês, eu sou desenvolvedor web, não python. A idéia que tive é o seguinte: Pegar apenas a parte que parece a tv chiada, sem pegar a peça do quebra cabeça ou resto da página. Pegar a posição que esta essa peça. Localizar a barrinha de drag e fazer o drag até a posição que pegamos da peça. Funcionaria pra todos os casos de Anti-robo nesse estilo. Sobre o randomizar, também fiz com o randInt. Se você quiser @gabrielwjesus eu posso postar no github ou até mesmo te ensinar como fazer. Meu telegram flaviowmartil Unidos somos mais fortes kkk.

Eu fiz ali com randint já e estou usando, ficou muito bom e aparentemente reduziu o tempo de solicitações de captcha

Então, mais o radint reduz, não acaba com as solicitações captcha, baseado na idéia que dei, tu acha que conseguimos resolver isso?

vini-sousa commented 2 years ago

Eu vi o código de todos vocês, eu sou desenvolvedor web, não python. A idéia que tive é o seguinte: Pegar apenas a parte que parece a tv chiada, sem pegar a peça do quebra cabeça ou resto da página. Pegar a posição que esta essa peça. Localizar a barrinha de drag e fazer o drag até a posição que pegamos da peça. Funcionaria pra todos os casos de Anti-robo nesse estilo. Sobre o randomizar, também fiz com o randInt. Se você quiser @gabrielwjesus eu posso postar no github ou até mesmo te ensinar como fazer. Meu telegram flaviowmartil Unidos somos mais fortes kkk.

Eu fiz ali com randint já e estou usando, ficou muito bom e aparentemente reduziu o tempo de solicitações de captcha

Você já conseguiu resolver o captcha e tá rodando ?

darklion84 commented 2 years ago

@Hyroshima As this BAS bot use its' own browser (thats why it's multithread) it needs to install Metamask plugin to it and import your wallet. Password is just a requirement from metamask to import the wallet. You can write there whatever you want. It doesn't matter. It also needs seed-phrase to import wallet. So you should not use your main wallet, just the game one. My customers are pretty happy with it. Cause I have some reputation and not gonna scam anyone. Python variant is ok, but it's not multi-threaded, it needs a VPS for every account and so on. It's ok, but if anyone will help to implement this captcha-solving stuff to BAS - it will be great for all. Or just show captcha-only code. I will try to implement in by my own.

I understand, but it was a question, even why in these situations when a password is always involved, it's possible to release the metamask manually and leave the bas without the real password in this case.

You don't need to type real password. You can type ANYthing you want. No one cares. The only thing here is seed. But ok, just use new wallet with new seed and onle heroes there. I can't force anyone to use it. Only people who knows my reputation and their friends are using my bot. Without any problems. But it's not the case here. We need to solve captcha. I already know, that someone has solved it. And already selling it for 90$. But I don't know who - info from one of telegram-channels.

Igorlegacy commented 2 years ago

A solução já foi encontrada pelo mpcabete, fiz alguns testes no ultimo que ele disponibilizou e todas identificou onde está o captcha... falta somente mover o scroll na distancia em que foi encontrado a imagem... aguardar mais um pouco e ele já posta a versão completa hehe

VitotEPB commented 2 years ago

O bruxo 🧙‍♂️

vini-sousa commented 2 years ago

Sim! Espero que ele consiga inserir a parte de randomização, porque vai ficar perfeito!

flaviomartil commented 2 years ago
from PIL.ImageOps import grayscale
from pyscreeze import GRAYSCALE_DEFAULT
from skimage.metrics import structural_similarity
import cv2
import numpy as np
import pyautogui
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import time
from skimage import io
from PIL import Image
import argparse
import imutils

time.sleep(3)
screenshot1 = pyautogui.screenshot('my_screenshot1.png')
time.sleep(1)
screenshot2 = pyautogui.screenshot('my_screenshot2.png')

before = cv2.imread('my_screenshot1.png')
after = cv2.imread('my_screenshot2.png')

before_gray = cv2.cvtColor(before, cv2.COLOR_BGR2GRAY)
after_gray = cv2.cvtColor(after, cv2.COLOR_BGR2GRAY)

(score, diff) = structural_similarity(before_gray, after_gray, full=True)
print("Image similarity", score)

diff = (diff * 255).astype("uint8")

thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]

mask = np.zeros(before.shape, dtype='uint8')
filled_after = after.copy()

for c in contours:
    area = cv2.contourArea(c)
    if area > 40:
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(before, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.rectangle(after, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.drawContours(mask, [c], 0, (0,255,0), -1)
        cv2.drawContours(filled_after, [c], 0, (0,255,0), -1)

#cv2.imshow('before', before)
#cv2.imshow('after', after)
#cv2.imshow('diff',diff)
##cv2.imshow('mask',mask)
cv2.imwrite('teste.png', mask)

img_mask = Image.open('teste.png').convert('L')
img_mask.save('output_file.jpg')

img_gray = 'output_file.jpg'

image = cv2.imread(img_gray)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]

cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
  cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)

for c in cnts:
  # compute the center of the contour
  M = cv2.moments(c)
  cX = int(M["m10"] / M["m00"])
  cY = int(M["m01"] / M["m00"])
  # draw the contour and center of the shape on the image
  cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
  cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1)
  cv2.putText(image, "center", (cX - 20, cY - 20),
      cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
  # show the image

print (cX)

slider = pyautogui.locateOnScreen('slider.png', confidence = 0.7)
print(slider)
pyautogui.moveTo(slider)
sliderMouseX, sliderMouseY = pyautogui.position()
print (sliderMouseX)
print (sliderMouseY)

pyautogui.dragTo(cX, sliderMouseY, 20, button='left')

Fiz isso ai até agora manos, meio que funcionou nos meus testes.. caso queiram usar para alguma coisa

consegue disponibilizar as imagens que usou aqui?

leopaixaoneto commented 2 years ago

Rapaziada eu ja tenho um bot pronto com a solução já implementada. Meu robô já resolve o captcha 100% e ainda humanizado para sistema anti-bot e tudo mais. Eu li o que vcs estão falando e vcs estão pecando em muitos pontos que vão acabar ferrando a solução de vcs. Quem não quiser esperar muito, entra em contato comigo, a gente troca uma ideia sobre meu robo (não vou dar a solução). Pegar um código pronto da internet copiar, colar e rezar não vai solucionar esse problema. É mais complexo do que vcs imaginam

Fora que meu robo manda foto de novos mapas e saldo para você. Suporte diário e contato comigo caso tenha dúvidas. 100% transparência

LP - Rodolfinho Agulha Quente#7928

iurirs commented 2 years ago

Rapaziada eu ja tenho um bot pronto com a solução já implementada. Meu robô já resolve o captcha 100% e ainda humanizado para sistema anti-bot e tudo mais. Eu li o que vcs estão falando e vcs estão pecando em muitos pontos que vão acabar ferrando a solução de vcs. Quem não quiser esperar muito, entra em contato comigo, a gente troca uma ideia sobre meu robo (não vou dar a solução). Pegar um código pronto da internet copiar, colar e rezar não vai solucionar esse problema. É mais complexo do que vcs imaginam

Fora que meu robo manda foto de novos mapas e saldo para você. Suporte diário e contato comigo caso tenha dúvidas. 100% transparência

Fico feliz pela solução, cara. Mas a galera aqui em questão está empenhada em uma solução para a comunidade, entende?! Algo grátis, enquanto você ta querendo lucrar e ainda meio que de forma sucinta acabou de fazer um escarnio. Enfim, que tudo dê certo para todos nós.

mpcabete commented 2 years ago

Ainda estou trabalhando no capcha, não to conseguindo monitorar as mensagens nos issues, cuidado com os links pessoal! Logo menos trago novidades.

c0nf1ck commented 2 years ago

Rapaziada eu ja tenho um bot pronto com a solução já implementada. Meu robô já resolve o captcha 100% e ainda humanizado para sistema anti-bot e tudo mais. Eu li o que vcs estão falando e vcs estão pecando em muitos pontos que vão acabar ferrando a solução de vcs. Quem não quiser esperar muito, entra em contato comigo, a gente troca uma ideia sobre meu robo (não vou dar a solução). Pegar um código pronto da internet copiar, colar e rezar não vai solucionar esse problema. É mais complexo do que vcs imaginam

Fora que meu robo manda foto de novos mapas e saldo para você. Suporte diário e contato comigo caso tenha dúvidas. 100% transparência

LP - Rodolfinho Agulha Quente#7928

Se é pra falar merda e não ajudar em nada é melhor ficar calado. Bom pra voce q vc tem seu SUPER BOT funcionando.

Aqui trabalhamos na base do open-source.

vini-sousa commented 2 years ago

Gente, o intuito aqui é trabalhar junto pra construir um macro grátis e bom pra todos. Ai vem um querendo aproveitar oportunidade pra vender coisa....pelo amor!

leopaixaoneto commented 2 years ago

Tu quer de graça, pega e coda o seu próprio ué. Eu passei mais de 10 noites dormindo 3 horas por noite para desenvolver um robô seguro e sólido para usarem. Não sou obrigado a me matar para dar de graça pra quem não sabe 10% do que é necessário para fazer a ferramenta. Eu vendo meu tempo, se o seu não vale nada, ai não é minha culpa! E tenho clientes totalmente satisfeitos e que tem suas noites de sono perfeitas por conta das que eu perdi. Se acha que é scam me chama, abro camera, mostro a cara, mostro meu codigo rodando, mostro clientes com os quais vc pode conversar. Eu to aqui com meu github pessoal pra dar scam. Pelo amor né.

c0nf1ck commented 2 years ago

Tu quer de graça, pega e coda o seu próprio ué. Eu passei mais de 10 noites dormindo 3 horas por noite para desenvolver um robô seguro e sólido para usarem. Não sou obrigado a me matar para dar de graça pra quem não sabe 10% do que é necessário para fazer a ferramenta. Eu vendo meu tempo, se o seu não vale nada, ai não é minha culpa! E tenho clientes totalmente satisfeitos e que tem suas noites de sono perfeitas por conta das que eu perdi. Se acha que é scam me chama, abro camera, mostro a cara, mostro meu codigo rodando, mostro clientes com os quais vc pode conversar. Eu to aqui com meu github pessoal pra dar scam. Pelo amor né.

Foda-se?

E outra, ninguem aqui ta pedindo nada de graça pra você, voce que veio fazer divulgação do seu "SUPER BOT" (se é que existe), ninguem tem interesse em nada que venha de voce.

Se puder, pode parar de postar aqui se não vai ajudar em nada.

Wakeupps commented 2 years ago

Rapaziada eu ja tenho um bot pronto com a solução já implementada. Meu robô já resolve o captcha 100% e ainda humanizado para sistema anti-bot e tudo mais. Eu li o que vcs estão falando e vcs estão pecando em muitos pontos que vão acabar ferrando a solução de vcs. Quem não quiser esperar muito, entra em contato comigo, a gente troca uma ideia sobre meu robo (não vou dar a solução). Pegar um código pronto da internet copiar, colar e rezar não vai solucionar esse problema. É mais complexo do que vcs imaginam Fora que meu robo manda foto de novos mapas e saldo para você. Suporte diário e contato comigo caso tenha dúvidas. 100% transparência

Fico feliz pela solução, cara. Mas a galera aqui em questão está empenhada em uma solução para a comunidade, entende?! Algo grátis, enquanto você ta querendo lucrar e ainda meio que de forma sucinta acabou de fazer um escarnio. Enfim, que tudo dê certo para todos nós.

O que eu notei desse post:

Cuidaaaaaaaaado galera, tenham paciência porque quem tem paciência fica rico! E os impacientes ficam pobres :)

leopaixaoneto commented 2 years ago

Sim eu to fazendo FUD no game que eu fiz um robô e to tentando divulgar.

Qual o problema de divulgar em um repo? Existem pessoas interessadas.

Sim estou aproveitando a situação, pois meu robô resolve o problema que todos estão tendo? OBS: nem era pra tu ta usando bot pra começo de conversa, e quer falar de ética.

Falei em cima que abro a camera do meu computador, mostro clientes, codigo rodando, e to o meu git pessoal. Se acha que é scam, 0 estresse

provaClientes

Ta ai, dois dos clientes trocando ideia comigo enquanto eu resolvia o problema.

paulinhop commented 2 years ago

é impressionante, e não foi o primeiro!!! Fiquem espertos e não caiam em golpe galera, bot bom é opensource !!!