UNPKG

rbxjs-plus

Version:

A system allowing access to roblox functions.

76 lines (70 loc) 2.62 kB
// Dependencies var parser = require('cheerio'); // Includes var generalRequest = require('../util/generalRequest.js').func; var getForumError = require('../util/getForumError.js').func; var getHash = require('../util/getHash.js').func; var queue = require('../internal/queue.js'); // Args exports.required = [['forumId', 'postId'], 'body']; exports.optional = ['subject', 'locked', 'jar']; // Define function forumPost (jar, args, res) { if (res.statusCode === 302) { var redirect = res.headers.location; if (redirect.indexOf('/Forum/ShowPost.aspx') === 0) { var post = parseInt(redirect.match(/\d+$/)[0], 10); if (args.postId && post === parseInt(args.postId, 10)) { throw new Error('Post is locked'); } else { return post; } } else { throw getForumError({location: redirect, append: 'Forum post failed'}); } } else if (res.statusCode === 200) { var $ = parser.load(res.body); var found = $('.validationWarningSmall'); var errors = []; for (var i = 0; i < found.length; i++) { var warning = $(found[i]); if (warning.css('display') !== 'none') { errors.push(warning.text()); } } throw new Error('Forum post failed, known issues: ' + JSON.stringify(errors)); } else { throw new Error('Forum post failed, verify that you are allowed to make posts and the message and subject are permitted'); } } exports.func = function (args) { var jar = args.jar; var events = { ctl00$cphRoblox$Createeditpost1$PostForm$PostBody: args.body, ctl00$cphRoblox$Createeditpost1$PostForm$PostButton: 'Post' }; if (args.subject) { events.ctl00$cphRoblox$Createeditpost1$PostForm$NewPostSubject = args.subject; } if (args.locked) { events.ctl00$cphRoblox$Createeditpost1$PostForm$AllowReplies = 'on'; } return queue('Forum', getHash({jar: jar}), function () { return generalRequest({ jar: jar, url: '//forum.roblox.com/Forum/AddPost.aspx' + (args.forumId ? ('?ForumID=' + args.forumId) : ('?PostID=' + args.postId)), events: events, http: { url: '//forum.roblox.com/Forum/AddPost.aspx?ForumID=46' // If you get the verification token from the replying URL that token will not work with a new thread. The other way around, however, it works for both. } }) .then(function (result) { return forumPost(jar, args, result.res); }); }, function (err) { if (err.message.indexOf('Duplicate') > -1 || err.message.indexOf('Post does not exist') > -1) { return false; // Do not ignore } return true; // Ignore }); };