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

Headless token refresh #30

Merged
merged 2 commits into from
Apr 3, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
65 changes: 55 additions & 10 deletions bot.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,23 @@ console.log(`PlaceNL headless client V${VERSION_NUMBER}`);

KalleStruik marked this conversation as resolved.
Show resolved Hide resolved
const args = process.argv.slice(2);

if (args.length != 1 && !process.env.ACCESS_TOKEN) {
console.error("Missing access token.")
//if (args.length != 1 && !process.env.ACCESS_TOKEN) {
// console.error("Missing access token.")
// process.exit(1);
//}
if (args.length != 1 && !process.env.REDDIT_SESSION) {
console.error("Missing reddit_session cookie.")
process.exit(1);
}

let accessTokens = (process.env.ACCESS_TOKEN || args[0]).split(',');
let defaultAccessToken = accessTokens[0];
let redditSessionCookies = (process.env.REDDIT_SESSION || args[0]).split(';');

if (accessTokens.length > 4) {
var hasTokens = false;

let accessTokens;
let defaultAccessToken;

if (redditSessionCookies.length > 4) {
console.warn("Meer dan 4 reddit accounts per IP addres wordt niet geadviseerd!")
}

Expand Down Expand Up @@ -83,7 +91,22 @@ let getPendingWork = (work, rgbaOrder, rgbaCanvas) => {
};

(async function () {
connectSocket();
refreshTokens();
connectSocket();

startPlacement();

setInterval(() => {
if (socket) socket.send(JSON.stringify({ type: 'ping' }));
}, 5000);
})();

function startPlacement() {
if (!hasTokens) {
// Probeer over een seconde opnieuw.
setTimeout(startPlacement, 1000);
return
}

// Try to stagger pixel placement
const interval = 300 / accessTokens.length;
Expand All @@ -92,11 +115,32 @@ let getPendingWork = (work, rgbaOrder, rgbaCanvas) => {
setTimeout(() => attemptPlace(accessToken), delay * 1000);
delay += interval;
}
}

setInterval(() => {
if (socket) socket.send(JSON.stringify({ type: 'ping' }));
}, 5000);
})();
async function refreshTokens() {
let tokens = [];
for (const cookie of redditSessionCookies) {
const response = await fetch("https://www.reddit.com/r/place/", {
headers: {
cookie: `reddit_session=${cookie}`
}
});
const responseText = await response.text()

let token = responseText.split('\"accessToken\":\"')[1].split('"')[0];
tokens.push(token);
}

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

accessTokens = tokens;
defaultAccessToken = tokens[0]

// Refresh de tokens elke 30 minuten. Moet genoeg zijn toch.
setInterval(refreshTokens, 30 * 60 * 1000);

hasTokens = true;
}

function connectSocket() {
console.log('Verbinden met PlaceNL server...')
Expand Down Expand Up @@ -182,6 +226,7 @@ async function attemptPlace(accessToken) {
const data = await res.json();
try {
if (data.errors) {
console.log(data.errors)
KalleStruik marked this conversation as resolved.
Show resolved Hide resolved
const error = data.errors[0];
const nextPixel = error.extensions.nextAvailablePixelTs + 3000;
const nextPixelDate = new Date(nextPixel);
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.