fix: captcha solver
This commit is contained in:
parent
6be4c4b077
commit
9886b93fef
@ -33,7 +33,7 @@ class APIRequest {
|
|||||||
this.path = `${path}${queryString && `?${queryString}`}`;
|
this.path = `${path}${queryString && `?${queryString}`}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
make(captchaKey = undefined) {
|
make(captchaKey = undefined, captchaRqtoken = undefined) {
|
||||||
agent ??=
|
agent ??=
|
||||||
typeof this.client.options.proxy === 'string' && this.client.options.proxy.length > 0
|
typeof this.client.options.proxy === 'string' && this.client.options.proxy.length > 0
|
||||||
? new proxy(this.client.options.proxy)
|
? new proxy(this.client.options.proxy)
|
||||||
@ -53,7 +53,7 @@ class APIRequest {
|
|||||||
'Accept-Language': 'en-US,en;q=0.9',
|
'Accept-Language': 'en-US,en;q=0.9',
|
||||||
'Cache-Control': 'no-cache',
|
'Cache-Control': 'no-cache',
|
||||||
Pragma: 'no-cache',
|
Pragma: 'no-cache',
|
||||||
'Sec-Ch-Ua': `"Google Chrome";v="${chromeVersion}", "Chromium";v="${chromeVersion}", "Not=A?Brand";v="24"`,
|
'Sec-Ch-Ua': `"Google Chrome";v="${chromeVersion}", "Chromium";v="${chromeVersion}", "Not=A?Brand";v="8"`,
|
||||||
'Sec-Ch-Ua-Mobile': '?0',
|
'Sec-Ch-Ua-Mobile': '?0',
|
||||||
'Sec-Ch-Ua-Platform': '"Windows"',
|
'Sec-Ch-Ua-Platform': '"Windows"',
|
||||||
'Sec-Fetch-Dest': 'empty',
|
'Sec-Fetch-Dest': 'empty',
|
||||||
@ -109,6 +109,7 @@ class APIRequest {
|
|||||||
if (headers['Content-Type'] === 'application/json' && captchaKey && typeof captchaKey == 'string') {
|
if (headers['Content-Type'] === 'application/json' && captchaKey && typeof captchaKey == 'string') {
|
||||||
body = JSON.parse(body || '{}');
|
body = JSON.parse(body || '{}');
|
||||||
body.captcha_key = captchaKey;
|
body.captcha_key = captchaKey;
|
||||||
|
if (captchaRqtoken) body.captcha_rqtoken = captchaRqtoken;
|
||||||
body = JSON.stringify(body);
|
body = JSON.stringify(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const { setTimeout } = require('node:timers');
|
const { setTimeout } = require('node:timers');
|
||||||
const { setTimeout: sleep } = require('node:timers/promises');
|
const { setTimeout: sleep } = require('node:timers/promises');
|
||||||
|
const { inspect } = require('util');
|
||||||
const { AsyncQueue } = require('@sapphire/async-queue');
|
const { AsyncQueue } = require('@sapphire/async-queue');
|
||||||
const DiscordAPIError = require('./DiscordAPIError');
|
const DiscordAPIError = require('./DiscordAPIError');
|
||||||
const HTTPError = require('./HTTPError');
|
const HTTPError = require('./HTTPError');
|
||||||
@ -112,7 +113,7 @@ class RequestHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async execute(request, captchaKey) {
|
async execute(request, captchaKey, captchaToken) {
|
||||||
/*
|
/*
|
||||||
* After calculations have been done, pre-emptively stop further requests
|
* After calculations have been done, pre-emptively stop further requests
|
||||||
* Potentially loop until this task can run if e.g. the global rate limit is hit twice
|
* Potentially loop until this task can run if e.g. the global rate limit is hit twice
|
||||||
@ -203,7 +204,7 @@ class RequestHandler {
|
|||||||
// Perform the request
|
// Perform the request
|
||||||
let res;
|
let res;
|
||||||
try {
|
try {
|
||||||
res = await request.make(captchaKey);
|
res = await request.make(captchaKey, captchaToken);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Retry the specified number of times for request abortions
|
// Retry the specified number of times for request abortions
|
||||||
if (request.retries === this.manager.client.options.retryLimit) {
|
if (request.retries === this.manager.client.options.retryLimit) {
|
||||||
@ -365,7 +366,7 @@ class RequestHandler {
|
|||||||
Method : ${request.method}
|
Method : ${request.method}
|
||||||
Path : ${request.path}
|
Path : ${request.path}
|
||||||
Route : ${request.route}
|
Route : ${request.route}
|
||||||
Sitekey : ${data.captcha_sitekey}`,
|
Info : ${inspect(data, { depth: null })}`,
|
||||||
);
|
);
|
||||||
const captcha = await this.manager.captchaService.solve(data.captcha_sitekey);
|
const captcha = await this.manager.captchaService.solve(data.captcha_sitekey);
|
||||||
this.manager.client.emit(
|
this.manager.client.emit(
|
||||||
@ -374,10 +375,10 @@ class RequestHandler {
|
|||||||
Method : ${request.method}
|
Method : ${request.method}
|
||||||
Path : ${request.path}
|
Path : ${request.path}
|
||||||
Route : ${request.route}
|
Route : ${request.route}
|
||||||
Key : ${captcha}`,
|
Key : ${captcha.slice(0, 50)}...`,
|
||||||
);
|
);
|
||||||
request.retries++;
|
request.retries++;
|
||||||
return this.execute(request, captcha);
|
return this.execute(request, captcha, data.captcha_rqtoken);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new HTTPError(err.message, err.constructor.name, err.status, request);
|
throw new HTTPError(err.message, err.constructor.name, err.status, request);
|
||||||
|
Loading…
Reference in New Issue
Block a user