Skip to content

Commit aa3af06

Browse files
committed
Use latest endpoint to handle join requests
1 parent 2023af3 commit aa3af06

File tree

2 files changed

+53
-40
lines changed

2 files changed

+53
-40
lines changed

lib/group/getJoinRequests.js

+38-34
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,49 @@
1-
// Dependencies
2-
var parser = require('cheerio')
3-
41
// Includes
52
var http = require('../util/http.js').func
6-
var getDate = require('../util/getDate.js').func
3+
var getGeneralToken = require('../util/getGeneralToken.js').func
74

85
// Args
96
exports.required = ['group']
10-
exports.optional = ['jar']
7+
exports.optional = ['sortOrder', 'limit', 'cursor', 'jar']
118

129
// 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+
}
2022
}
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+
}
3935
}
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)
4448
})
4549
}

lib/group/onJoinRequestHandle.js

+15-6
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,29 @@ var Promise = require('bluebird')
55
var settings = require('../../settings.json')
66
var shortPoll = require('../util/shortPoll.js').func
77
var getJoinRequests = require('./getJoinRequests.js').func
8-
var handleJoinRequestId = require('./handleJoinRequestId.js').func
8+
var handleJoinRequest = require('./handleJoinRequest.js').func
99

1010
// Args
1111
exports.required = ['group']
1212
exports.optional = ['jar']
1313

14+
async function getRequests (jar, group, cursor) {
15+
const requests = []
16+
await getJoinRequests({ jar, group, cursor, limit: 100 }).timeout(settings.event.timeout).then(async (res) => {
17+
requests.push.apply(requests, res.data)
18+
if (res.nextPageCursor) {
19+
requests.push.apply(requests, await getRequests(jar, group, res.nextPageCursor))
20+
}
21+
})
22+
return requests
23+
}
24+
1425
// Define
1526
exports.func = function (args) {
1627
var group = args.group
1728
var jar = args.jar
18-
var timeout = settings.event.timeout
1929
function getLatest (latest, evt) {
20-
return getJoinRequests({ jar: jar, group: group })
21-
.timeout(timeout)
30+
return getRequests(jar, group)
2231
.then(function (requests) {
2332
var complete = {
2433
data: [],
@@ -30,8 +39,8 @@ exports.func = function (args) {
3039
if (requests.length > 0) {
3140
promise = new Promise(function (resolve, reject) {
3241
evt.on('handle', function (request, accept, callback) {
33-
var id = request.requestId
34-
handleJoinRequestId({ jar: jar, group: group, requestId: id, accept: accept })
42+
var id = request.requester.userId
43+
handleJoinRequest({ jar: jar, group, userId: id, accept: accept })
3544
.then(function () {
3645
handled++
3746
if (callback) {

0 commit comments

Comments
 (0)