Skip to content
This repository has been archived by the owner on May 21, 2022. It is now read-only.

Commit

Permalink
Final access token refresh fix + error handling fixes (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
nuc1e4r5n4k3 committed Apr 3, 2022
1 parent c40f720 commit f7b73f6
Showing 1 changed file with 23 additions and 14 deletions.
37 changes: 23 additions & 14 deletions bot.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import fetch from 'node-fetch';
import getPixels from "get-pixels";
import WebSocket from 'ws';

const VERSION_NUMBER = 5;
const VERSION_NUMBER = 6;

console.log(`PlaceNL headless client V${VERSION_NUMBER}`);

Expand All @@ -21,7 +21,7 @@ let redditSessionCookies = (process.env.REDDIT_SESSION || args[0]).split(';');

var hasTokens = false;

let accessTokens;
let accessTokenHolders = [];
let defaultAccessToken;

if (redditSessionCookies.length > 4) {
Expand Down Expand Up @@ -139,15 +139,21 @@ function startPlacement() {
}

// Try to stagger pixel placement
const interval = 300 / accessTokens.length;
const interval = 300 / accessTokenHolders.length;
var delay = 0;
for (const accessToken of accessTokens) {
setTimeout(() => attemptPlace(accessToken), delay * 1000);
for (const accessTokenHolder of accessTokenHolders) {
setTimeout(() => attemptPlace(accessTokenHolder), delay * 1000);
delay += interval;
}
}

async function refreshTokens() {
if (accessTokenHolders.length === 0) {
for (const _ of redditSessionCookies) {
accessTokenHolders.push({});
}
}

let tokens = [];
for (const cookie of redditSessionCookies) {
const response = await fetch("https://www.reddit.com/r/place/", {
Expand All @@ -162,8 +168,9 @@ async function refreshTokens() {
}

console.log("Refreshed tokens: ", tokens)

accessTokens = tokens;
tokens.forEach((token, idx) => {
accessTokenHolders[idx].token = token;
});
defaultAccessToken = tokens[0];
hasTokens = true;
}
Expand Down Expand Up @@ -210,8 +217,8 @@ function connectSocket() {
};
}

async function attemptPlace(accessToken) {
let retry = () => attemptPlace(accessToken);
async function attemptPlace(accessTokenHolder) {
let retry = () => attemptPlace(accessTokenHolder);
if (currentOrderList === undefined) {
setTimeout(retry, 2000); // probeer opnieuw in 2sec.
return;
Expand Down Expand Up @@ -254,19 +261,21 @@ async function attemptPlace(accessToken) {

console.log(`Proberen pixel te plaatsen op ${x}, ${y}... (${percentComplete}% compleet, nog ${workRemaining} over)`);

const res = await place(x, y, COLOR_MAPPINGS[hex], accessToken);
const res = await place(x, y, COLOR_MAPPINGS[hex], accessTokenHolder.token);
const data = await res.json();
try {
if (data.errors) {
const error = data.errors[0];
if (error.extensions && error.extensions.nextAvailablePixelTimestamp) {
if (data.error || data.errors) {
const error = data.error || data.errors[0];
if (error.extensions && error.extensions.nextAvailablePixelTs) {
const nextPixel = error.extensions.nextAvailablePixelTs + 3000;
const nextPixelDate = new Date(nextPixel);
const delay = nextPixelDate.getTime() - Date.now();
console.log(`Pixel te snel geplaatst! Volgende pixel wordt geplaatst om ${nextPixelDate.toLocaleTimeString()}.`)
setTimeout(retry, delay);
} else {
console.error(`[!!] Kritieke fout: ${error.message}. Heb je de 'reddit_session' cookie goed gekopieerd?`);
const message = error.message || error.reason || 'Unknown error';
const guidance = message === 'user is not logged in' ? 'Heb je de "reddit_session" cookie goed gekopieerd?' : '';
console.error(`[!!] Kritieke fout: ${message}. ${guidance}`);
console.error(`[!!] Los dit op en herstart het script`);
}
} else {
Expand Down

0 comments on commit f7b73f6

Please sign in to comment.