Closed Hermanyo closed 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
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
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 ?
@nascimentolf please upload your screenshots so we can test. Thanks
Here some images for you guys. Is it possible to join tests? Will pay for final result, no problem!
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.
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
Donate vem forte assim que eu pegar o ROI hahaha
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
@nascimentolf So did you got it? I mean any full working result? Donation is not a problem.
still not working
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
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]
# 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'])
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():
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():
clickBtn(x_button_img)
# time.sleep(3)
clickBtn(x_button_img)
clickBtn(teasureHunt_icon_img)
def refreshHeroesPositions(): clickBtn(arrow_img) clickBtn(teasureHunt_icon_img)
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)
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 = 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)
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.
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
Anyone with the code working yet?
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.
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?
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
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)
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() `
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)
@gabrielwjesus, responde novamente porém insere o seu codigo dentro de: #
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.
Guys, on BAS I have my bot with this parameters:
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.
já está funcionando ?
wallet password? 0 confidence...
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.
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?
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ês que já conseguiram fazer funcionar, poderiam dividir?
Vocês que já conseguiram fazer funcionar, poderiam dividir?
Estou esperando a resposta do @mpcabete para ver se está funcionando já
@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.
@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
@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 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.
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?
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 ?
@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.
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
O bruxo 🧙♂️
Sim! Espero que ele consiga inserir a parte de randomização, porque vai ficar perfeito!
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?
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
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.
Ainda estou trabalhando no capcha, não to conseguindo monitorar as mensagens nos issues, cuidado com os links pessoal! Logo menos trago novidades.
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.
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!
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é.
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.
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 :)
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
Ta ai, dois dos clientes trocando ideia comigo enquanto eu resolvia o problema.
é impressionante, e não foi o primeiro!!! Fiquem espertos e não caiam em golpe galera, bot bom é opensource !!!
🚨SERVER MAINTENANCE🚨
Server maintenance from 3:00 to 4:00 AM (UTC): ⭐️Fix bugs. ⭐️Optimize some features ⭐️Added anti-BOT feature.