noblox-bonk
Version:
use noblox on vercel for bonk
97 lines (76 loc) • 2.44 kB
JavaScript
/**
* About:
* Saves wall posts to a JSON file with optional filtering.
*
* NOTE: By default, this will save all wall posts. Change the body of shouldSave to alter this behaviour.
*/
// Settings
const cookie = process.env.COOKIE || '' // Roblox account .ROBLOSECURITY cookie
const outputFile = 'wall.json' // Output file name
const options = {
group: 0, // Group Id
sortOrder: 'Asc' // Sort order: "Asc" or "Desc"
}
function shouldSave (wallPost) {
/*
if (wallPost.poster === null) {
return true // Save posts from deleted users
} else if (wallPost.poster.username === "Bob") {
return true // Save posts from Bob
} else if (wallPost.body.toLowerCase().includes("noob")) {
return true // Save post containing "noob", case insensitive
}
return false
*/
return true // Save all posts
}
// Dependencies
const noblox = require('noblox.js')
const logUpdate = require('log-update')
const js = require('JSONStream')
const fs = require('fs')
// Main
const stream = js.stringify('[\n ', ',\n ', '\n]\n')
const output = fs.createWriteStream(`./${outputFile}`)
stream.pipe(output)
const wallPosts = {
found: 0,
written: 0,
skipped: 0
}
async function getWallPage (getWallOptions, cursor) {
getWallOptions.limit = 100
getWallOptions.cursor = cursor || ''
const wallPage = await noblox.getWall(getWallOptions)
return wallPage
}
function streamWallPageData (wallPageData) {
for (const wallPost of wallPageData) {
if (shouldSave(wallPost)) {
stream.write(wallPost)
wallPosts.written += 1
} else {
wallPosts.skipped += 1
}
}
}
noblox.setCookie(cookie)
.then(async () => {
console.time('Time taken')
const logUpdater = setInterval(() => {
logUpdate(`Found: ${wallPosts.found}\nWritten: ${wallPosts.written}\nSkipped: ${wallPosts.skipped}`)
}, 100)
let wallPage = await getWallPage(options)
wallPosts.found += wallPage.data.length
streamWallPageData(wallPage.data)
while (wallPage.nextPageCursor !== null) {
wallPage = await getWallPage(options, wallPage.nextPageCursor)
wallPosts.found += wallPage.data.length
streamWallPageData(wallPage.data)
}
stream.end()
clearInterval(logUpdater)
logUpdate(`Found: ${wallPosts.found}\nWritten: ${wallPosts.written}\nSkipped: ${wallPosts.skipped}`)
console.log(`Done, check ${outputFile} file.`)
console.timeEnd('Time taken')
})