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

Commit

Permalink
Headless token refresh (#30)
Browse files Browse the repository at this point in the history
  • Loading branch information
KalleStruik committed Apr 3, 2022
1 parent 5dfb4dc commit 680225e
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 14 deletions.
68 changes: 55 additions & 13 deletions bot.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,29 @@ import fetch from 'node-fetch';
import getPixels from "get-pixels";
import WebSocket from 'ws';

const VERSION_NUMBER = 2;
const VERSION_NUMBER = 3;

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

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 @@ -203,7 +247,6 @@ async function attemptPlace(accessToken) {

function place(x, y, color, accessToken = defaultAccessToken) {
socket.send(JSON.stringify({ type: 'placepixel', x, y, color }));
console.log("Placing pixel at (" + x + ", " + y + ") with color: " + color)
return fetch('https://gql-realtime-2.reddit.com/query', {
method: 'POST',
body: JSON.stringify({
Expand Down Expand Up @@ -298,7 +341,6 @@ function getMapFromUrl(url) {
reject()
return
}
console.log("got pixels", pixels.shape.slice())
resolve(pixels)
})
});
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.

0 comments on commit 680225e

Please sign in to comment.