|
1 |
| -// Dependencies |
2 |
| -var parser = require('cheerio') |
3 |
| - |
4 | 1 | // Includes
|
5 | 2 | var http = require('../util/http.js').func
|
6 |
| -var getDate = require('../util/getDate.js').func |
| 3 | +var getGeneralToken = require('../util/getGeneralToken.js').func |
7 | 4 |
|
8 | 5 | // Args
|
9 | 6 | exports.required = ['group']
|
10 |
| -exports.optional = ['jar'] |
| 7 | +exports.optional = ['sortOrder', 'limit', 'cursor', 'jar'] |
11 | 8 |
|
12 | 9 | // Define
|
13 |
| -exports.func = function (args) { |
14 |
| - var httpOpt = { |
15 |
| - url: '//www.roblox.com/groups/' + args.group + '/joinrequests-html', |
16 |
| - options: { |
17 |
| - jar: args.jar, |
18 |
| - followRedirect: false, |
19 |
| - resolveWithFullResponse: true |
| 10 | +function getJoinRequests (jar, token, group, sortOrder, limit, cursor) { |
| 11 | + return new Promise((resolve, reject) => { |
| 12 | + var httpOpt = { |
| 13 | + url: `//groups.roblox.com/v1/groups/${group}/join-requests?limit=${limit}&sortOrder=${sortOrder}&cursor=${cursor}`, |
| 14 | + options: { |
| 15 | + method: 'GET', |
| 16 | + jar: jar, |
| 17 | + headers: { |
| 18 | + 'X-CSRF-TOKEN': token |
| 19 | + }, |
| 20 | + resolveWithFullResponse: true |
| 21 | + } |
20 | 22 | }
|
21 |
| - } |
22 |
| - return http(httpOpt) |
23 |
| - .then(function (res) { |
24 |
| - if (res.statusCode === 200 && res.body !== '') { |
25 |
| - var requests = [] |
26 |
| - var $ = parser.load(res.body) |
27 |
| - var found = $('#JoinRequestsList').find('tr') |
28 |
| - var len = found.length |
29 |
| - if (len === 1) { |
30 |
| - return false |
31 |
| - } |
32 |
| - for (var i = 1; i < len - 1; i++) { |
33 |
| - var data = found.eq(i).find('td') |
34 |
| - requests.push({ |
35 |
| - username: data.eq(1).text(), |
36 |
| - date: getDate({ time: data.eq(2).text(), timezone: 'CT' }), |
37 |
| - requestId: parseInt(data.eq(3).find('span').attr('data-rbx-join-request'), 10) |
38 |
| - }) |
| 23 | + return http(httpOpt) |
| 24 | + .then(function (res) { |
| 25 | + if (res.statusCode === 200) { |
| 26 | + resolve(JSON.parse(res.body)) |
| 27 | + } else { |
| 28 | + const body = JSON.parse(res.body) || {} |
| 29 | + if (body.errors && body.errors.length > 0) { |
| 30 | + var errors = body.errors.map((e) => { |
| 31 | + return e.message |
| 32 | + }) |
| 33 | + reject(new Error(`${res.statusCode} ${errors.join(', ')}`)) |
| 34 | + } |
39 | 35 | }
|
40 |
| - return requests |
41 |
| - } else { |
42 |
| - throw new Error('Group admin page load failed, make sure the user is in the group and is allowed to handle join requests') |
43 |
| - } |
| 36 | + }) |
| 37 | + }) |
| 38 | +} |
| 39 | + |
| 40 | +exports.func = function (args) { |
| 41 | + const jar = args.jar |
| 42 | + const sortOrder = args.sortOrder || 'Asc' |
| 43 | + const limit = args.limit || (10).toString() |
| 44 | + const cursor = args.cursor || '' |
| 45 | + return getGeneralToken({ jar: jar }) |
| 46 | + .then(function (xcsrf) { |
| 47 | + return getJoinRequests(jar, xcsrf, args.group, sortOrder, limit, cursor) |
44 | 48 | })
|
45 | 49 | }
|
0 commit comments